跨Kubernetes集群Ingress上游负载均衡配置故障排查
问题分析与解决方法
核心原因:Host头不匹配
直接代理单个域名时,Nginx默认会将Host请求头设置为目标域名(如validator.amd.com),这正好匹配后端K8s Ingress的Host规则,因此请求能正常路由到后端应用。
但使用upstream配置时,Nginx默认会将Host头设置为上游组的名称(即valid),而后端Ingress仅接受Host为validator.amd.com或validator.bm.com的请求,导致请求被Ingress拒绝,表现为上游配置失效。
解决方法
方法1:为上游服务器指定Host参数
在upstream的每个server条目里添加host参数,明确指定转发时使用的Host头:
upstream valid{ server validator.amd.com:80 host=validator.amd.com; server validator.bm.com:80 host=validator.bm.com; }
然后在对应的location中确保Host头使用$proxy_host(默认值,可显式声明):
location /api/valid { proxy_set_header Content-Type application/json; proxy_set_header Host $proxy_host; proxy_pass http://valid/api/validators; }
其他排查方向
- 检查DNS解析:在独立服务器上执行
ping validator.amd.com和ping validator.bm.com,确认服务器能正常解析这两个域名的IP。如果解析失败,需要配置正确的DNS服务器。 - 查看Nginx错误日志:查看
/var/log/nginx/error.log(路径可能因系统不同而异),里面会记录请求失败的具体原因,比如连接超时、403/404错误等,帮助快速定位问题。 - 验证路径转发规则:确认请求路径转发是否符合预期。比如当请求
/api/valid/abc时,Nginx会转发为http://valid/api/validators/abc,这和直接代理时的路径一致,所以路径问题大概率不是原因,但可以通过日志或抓包验证。
内容的提问来源于stack exchange,提问作者Iceforest
相关产品推荐
相关产品推荐

