По умолчанию установленный Nginx Ingress с помощью HELM в AWS не пробрасывает реальный IP-адрес внутрь балансера, поэтому в логах ингресс-контроллера будут присутствовать логи с внутренних адресов сети.
В каком случае нам нужно иметь реальный адрес? Например если мы хотим на уровне ингресса или приложения анализировать адреса или для их блокировки.
Делается это несложно.
Включаем аннотацию для прокси в сервисе контроллера:
kubectl edit svc nginx-ingress-controller -n kube-system
metadata:
...
annotations:
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
Разрешаем в конфигмапе использование прокси:
kubectl edit configmap nginx-ingress-controller -n kube-system
data:
...
use-proxy-protocol: "true"
Собственно говоря после этого все.
Идем в логи контроллера и смотрим адреса с которого приходят запросы:
kubectl logs -f nginx-ingress-controller-56f4bf4dc9-5pqjn
1.1.1.1 - [1.1.1.1] - - [22/Jan/2019:18:58:23 +0000] "GET /ping HTTP/1.1" 503 197 "-" "Wget" 85 0.000 [-]
В каком случае нам нужно иметь реальный адрес? Например если мы хотим на уровне ингресса или приложения анализировать адреса или для их блокировки.
Делается это несложно.
Включаем аннотацию для прокси в сервисе контроллера:
kubectl edit svc nginx-ingress-controller -n kube-system
metadata:
...
annotations:
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
Разрешаем в конфигмапе использование прокси:
kubectl edit configmap nginx-ingress-controller -n kube-system
data:
...
use-proxy-protocol: "true"
Собственно говоря после этого все.
Идем в логи контроллера и смотрим адреса с которого приходят запросы:
kubectl logs -f nginx-ingress-controller-56f4bf4dc9-5pqjn
1.1.1.1 - [1.1.1.1] - - [22/Jan/2019:18:58:23 +0000] "GET /ping HTTP/1.1" 503 197 "-" "Wget" 85 0.000 [-]