尽管 externalTrafficPolicy 设置为本地,但 Kubernetes 提供了一个内部源 IP
Kubernetes gives an internal source IP although externalTrafficPolicy is set to Local
我们的 Kubernetes 集群包括一个 nginx 负载均衡器,它将请求转发给其他 pods。
但是,nginx 会看到本地源 IP,因此无法设置正确的 X-Real-IP header。我尝试将 nginx 的 externalTrafficPolicy 值设置为 "Local" 但 IP 没有改变。
nginx 服务配置部分:
"selector": {
"app": "nginx-ingress",
"component": "controller",
"release": "loping-lambkin"
},
"clusterIP": "10.106.1.182",
"type": "LoadBalancer",
"sessionAffinity": "None",
"externalTrafficPolicy": "Local",
"healthCheckNodePort": 32718
结果:
GET / HTTP/1.1
Host: example.com:444
X-Request-ID: dd3310a96bf154d2ac38c8877dec312c
X-Real-IP: 10.39.0.0
X-Forwarded-For: 10.39.0.0
我们使用带有 metallb 的裸机集群。
这似乎是 LoadBalancer 类型服务的 IPVS 实现中的错误:https://github.com/google/metallb/issues/290
我发现需要使用 NO_MASQ_LOCAL=1
配置 weave 以遵守 externalTrafficPolicy 属性
我们的 Kubernetes 集群包括一个 nginx 负载均衡器,它将请求转发给其他 pods。
但是,nginx 会看到本地源 IP,因此无法设置正确的 X-Real-IP header。我尝试将 nginx 的 externalTrafficPolicy 值设置为 "Local" 但 IP 没有改变。
nginx 服务配置部分:
"selector": {
"app": "nginx-ingress",
"component": "controller",
"release": "loping-lambkin"
},
"clusterIP": "10.106.1.182",
"type": "LoadBalancer",
"sessionAffinity": "None",
"externalTrafficPolicy": "Local",
"healthCheckNodePort": 32718
结果:
GET / HTTP/1.1
Host: example.com:444
X-Request-ID: dd3310a96bf154d2ac38c8877dec312c
X-Real-IP: 10.39.0.0
X-Forwarded-For: 10.39.0.0
我们使用带有 metallb 的裸机集群。
这似乎是 LoadBalancer 类型服务的 IPVS 实现中的错误:https://github.com/google/metallb/issues/290
我发现需要使用 NO_MASQ_LOCAL=1
配置 weave 以遵守 externalTrafficPolicy 属性