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

启用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:34:56