kubernetes nginx с прокси-протоколом оборвал заголовок

Я пытаюсь настроить вход nginx (nodeport) в контейнере Google с прокси-протоколом, чтобы реальный IP-адрес мог быть перенаправлен в бэкэнд-сервис, но в итоге был сломан заголовок.

2017/02/05 13:48:52 [error] 18#18: *2 broken header: "�����~��]H�k��m[|����I��iv.�{y��Z �嵦v�Ȭq���2Iu4P�z;�    o$�s����"���+�/�,�0̨̩����/" while reading PROXY protocol, client: 10.50.0.1, server: 0.0.0.0:443

Если без протокола прокси, все работает хорошо. Согласно https://blog.mythic-beasts.com/2016/05/09/proxy-protocol-nginx-broken-header/ это связано с использованием протокола v2 (двоичного), но только nginx может говорить на v1, Любое предложение?

3 ответа

GKE: с kubernetes v1.6+ исходный ip сохраняется по умолчанию и может быть найден в заголовках под x-real-ip без установки каких-либо дополнительных настроек nginx.

AWS: исходный ip можно сохранить, добавив это к аннотациям

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
  namespace: nginx-ingress
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
  labels:
    app: nginx-ingress

Проверить эту ссылку https://github.com/kubernetes/ingress/tree/master/examples/aws/nginx

Просто столкнулся с этой проблемой сам. Для меня я не был за балансировщиком нагрузки (кроме моего входа nginx), поэтому мне на самом деле не нужно proxy-protocol задавать.

Тем не менее, я получаю 127.0.0.1 в качестве клиента ip еще. Хитрость в том, что в используемой версии nginx (0.9.0-beta.5) была ошибка. Обновление моего образа контейнера до gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.8 исправили проблему и я получил правильную X-Forwarded-For заголовок.

Обратите внимание, что в более высоких версиях (до бета.11 на момент написания этой статьи) осталась проблема, поэтому я пока остался на бета-версии 8.

Вы можете увидеть версии, доступные по адресу https://console.cloud.google.com/gcr/images/google-containers/GLOBAL/nginx-ingress-controller.

Если вы хотите посмотреть доступные параметры конфигурации, ознакомьтесь с https://github.com/kubernetes/ingress/tree/master/controllers/nginx.

У меня была эта проблема сама, и это было то, что, наконец, заставило ее работать. Обновление до версии beta.8 контроллера nginx.

Если некоторые люди, использующие AWS, хотят учиться на моих ошибках, не выполняйте ручную настройку балансировщика нагрузки через aws cli. Вышеупомянутая аннотация службы делает все это для вас. Я мог бы избавить себя от головной боли, если бы понял это.

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