Mar*_*rot 7 clientip kubernetes
我的目标是使我的Web应用程序(部署在Kubernetes 1.4集群上)看到最初发出HTTP请求的客户端的IP.由于我打算在裸机群集上运行应用程序,因此GCE和service.alpha.kubernetes.io/external-traffic: OnlyLocal1.4中引入的服务注释不适用于我.
寻找替代方案,我发现这个问题建议设置一个Ingress来实现我的目标.所以,我已经设置了Ingress和NginX Ingress控制器.部署进展顺利,我能够通过Ingress地址和端口80连接到我的Web应用程序.但是在日志中我仍然看到集群内部IP(从172.16.0.0/16)范围 - 这意味着外部客户端IP未通过Ingress正确传递.您能否告诉我除了上述内容之外还需要配置什么才能使其正常工作?
我的Ingress'配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myWebApp
spec:
backend:
serviceName: myWebApp
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
Nginx 作为第 4 层代理,无法在实际 IP 数据包中保留原始源 IP 地址。您可以使用代理协议解决此问题(链接指向 HAProxy 文档,但 Nginx 也支持它)。
但是,要使其正常工作,上游服务器(myWebApp在您的情况下是指服务)也需要支持此协议。如果您的上游应用程序也使用 Nginx,您可以在服务器配置中启用代理协议支持,如官方文档中所述。
根据Nginx 入口控制器的文档,可以使用 Kubernetes ConfigMap 在入口控制器中启用此功能:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-ingress-controller
data:
use-proxy-protocol: "true"
Run Code Online (Sandbox Code Playgroud)
通过将--nginx-configmap=<insert-configmap-name>标志添加到命令行参数,在 Ingress 控制器清单中指定 ConfigMap 的名称。
| 归档时间: |
|
| 查看次数: |
2781 次 |
| 最近记录: |