Входящий журнал kubernetes nginx не отображает внешние ips - PullRequest
0 голосов
/ 14 мая 2018

Я получил вход nginx, работающий в gcloud. Тем не менее, когда я вижу журнал с командой 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-адреса, однако во входном контейнере я должен получать внешние IP-адреса своих пользователей. Как я могу увидеть эти ips?

1 Ответ

0 голосов
/ 16 мая 2018

Похоже, исходный IP (в вашем случае, внешний IP) должен быть сохранен при использовании службы GKE. Здесь по умолчанию используется IP-адрес кластера, что означает, что трафик будет проходить через SNAT и передаваться от узла к узлу. В течение этого времени «IP-адрес источника» (внешний IP-адрес) заменяется IP-адресом узла (подробное объяснение приведено в этой статье справочного центра).

Согласно статье , установив ' service.spec.externalTrafficPolicy ' в значение ' Local ', которое будет обходиться SNAT, и вы сможете направлять трафик непосредственно на правильный узел / модуль, сохраняя, таким образом, исходный IP-адрес.

Команда для установки этой exernalTrafficPolicy для службы может выглядеть следующим образом: -

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

В вашем случае service_name = nginx-ingress-controller-59f55c679c-zcr24

...