Невозможно получить реальный удаленный IP в AKS с развитой сетью - PullRequest
0 голосов
/ 19 февраля 2019

У нас есть два кластера AKS для разных сред.Оба используют сервер Nginx в качестве пользовательского входа.Под этим я подразумеваю, что он действует как вход, но это просто обычное развертывание Nginx за сервисом.Есть несколько веских причин для этой установки, главная из которых заключается в том, что вход не существовал в AKS, когда мы начинали.

Сервисы определены следующим образом:

apiVersion: v1
kind: Service
metadata:
  name: <our name>
  namespace: <our namespace>
spec:
  ports:
  - port: 443
    targetPort: 443
  selector:
    app: <our app>
  loadBalancerIP: <our ip>
  type: LoadBalancer
  externalTrafficPolicy: Local

Мы настроили Nginxс настоящим модулем ip следующим образом:

real_ip_header X-Original-Forwarded-For;
set_real_ip_from 10.0.0.0/8; # or whatever ip is correct

В одной среде используется старая базовая сеть networkPlugin = kubenet.Там Nginx записывает реальные IP-адреса клиентов в журнал и может использовать их для контроля доступа.Другой использует расширенную сеть, networkPlugin = azure.Там Nginx регистрирует IP-адрес одного из узлов, который бесполезен.И заголовки X-Original-Forwarded-For, и стандартные заголовки X-Forwarded-For пусты, и, конечно, исходный IP-адрес получен с узла, а не с клиента.

Есть ли способ обойти это?Если это вообще возможно, мы бы хотели избежать определения «реального» входа, поскольку наш собственный сервер Nginx содержит настраиваемую конфигурацию, которую было бы сложно скопировать при такой настройке, плюс не ясно, что стандартный вход также поможет?

1 Ответ

0 голосов
/ 01 марта 2019

Microsoft должна была исправить это к настоящему моменту для реальных входов.Тем не менее, очевидно, что это исправление не распространяется на наш случай, когда Nginx работает как сервис позади сервиса с развитой сетью.Нам сказали использовать обходной путь, опубликованный denniszielke в https://github.com/Azure/AKS/issues/607, где iptables для всех узлов регулярно обновляется.На мой взгляд, он довольно грязный, но он работает.

У нас все еще есть служба, определенная выше с "externalTrafficPolicy: Local", и мы установили ConfigMap и DaemonSet по ссылке.Я изменил сценарий, чтобы немного уменьшить логирование, и переместил оба в другое пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...