You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Nginx Ingress在两个AKS集群间实现蓝绿部署?求实现方案

跨AKS集群基于Nginx Ingress实现蓝绿部署方案

当然可以借助Nginx Ingress在两个AKS集群间实现蓝绿部署,核心是通过全局流量入口的Ingress Controller统一路由流量到蓝、绿环境,或者结合DNS完成平滑切换。以下是具体实现建议:


前提准备

  • 蓝(现有AKS)、绿(新AKS)集群的应用服务已正常运行,且网络互通(如同一VPC、VPC对等连接打通)
  • 拥有一个全局对外域名(如app.example.com)
  • 蓝绿环境的应用接口规范一致,确保切换时用户无感知

方案一:独立全局Nginx Ingress Controller(推荐)

将Ingress Controller部署在独立集群或云负载均衡后,作为统一流量入口,直接路由到两个AKS集群的后端服务:

  1. 部署全局Ingress Controller
    在独立K8s集群(或云托管的轻量K8s环境)部署Nginx Ingress Controller,绑定云厂商公网负载均衡(LB)并关联全局域名。确保该Controller能访问蓝、绿集群的后端服务。

  2. 配置蓝绿服务的Endpoint映射
    在Ingress Controller所在集群中,为蓝、绿环境的应用创建Service+Endpoint,指向对应AKS集群的服务地址:

    # 蓝色环境Service与Endpoint示例
    apiVersion: v1
    kind: Service
    metadata:
      name: app-blue
    spec:
      type: ClusterIP
      ports:
      - port: 80
        targetPort: 8080
    ---
    apiVersion: v1
    kind: Endpoints
    metadata:
      name: app-blue
    subsets:
    - addresses:
      - ip: <蓝色AKS应用的Pod IP/NodePort地址>
      ports:
      - port: 8080
    

    同理创建app-green的Service与Endpoint。

  3. 通过Ingress规则切换流量

    • 初始状态:Ingress仅路由到蓝色环境
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: app-blue-green
        annotations:
          nginx.ingress.kubernetes.io/ssl-redirect: "false"
      spec:
        ingressClassName: nginx
        rules:
        - host: app.example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: app-blue
                  port:
                    number: 80
      
    • 全量切换:修改Ingress的后端服务为app-green即可完成流量切换
    • 灰度验证:借助Canary注解拆分流量,逐步验证绿色环境
      # 新增绿色环境的Canary Ingress
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: app-green-canary
        annotations:
          nginx.ingress.kubernetes.io/canary: "true"
          nginx.ingress.kubernetes.io/canary-weight: "20" # 20%流量导向绿色环境
      spec:
        ingressClassName: nginx
        rules:
        - host: app.example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: app-green
                  port:
                    number: 80
      
      验证无误后,删除Canary Ingress并将主Ingress切换到绿色环境。

方案二:DNS配合集群内Ingress切换

无需独立Ingress Controller,通过DNS解析切换流量:

  1. 为集群Ingress配置子域名
    蓝色集群Ingress绑定blue.app.example.com,绿色集群Ingress绑定green.app.example.com,确保两个Ingress的公网LB可正常访问。

  2. 初始流量指向蓝色环境
    将全局域名app.example.com的DNS解析指向蓝色集群Ingress的LB地址。

  3. 切换流量到绿色环境
    验证绿色环境正常后,修改DNS解析,将app.example.com指向绿色集群Ingress的LB地址。若需灰度,可配置DNS权重解析,逐步提升绿色环境的流量占比。


关键注意事项

  • 网络连通性:必须保证Ingress Controller能访问到两个AKS集群的后端服务,否则流量无法路由
  • 会话保持:若应用需要会话持久化,需在Ingress中添加注解nginx.ingress.kubernetes.io/affinity: "cookie",避免切换时用户会话中断
  • 回滚机制:切换过程中实时监控应用状态,出现问题立即将Ingress规则或DNS切回蓝色环境
  • 资源清理:迁移完成后,逐步下线蓝色环境的应用及相关资源

内容的提问来源于stack exchange,提问作者Rollson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:06:21