Сохранение IP-адреса удаленного клиента с помощью Ingress

Моя цель - сделать так, чтобы мое веб-приложение (развернутое в кластере Kubernetes 1.4) увидело IP-адрес клиента, который первоначально сделал HTTP-запрос. Поскольку я планирую запустить приложение на кластере с голым железом, GCE и service.alpha.kubernetes.io/external-traffic: OnlyLocal аннотация сервиса, введенная в 1.4, для меня неприменима.

В поисках альтернатив, я нашел этот вопрос, который предлагает создать Ingress для достижения моей цели. Итак, я настроил Ingress и NginX Ingress Controller. Развертывание прошло гладко, и я смог подключиться к своему веб-приложению через входящий адрес и порт 80. Однако в журналах я по-прежнему вижу диапазон внутренних IP-адресов кластера (с 172.16.0.0/16) - и это означает, что внешний клиент IP-адреса не проходят должным образом через вход. Не могли бы вы сказать мне, что мне нужно настроить в дополнение к вышесказанному, чтобы он работал?

Мой Ingress'конфиг:

apiVersion: extensions/v1beta1   
kind: Ingress
metadata:
  name: myWebApp
spec:
  backend:
    serviceName: myWebApp
    servicePort: 8080

1 ответ

Решение

Как прокси уровня 4, Nginx не может сохранить исходный IP-адрес источника в фактических IP-пакетах. Вы можете обойти это, используя протокол Proxy (ссылка указывает на документацию HAProxy, но Nginx также поддерживает это).

Однако, чтобы это работало, вышестоящий сервер (myWebApp сервис в вашем случае) также должен поддерживать этот протокол. В случае, если ваше апстрим-приложение также использует Nginx, вы можете включить поддержку прокси-протокола в конфигурации вашего сервера, как описано в официальной документации.

Согласно документации Nginx Ingress Controller, эта функция может быть включена в Ingress Controller с помощью Kubernetes ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-ingress-controller
data:
  use-proxy-protocol: "true"

Укажите имя ConfigMap в манифесте контроллера Ingress, добавив --nginx-configmap=<insert-configmap-name> флаг для аргументов командной строки.

Другие вопросы по тегам