启用Istio Sidecar后Nginx-Ingress HTTP转HTTPS重定向报503错误
问题分析与解决方案
核心问题定位
你遇到的503错误核心原因是Istio Sidecar代理拦截了官方NGINX Ingress Controller的HTTP端口流量,导致NLB转发的HTTP请求无法正确到达NGINX容器。未注入Sidecar时正常、HTTPS访问正常的现象也验证了这一点:HTTPS端口的流量路径未被Sidecar干扰,而HTTP端口的流量被Sidecar拦截后,因缺少正确的上游转发配置返回503。
具体排查与解决步骤
1. 确认Sidecar对HTTP端口的拦截状态
执行以下命令查看Ingress Controller Pod的端口映射,检查Sidecar(istio-proxy容器)是否监听了NGINX的HTTP端口(默认80):
kubectl describe pod <nginx-ingress-pod-name> -n <your-namespace>
如果istio-proxy容器的端口列表中包含80,说明Sidecar已经拦截了该端口的流量,导致请求无法到达NGINX。
2. 方案一:修改NGINX的容器HTTP端口
通过修改custom-values.yaml将NGINX的HTTP容器端口改为非默认值(如8080),避免与Sidecar的默认监听端口冲突:
controller: # 修改NGINX容器的HTTP端口 containerPorts: http: 8080 # 保持服务的HTTP端口为80,映射到容器的8080端口 service: ports: http: 80 targetPort: 8080
更新配置后重新执行Helm升级:
helm upgrade nginx-ingress nginxinc/kubernetes-ingress -n <your-namespace> -f custom-values.yaml
3. 方案二:配置Sidecar排除HTTP端口
如果不想修改NGINX端口,可在Ingress Controller的Deployment中添加注解,让Sidecar不拦截HTTP端口的流量:
spec: template: metadata: annotations: # 排除Sidecar对80端口的入站拦截 traffic.sidecar.istio.io/excludeInboundPorts: "80"
应用该配置后,NLB转发的HTTP流量会直接到达NGINX容器,重定向功能恢复正常。
4. 补充日志排查技巧
如果以上方案未解决问题,可通过以下命令获取更精准的日志:
- 查看NGINX容器的日志(官方版容器名通常为
nginx):
kubectl logs <nginx-ingress-pod-name> -n <your-namespace> nginx
- 过滤Sidecar代理的HTTP请求日志:
kubectl logs <nginx-ingress-pod-name> -n <your-namespace> istio-proxy | grep -E "(GET|POST) /"
内容的提问来源于stack exchange,提问作者babis21
相关产品推荐
相关产品推荐

