AKS中Ingress Nginx出现ERR_TOO_MANY_REDIRECTS问题求助
问题分析
访问afg-cas-preprod.mocomtest.com/auth时出现ERR_TOO_MANY_REDIRECTS错误,结合你的Ingress配置,核心冲突点如下:
- SSL透传与强制重定向冲突:启用
nginx.ingress.kubernetes.io/ssl-passthrough: 'true'后,Ingress Nginx会直接透传TLS流量到后端,不会在Ingress层终止SSL。但同时配置的force-ssl-redirect和ssl-redirect注解会触发Ingress层面的HTTP转HTTPS重定向,与ssl-passthrough模式逻辑冲突,导致重定向混乱。 - 路径重写与后端路由循环:
rewrite-target: /会将所有请求路径重写为根路径,当访问/auth时,请求会被转发到后端/,如果CAS Server本身会将根路径重定向到/auth,就形成/auth → / → /auth的循环。 - 后端HTTPS配置叠加:后端使用6443端口(典型HTTPS端口),若后端自身配置了HTTP转HTTPS重定向,叠加Ingress的ssl-passthrough模式,会导致重复触发重定向逻辑。
解决方案
按以下步骤调整Ingress配置:
1. 清理冲突的SSL注解
由于启用了ssl-passthrough,Ingress层无需处理SSL重定向,直接移除以下注解:
nginx.ingress.kubernetes.io/force-ssl-redirect: 'true' nginx.ingress.kubernetes.io/ssl-redirect: 'true'
保留kubernetes.io/ingress.allow-http: 'false'确保仅接受HTTPS流量。
2. 修正路径重写规则
如果CAS Server需要接收/auth路径请求,移除nginx.ingress.kubernetes.io/rewrite-target: /注解,或调整为匹配实际路由的规则。例如,若后端根路径对应/auth,可修改为:
nginx.ingress.kubernetes.io/rewrite-target: /auth$1
同时更新Ingress的path配置:
paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: cas-server port: number: 6443
这样访问/auth会直接转发到后端的/auth路径,避免重写导致的循环。
3. 验证后端服务配置
检查CAS Server的内部路由,确保不会将/auth重定向回根路径。由于已启用ssl-passthrough,Ingress透传的是HTTPS流量,后端无需再触发HTTP转HTTPS重定向。
调整后的完整Ingress配置示例
kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: cas-ingress namespace: cas annotations: kubernetes.io/ingress.allow-http: 'false' kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/configuration-snippet: | more_set_headers "X-Frame-Options: SAMEORIGIN"; more_set_headers "X-Xss-Protection: 0"; more_set_headers "Referrer-Policy: strict-origin-when-cross-origin"; nginx.ingress.kubernetes.io/proxy-body-size: 10m nginx.ingress.kubernetes.io/session-cookie-hash: sha1 nginx.ingress.kubernetes.io/ssl-passthrough: 'true' spec: tls: - hosts: - afg-cas-preprod.mocomtest.com secretName: mozcomtest-tls rules: - host: afg-cas-preprod.mocomtest.com http: paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: cas-server port: number: 6443
验证调整
应用修改后的Ingress配置:
kubectl apply -f your-ingress-file.yaml -n cas
等待Ingress控制器更新配置后,重新访问目标URL检查问题是否解决。
内容的提问来源于stack exchange,提问作者AKHIL KUMAR
相关产品推荐
相关产品推荐

