kubernetes nginx ingress日志不显示外部ips

时间:2018-05-14 11:27:09

标签: nginx kubernetes google-kubernetes-engine kubernetes-ingress

我在gcloud中使用了入口nginx。但是,当我使用命令kubectl log

查看日志时
$ kubectl logs nginx-ingress-controller-59f55c679c-zcr24
myhost.com/clients"
10.28.0.1 - [10.28.0.1] - - [14/May/2018:09:00:59 +0000] "GET /api/users/2/10 HTTP/1.1" 304 0 "http://myhost.com/clients" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0" 796 0.083 [default-back-main-80] 10.28.0.93:1337 0 0.083 304
2018/05/14 09:01:00 [notice] 10982#10982: *6937489 "/api/(.*)" matches "/api/users/1/10", client: 10.28.0.1, server: myhost.com, request: "GET /api/users/1/10 HTTP/1.1", host: "myhost.com", referrer: "http://myhost.com/clients"
2018/05/14 09:01:00 [notice] 10982#10982: *6937489 rewritten data: "/users/1/10", args: "", client: 10.28.0.1, server: myhost.com, request: "GET /api/users/1/10 HTTP/1.1", host: "myhost.com", referrer: "http://myhost.com/clients"
10.28.0.1 - [10.28.0.1] - - [14/May/2018:09:01:00 +0000] "GET /api/users/1/10 HTTP/1.1" 304 0 "http://myhost.com/clients" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0" 796 0.014 [default-back-main-80] 10.28.0.93:1337 0 0.014 304

这只是日志的一部分,但是,所有的ips都来自10.28.0.1。我想看看外部IP,或者我的用户的ips。

此外,ip 10.28.*.*的根似乎对我来说有点奇怪。如果我显示我的容器的ip,你会发现它看起来不同。

$ kubectl get service | awk '{print $3}'
CLUSTER-IP
10.31.243.114
10.31.245.58
10.31.241.148
10.31.240.1

我理解我的其他容器中的请求来自私有ip,但是在入口容器中我应该收到用户的外部ips。我怎么能看到这些ips?

1 个答案:

答案 0 :(得分:1)

在使用GKE服务时,必须保留source IP(在您的情况下,外部IP)。这里,默认设置为使用群集IP,这意味着流量将通过SNAT并从节点传输到节点。在此期间,'来源IP' (外部IP)被节点的IP替换(this帮助中心文章中提供了详细说明。)

根据article,将“ service.spec.externalTrafficPolicy ”设置为“本地”值,该值将绕过SNAT而您可能是能够将流量直接路由到正确的节点/ pod,从而保留源IP。

为服务设置此 exernalTrafficPolicy 的命令可能如下所示: -

$kubectl patch svc [service_name] -p '{"spec":{"externalTrafficPolicy":"Local"}'

在您的情况下,service_name = nginx-ingress-controller-59f55c679c-zcr24