Kubernetes Nginx入口控制器设置意外的X转发-*头

Kubernetes Nginx入口控制器设置意外的X转发-*头,kubernetes,nginx-ingress,Kubernetes,Nginx Ingress,我遇到EKS上的nginx ingress控制器(ingress nginx v0.44.0)问题,其中X-Forwarded-*头设置为控制器pod运行的kubernetes工作节点,而不是实际用户点击控制器本身的请求的详细信息。 当我们在入口控制器上终止SSL时,这意味着将“X-Forwarded-Proto”设置为“http”,而不是“https”,这会导致应用程序吊舱出现问题 我部署了一个服务器,它返回它收到的头来确认问题,我可以看到这些头已经收到: X-Forwarded-For: &

我遇到EKS上的nginx ingress控制器(ingress nginx v0.44.0)问题,其中X-Forwarded-*头设置为控制器pod运行的kubernetes工作节点,而不是实际用户点击控制器本身的请求的详细信息。 当我们在入口控制器上终止SSL时,这意味着将“X-Forwarded-Proto”设置为“http”,而不是“https”,这会导致应用程序吊舱出现问题

我部署了一个服务器,它返回它收到的头来确认问题,我可以看到这些头已经收到:

X-Forwarded-For: <ip of the eks worker node>
X-Forwarded-Host: foo.bar.net
X-Forwarded-Port: 8000
X-Forwarded-Proto: http

有人对如何配置nginx以发送正确的“X-Forwarded-*”头有什么建议吗?

这在很大程度上取决于nginx前面的确切网络设置。默认情况下,Kubernetes通过隐藏真实客户端IP的kube代理网格路由所有外部连接。您还可能在其前面有某种AWS ELB,它还可以根据设置隐藏客户端IP


对于第一部分,请参见(tl;dr set
externalTrafficPolicy:Local
),但对于第二部分,您必须查看您的特定负载平衡器设置。

谢谢@coderanger,我已经检查了负载平衡器(两者前面都有一个基本负载平衡器,配置几乎相同)由于其中一个工作正常,我不希望它在那里被阻塞。然而,externalTrafficPolicy在这两个服务器上都设置为“集群”,所以这是我需要仔细研究的问题。由于它们都设置为相同的,我不确定是否有任何关系,但值得一些研究,谢谢!
X-Forwarded-For: <ip of the origin of the original request>
X-Forwarded-Host: foo.bar.net
X-Forwarded-Port: 443
X-Forwarded-Proto: https
map $http_x_forwarded_proto $full_x_forwarded_proto {
  default $http_x_forwarded_proto;
  "" $scheme;
}