部署拓扑
- 前端一个Nginx服务器做反向代理(4层或7层)到各worker节点。这个服务器的IP记为IP-A。
- K8S集群里部署了Ingress Controller
- K8S集群是由Rancher创建的
问题
在K8S集群中部署了inanimate/echo-server 看到X-Forwarded-For
请求头得到的是IP-A,而不是客户端IP。
七层代理解决办法
如果前端Nginx服务器使用的是http模式(即7层代理),并且在转发的时候添加了X-Real-IP
和X-Forwarded-For
两个请求头:
|
|
修改ingress-nginx 命名空间下的nginx-configuration ConfigMap,添加use-forwarded-headers: true
四层代理解决办法
如果前端Nginx服务器使用的是stream模式(即4层代理)
-
修改ingress-nginx 命名空间下的nginx-configuration ConfigMap,添加
use-proxy-protocol: true
-
修改Nginx服务器添加
proxy_protocol on;
指令:1 2 3 4 5 6 7 8 9 10
server { listen 80; proxy_pass worker_nodes_http; proxy_protocol on; } server { listen 443; proxy_pass worker_nodes_https; proxy_protocol on; }
-
重启Nginx服务器
坑
- 前端Nginx和后端Nginx要么同时开启PROXY protocol那么同时关闭,否则会无法访问。
- 不要修改Rancher自己的Nginx Ingress的配置,一旦修改你就完了,kubectl会无法使用。
评论