Kubernetes 前后端分离应用部署实践
项目概述
本项目展示了一个典型的前后端分离架构在 Kubernetes 上的完整部署方案。通过命名空间隔离、私有镜像仓库认证、服务分层暴露等最佳实践,为企业级应用的容器化部署提供可参考的实施方案。
架构图示
┌──────────────────────────────────────────────────────────────┐
│ Namespace: app │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────┐ ┌──────────────────────┐ │
│ │ Frontend Layer │ │ Backend Layer │ │
│ │ (app-front) │ │ (app-back) │ │
│ ├────────────────────────┤ ├──────────────────────┤ │
│ │ • 1 Replica │ │ • 2 Replicas │ │
│ │ • NodePort Service │ │ • ClusterIP Service │ │
│ │ • Ports: 80/443 │◄─────►│ • Port: 8080 │ │
│ │ • Memory: 128Mi │ │ • Memory: 1024Mi │ │
│ └──────────┬─────────────┘ └──────────────────────┘ │
│ │ │
│ ▼ │
│ NodePort 31080 (HTTP) │
│ NodePort 31443 (HTTPS) │
│ │
└──────────────────────────────────────────────────────────────┘
▲
│
External Users
技术栈
| 组件 | 技术选型 |
|---|---|
| 容器编排 | Kubernetes |
| 容器镜像仓库 | 阿里云容器镜像服务 (ACR) |
| 镜像地址 | registry.cn-beijing.aliyuncs.com/wxw-plus/w1106 |
| 部署区域 | 华北地区 (北京) |
项目结构
k8s-app/
├── namespace.yml # 命名空间定义
├── secret.yml # Docker Registry 认证凭证
├── back-service.yml # 后端服务与部署配置
└── front-service.yml # 前端服务与部署配置
核心设计
1. 命名空间隔离
所有资源统一部署在 app 命名空间中,实现资源逻辑隔离,便于权限管理和多环境部署。
2. 私有镜像仓库认证
使用 kubernetes.io/dockerconfigjson 类型的 Secret 存储阿里云 ACR 的访问凭证,确保私有镜像的安全拉取。
3. 服务分层架构
| 层级 | 服务类型 | 端口映射 | 副本数 | 用途 |
|---|---|---|---|---|
| 前端 | NodePort | 80→31080, 443→31443 | 1 | 对外暴露 HTTP/HTTPS |
| 后端 | ClusterIP | 8080 | 2 | 内部服务通信 |
4. 资源限制
- 前端: 128Mi 内存限制,适合静态资源服务
- 后端: 1024Mi 内存限制,保障业务服务稳定运行
5. 高可用设计
后端服务配置 2 个副本,配合 ClusterIP 负载均衡,提升服务可用性。
部署步骤
前置条件
- 已安装 kubectl 并配置好集群访问权限
- 拥有阿里云 ACR 的访问凭证
- 集群节点开放 31080 和 31443 端口
快速部署
# 方式一:按顺序应用(推荐首次部署)
kubectl apply -f namespace.yml
kubectl apply -f secret.yml
kubectl apply -f back-service.yml
kubectl apply -f front-service.yml
# 方式二:批量应用
kubectl apply -f .
验证部署
# 查看命名空间
kubectl get ns app
# 查看所有资源
kubectl get all -n app
# 查看 Pod 状态
kubectl get pods -n app -o wide
# 查看服务端口
kubectl get svc -n app
关键配置说明
后端特殊配置
后端 Deployment 使用了 hostNetwork: true,这意味着 Pod 将共享宿主机的网络命名空间。这种配置适用于以下场景:
- 需要直接访问宿主机网络栈
- 特定的网络性能要求
- 与宿主机网络工具集成
⚠️ 注意:生产环境使用前请评估安全风险和网络策略兼容性。
镜像更新策略
两个服务均配置 imagePullPolicy: Always,确保每次启动都从仓库拉取最新镜像,适合持续集成/持续部署场景。
访问方式
部署完成后,可通过以下方式访问应用:
HTTP: http://<node-ip>:31080
HTTPS: https://<node-ip>:31443
其中 <node-ip> 为任意 Kubernetes 节点的 IP 地址。
运维建议
日志查看
kubectl logs -n app -l app=app-back --tail=100
kubectl logs -n app -l app=app-front --tail=100
滚动更新
# 更新后端镜像后触发滚动更新
kubectl rollout restart deployment/app-back -n app
# 查看更新状态
kubectl rollout status deployment/app-back -n app
扩缩容
# 水平扩展后端实例
kubectl scale deployment/app-back -n app --replicas=4
安全注意事项
- Secret 管理: 生产环境建议使用外部密钥管理系统(如 Vault)或云厂商的 Secrets Manager
- 网络策略: 建议配置 NetworkPolicy 限制 Pod 间通信
- 镜像签名: 启用镜像签名验证,防止篡改
- 最小权限: 为 ServiceAccount 分配最小必要权限
总结
本项目展示了 Kubernetes 上部署前后端分离应用的核心实践:
- ✅ 命名空间资源隔离
- ✅ 私有镜像仓库集成
- ✅ 服务分层与流量管控
- ✅ 资源配额管理
- ✅ 高可用架构设计
该方案可作为企业级微服务部署的基础模板,根据实际业务需求进行扩展和优化。
参考文献
📝 本文档作为技术分享文章发布,欢迎 fork 并根据实际需求调整配置。