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

Istio流量控制失效:Nginx Ingress下蓝绿部署不生效

Istio蓝绿部署不生效问题排查与解决

核心问题

当前请求通过Nginx Ingress直接转发到frontend Service,完全绕过了Istio的Ingress Gateway,导致Istio的VirtualService、DestinationRule流量规则无法生效,流量自然会随机分配到两个版本的Deployment。

解决方案步骤

1. 移除Nginx Ingress配置

删除现有Nginx Ingress资源,避免与Istio Gateway冲突:

kubectl delete ingress frontend -n dev

2. 完善DestinationRule配置

当前DestinationRule仅定义了v1子集,蓝绿部署需同时包含v2子集,确保后续可切换流量:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  namespace: dev
  name: frontend
spec:
  host: frontend
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

应用修改:

kubectl apply -f <上述yaml文件路径>

3. 验证Istio Sidecar注入状态

确认dev命名空间下的Pod已注入Istio Sidecar(每个Pod需包含2个容器:应用容器+istio-proxy):

kubectl get pods -n dev

若Pod未注入Sidecar,重启Deployment强制注入:

kubectl rollout restart deployment frontend-v1 frontend-v2 -n dev

4. 通过Istio Ingress Gateway访问服务

在Minikube环境中,执行以下命令暴露Istio Ingress Gateway的NodePort:

minikube tunnel

获取Istio Ingress Gateway的外部IP:

kubectl get svc istio-ingressgateway -n istio-system

修改本地hosts文件,将products.localdev.me映射到上述外部IP,访问http://products.localdev.me即可触发Istio流量规则。

5. 验证流量规则生效

多次访问确认流量全部流向v1,之后修改VirtualService切换流量到v2验证蓝绿部署:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: dev
  name: frontend
spec:
  hosts:
  - products.localdev.me
  gateways:
  - frontend
  http:
  - name: frontend
    route:
    - destination:
        host: frontend
        subset: v2
      weight: 100

应用修改后再次访问,确认流量已切换到v2。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:53:16