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
相关产品推荐
相关产品推荐

