如何创建反向代理转发流量至Kubernetes Ingress Controller(如HAProxy/Nginx)
问题描述
- 需求:将服务器
192.168.243.71的流量转发至oc get routes/kubectl get ingress命令返回的域名 - 异常:部署在
192.168.243.x的Nginx反向代理,实际将请求转发到负载均衡器IP,而非配置的真实域名 - 当前访问结果:

- 期望:访问
192.168.243.71时,得到与直接访问目标域名完全一致的响应
解决方案
1. 调整Nginx代理配置
问题根源是Nginx默认会提前将配置的域名解析为IP并固定转发,且未正确传递Host头,导致后端Ingress/Route无法匹配对应域名规则。修改nginx.conf中的代理块:
server { listen 80; server_name 192.168.243.71; location / { # 替换为oc get routes/kubectl get ingress返回的真实域名 proxy_pass https://your-target-domain.com; # 传递目标域名作为Host头,让后端Ingress/Route识别规则 proxy_set_header Host your-target-domain.com; # 传递客户端真实IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 启用动态DNS解析,避免Nginx提前将域名解析为负载均衡器IP resolver 192.168.243.1; # 替换为你的内部DNS服务器,或用公共DNS如8.8.8.8 proxy_ssl_server_name on; # 若目标是HTTPS,启用SNI支持 } }
2. 关键配置解释
proxy_set_header Host your-target-domain.com:强制后端服务收到的Host头为目标域名,确保Ingress/Route能匹配对应的路由规则resolver:指定DNS服务器,让Nginx每次请求时动态解析目标域名,避免固定转发到某一个负载均衡器IPproxy_ssl_server_name on:当目标域名是HTTPS时,启用SNI可以避免SSL握手失败,确保正确匹配后端SSL证书
3. 验证生效
修改配置后,重启Nginx使配置生效:
nginx -s reload
再次访问192.168.243.71,检查响应是否与直接访问目标域名一致。
内容的提问来源于stack exchange,提问作者Gilang Adhi Wibowo
相关产品推荐
相关产品推荐

