Рейтинг:2

Переадресация реального IP-адреса запросчика в K3S NGINX ingress

флаг za

Я настроил среду K3S Kubernetes в своей частной домашней лаборатории на Raspberry PI, чтобы научить себя некоторым Kubernetes (Noob-Alert), используя NGINX в качестве Ingress Controller, и я как бы застрял в передаче реального IP-запросов. к целевым модулям, в моем случае — к экземпляру Nextcloud. Версия K3S v1.22.5+k3s1.

K3S был настроен с использованием Docker в качестве среды выполнения контейнера и с --no-deploy трафик вариант.

После этого я развернул NGINX Ingress Controller, используя

kubectl применить -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml

Затем, после развертывания модулей Nextcloud, я развернул Ingress:

Версия API: networking.k8s.io/v1
вид: Вход
метаданные:
  имя: nginx-вход
  аннотации:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
спецификация:
  тлс:
  - хозяева:
    - my.own-dns.org
    secretName: очень секретный-ssl-секрет
  ingressClassName: nginx
  правила:
  - хост: my.own-dns.org
    http:
      пути:
        - путь: /somepath
          тип пути: префикс
          серверная часть:
            оказание услуг:
              Название: SomeService-Service
              порт:
                номер: 8081
        - дорожка: /
          тип пути: префикс
          серверная часть:
            оказание услуг:
              имя: nextcloud-сервис
              порт:
                номер: 80

При развертывании IngressController я добавил следующие записи в ConfigMap:

апиВерсия: v1
вид: карта конфигурации
метаданные:
  этикетки:
    helm.sh/диаграмма: вход-nginx-4.0.10
    app.kubernetes.io/имя: вход-nginx
    app.kubernetes.io/экземпляр: вход-nginx
    app.kubernetes.io/версия: 1.1.0
    app.kubernetes.io/managed-by: Хелм
    app.kubernetes.io/component: контроллер
  имя: входной-nginx-контроллер
  пространство имен: вход-nginx
данные:
  разрешить фрагмент-аннотации: «истина»
  вычислить-полностью-переадресовано-для: «истина»
  использовать перенаправленные заголовки: «истина»
  включить-реальный-ip: «истина»
  proxy-add-original-uri-header: 'true'
  переадресовано для заголовка: 'X-Forwarded-For'

и изменил ServiceType с службы http на LoadBalancer, поэтому моя служба IngressController выглядит так:

апиВерсия: v1
вид: сервис
метаданные:
  аннотации:
  этикетки:
    helm.sh/диаграмма: вход-nginx-4.0.10
    app.kubernetes.io/имя: вход-nginx
    app.kubernetes.io/экземпляр: вход-nginx
    app.kubernetes.io/версия: 1.1.0
    app.kubernetes.io/managed-by: Хелм
    app.kubernetes.io/component: контроллер
  имя: входной-nginx-контроллер
  пространство имен: вход-nginx
спецификация:
  тип: LoadBalancer
  ipFamilyPolicy: одиночный стек
  ipFamilies:
    - IPv4
  порты:
    - имя: http
      порт: 80
      протокол: TCP
      целевой порт: http
      приложениеПротокол: http
    - имя: https
      порт: 443
      протокол: TCP
      целевой порт: https
      приложениеПротокол: https
  селектор:
    app.kubernetes.io/имя: вход-nginx
    app.kubernetes.io/экземпляр: вход-nginx
    app.kubernetes.io/component: контроллер

Пока все хорошо, доступ к экземпляру Nextcloud из Интернета работает отлично, включая перенаправление на https и т. д. Но журнал аудита Nextcloud получает только внутренний IP-адрес кластера в качестве исходного IP-адреса (на удивление, нет IP-адреса из какой-либо службы, которую я запускаю внутри кластера). ), а не реальное из внешнего мира.

Итак, что мне не хватает? Я попытался установить использовать прокси-протокол истинно, но это приводит к ERR_CONNECTION_RESET.

Рейтинг:0
флаг cn

Вы пытались установить для spec.externalTrafficPolicy значение local? Посмотри на документация по кубернету о последствиях.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.