Я настроил среду 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
.