Kubernetes 前后端分离应用部署实践

6 阅读4分钟

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. 服务分层架构

层级服务类型端口映射副本数用途
前端NodePort80→31080, 443→314431对外暴露 HTTP/HTTPS
后端ClusterIP80802内部服务通信

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

安全注意事项

  1. Secret 管理: 生产环境建议使用外部密钥管理系统(如 Vault)或云厂商的 Secrets Manager
  2. 网络策略: 建议配置 NetworkPolicy 限制 Pod 间通信
  3. 镜像签名: 启用镜像签名验证,防止篡改
  4. 最小权限: 为 ServiceAccount 分配最小必要权限

总结

本项目展示了 Kubernetes 上部署前后端分离应用的核心实践:

  • ✅ 命名空间资源隔离
  • ✅ 私有镜像仓库集成
  • ✅ 服务分层与流量管控
  • ✅ 资源配额管理
  • ✅ 高可用架构设计

该方案可作为企业级微服务部署的基础模板,根据实际业务需求进行扩展和优化。


参考文献


📝 本文档作为技术分享文章发布,欢迎 fork 并根据实际需求调整配置。