Перед ingress-nginx стоит внешний балансировщик или CDN. В X-Forwarded-For и X-Real-IP приходит адрес балансировщика, либо цепочка адресов обрезана.
Перед ingress-nginx стоит внешний балансировщик или CDN. В X-Forwarded-For и X-Real-IP приходит адрес балансировщика, либо цепочка адресов обрезана.
L7-балансировщик или CDN. Нужен inlet LoadBalancer или HostPort. В его секции (spec.loadBalancer или spec.hostPort) задайте behindL7Proxy: true, а в acceptClientIPHeadersFrom перечислите подсети балансировщика или CDN. По умолчанию заголовкам доверяют от всех, поэтому ограничьте источники. Чтобы сохранить всю цепочку X-Forwarded-For, добавьте в spec.config параметр compute-full-forwarded-for: "true".
Cloudflare или другой прокси со своим заголовком. Там же задайте realIPHeader: CF-Connecting-IP; параметр работает только вместе с behindL7Proxy: true.
spec:
inlet: LoadBalancer
loadBalancer:
behindL7Proxy: true
realIPHeader: CF-Connecting-IP
acceptClientIPHeadersFrom:
- <подсеть-балансировщика>
TCP-балансировщик. Включите на нём PROXY protocol и используйте inlet LoadBalancerWithProxyProtocol или HostPortWithProxyProtocol. Inlet у существующего контроллера не меняется: создайте новый IngressNginxController. Источники запросов ограничьте через acceptRequestsFrom.
Бесконечное перенаправление (ответ 301) при behindL7Proxy и CDN, который ходит на origin по HTTP. CDN передаёт X-Forwarded-Proto: http, и Ingress снова отправляет на HTTPS. Настройте CDN на обращение по HTTPS или отключите перенаправление на Ingress: nginx.ingress.kubernetes.io/ssl-redirect: "false".
Не задавайте server-snippet в spec.config вместе с acceptRequestsFrom: Deckhouse Platform сам использует этот ключ для ограничения доступа.
Подробнее в документации: параметр behindL7Proxy и остальные параметры IngressNginxController.