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

Kubernetes Ingress配置NLB SSL终止时遇无限重定向循环问题

无限重定向循环的原因及解决方法

原因分析

  • Ingress TLS配置与NLB SSL终止逻辑冲突:你在Ingress资源中配置了tls块,这会让Ingress Controller认为需要自己处理SSL加密/解密流程,但你指定的tls-secret并没有有效证书(AWS托管证书无法导出私钥,无法创建Kubernetes要求的TLS Secret)。Ingress Controller在检测不到有效证书时,会触发默认的强制重定向——把所有HTTP请求转向HTTPS。但你的NLB已经在负载均衡层完成了SSL终止,将HTTPS请求转换成HTTP后转发给Ingress Controller,这就形成了死循环:NLB发HTTP请求给Controller → Controller重定向到HTTPS → 用户浏览器发起HTTPS请求 → NLB再转成HTTP发给Controller,反复循环。
  • Ingress Controller无法识别原始请求协议:NLB终止SSL后转发的是HTTP流量,Ingress Controller默认会判定这是普通HTTP请求,再加上Ingress里的tls配置,它会认为客户端应该使用HTTPS访问,因此不断触发重定向操作。

解决方法

方法1:直接移除Ingress中的TLS配置块

既然SSL终止已经在NLB层完成,Ingress Controller只需要处理HTTP流量,完全不需要在Ingress资源里配置tls块。你之前移除该块后重定向停止,就是因为Ingress Controller不再强制要求HTTPS,直接处理NLB转发的HTTP请求即可。

方法2:配置Ingress Controller识别原始HTTPS请求(可选,适用于后端需要感知协议的场景)

如果你的后端服务需要知道用户发起的是HTTPS请求(比如生成正确的HTTPS链接),可以做以下配置:

  1. 给Ingress Controller的Service添加代理协议注解:
    在Service的metadata.annotations中添加:
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
    
    该注解会让NLB发送代理协议头,Ingress Controller可通过这个头识别原始请求的协议为HTTPS。
  2. 启用Ingress Controller的代理协议支持:
    针对ingress-nginx控制器,在其对应的ConfigMap中添加:
    use-proxy-protocol: "true"
    
    确保控制器能正确解析代理协议头。
  3. 开启X-Forwarded-Headers信任:
    同样在ConfigMap中设置:
    use-forwarded-headers: "true"
    
    这样控制器会使用NLB传递的X-Forwarded-Proto: https头判断原始请求协议,不会再触发HTTP到HTTPS的重定向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:36:32