AKS Ingress转发标头问题:真实域名未从Front Door传递
解决Azure Front Door转发至AKS时X-Forwarded-Host标头被替换为私有DNS地址的问题
针对你遇到的真实域名无法通过Azure Front Door正确转发、X-Forwarded-Host被替换为私有DNS地址的问题,可从以下几个关键配置点排查修复:
1. 修正AKS Application Routing Add-on的Ingress注解
Application Routing Add-on默认的Nginx Ingress Controller会自动重写Host头,需添加注解强制保留原始请求的Host信息:
- 在Ingress资源中添加
nginx.ingress.kubernetes.io/preserve-host: "true",阻止Ingress将Host头替换为内部私有域名 - 检查是否存在
nginx.ingress.kubernetes.io/proxy-set-header注解强制设置X-Forwarded-Host为内部值,如有需删除或调整为保留原始值
示例Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: auth-ingress annotations: nginx.ingress.kubernetes.io/preserve-host: "true" spec: ingressClassName: webapprouting.kubernetes.io rules: - host: auth.company.com http: paths: - path: / pathType: Prefix backend: service: name: auth-service port: number: 8080
2. 调整Azure Front Door的源转发配置
- 进入Front Door的源设置,将转发主机头选项从默认的
源主机头改为自定义主机头,并填入你的真实域名(如auth.company.com) - 检查Front Door的路由规则,确认没有规则主动修改X-Forwarded-Host标头导致冲突
3. 确认Ingress的Host绑定配置
确保Ingress资源的spec.rules.host字段设置为真实域名auth.company.com,而非内部私有域名auth-dev.cluster.company.internal。若Ingress绑定内部域名,Nginx会自动将Host头替换为该值,覆盖Front Door传递的原始标头。
4. 排查链路中的标头传递
- 通过
kubectl logs查看Ingress Controller的访问日志,确认请求到达Ingress时的X-Forwarded-Host值,以此定位标头替换发生在Front Door/PLS阶段还是AKS内部Ingress阶段 - 验证Private Link Service(PLS)和Internal LB无额外的HTTP标头改写逻辑,两者默认不会修改请求标头,重点排查配置是否存在异常
内容的提问来源于stack exchange,提问作者SOK
相关产品推荐
相关产品推荐

