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

Ingress规则与LoadBalancer类型Service配合异常:无限重定向问题排查

解决Ingress转发至LoadBalancer类型Service时的无限重定向问题

你遇到的这个问题其实很常见,核心矛盾出在请求协议传递和应用重定向逻辑的不匹配上,我来帮你拆解分析并给出解决方案:

问题根源分析

当你访问https://demo.azure.com/demo时,Nginx Ingress会把HTTPS请求终止后,通过HTTP协议转发到后端demo-backend的ClusterIP(LoadBalancer类型的Service本质上也有内部ClusterIP)。如果你的demo-backend应用配置了强制HTTPS重定向(比如把所有HTTP请求跳转至HTTPS),它会返回重定向响应要求浏览器访问https://demo.azure.com/demo,浏览器再次发起HTTPS请求到Ingress,Ingress又转成HTTP发给后端,如此循环就形成了无限重定向。

而aks-helloworld是ClusterIP类型,要么它没配置强制HTTPS重定向,要么它的逻辑能正确识别Ingress传递的头信息,所以没有触发循环。另外还有一种可能:demo-backend的应用把自己的外部地址设成了LoadBalancer的23.99.128.86,重定向时会跳转到这个IP,导致浏览器反复在域名和IP之间跳转。

解决方案

方案1:调整Ingress配置,传递正确的协议头

让Nginx Ingress向后端传递原始请求的协议(HTTPS),这样应用就不会再触发HTTP转HTTPS的重定向。修改你的Ingress配置,添加对应的注解:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    # 开启SSL自动重定向(可选,将HTTP请求转HTTPS)
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    # 向后端传递原始请求的协议类型
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header X-Forwarded-Proto $scheme;
    # 也可以用更简洁的注解(需Ingress Controller支持)
    nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
spec:
  tls:
  - hosts:
    - demo.azure.com
    secretName: aks-ingress-tls
  rules:
  - host: demo.azure.com
    http:
      paths:
      - path: /
        backend:
          serviceName: aks-helloworld
          servicePort: 80
      - path: /demo
        backend:
          serviceName: demo-backend
          servicePort: 80

更新配置后等待Ingress Controller重载规则,再测试https://demo.azure.com/demo即可。

方案2:将demo-backend改为ClusterIP类型(推荐)

如果demo-backend不需要直接通过LoadBalancer对外暴露(已经通过Ingress作为统一入口),完全可以把它改成ClusterIP类型,既节省外部IP资源,也从根源上避免重定向问题:

  1. 修改Service类型:
kubectl patch service demo-backend -p '{"spec":{"type":"ClusterIP"}}'
  1. 验证修改结果:
kubectl get services demo-backend

看到EXTERNAL-IP变为<none>后,再访问https://demo.azure.com/demo就能正常工作了。

方案3:调整demo-backend应用的重定向逻辑

如果必须保留LoadBalancer类型的Service,你可以修改应用配置:

  • 关闭强制HTTPS重定向,或者添加例外规则,允许来自Ingress的HTTP请求(因为Ingress已经处理了HTTPS终止)
  • 配置应用使用Ingress域名demo.azure.com作为外部访问地址,而非LoadBalancer的IP,确保重定向目标正确。

验证方法

修改配置后,用curl命令调试重定向流程,确认循环是否终止:

curl -v https://demo.azure.com/demo

查看响应中的Location头,确认重定向目标是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:26:27