IngressNginxController
Scope: Cluster
- массив строк
Список адресов в формате CIDR, которым разрешен доступ к контроллеру.
Независимо от инлета всегда проверяется непосредственный адрес (поле
original_address
в логах), с которого производится подключение, а не адрес клиента, который может передаваться в некоторых инлетах через заголовки или с использованием proxy protocol.Параметр реализован с помощью map module. Если адрес, с которого производится подключение, не разрешен, nginx закрывает соединение, отправляя код
444
).По умолчанию к контроллеру можно подключаться с любых адресов.
- объект
Секция настроек Ingress-контроллера, в которую в формате
ключ: значение(строка)
можно записать любые возможные опции.Ошибка в опциях может привести к неработоспособности Ingress-контроллера.
Используйте опцию с осторожностью, поскольку обратная совместимость и работоспособность Ingress-контроллера не гарантируются.
- строка
Версия NGINX Ingress Controller.
По умолчанию используется версия из настроек модуля.
Допустимые значения:
1.9
,1.10
,1.12
- объект
Секция с настройкой кастомизации HTTP-ошибок.
Если секция указана в настройках, все параметры в ней являются обязательными.
Изменение любого параметра приводит к перезапуску всех Ingress-контроллеров.
- массив строк
Обязательный параметр
Список кодов ответа (массив), при которых запрос будет перенаправляться на кастомный бэкенд.
- объект
Сертификат, который используется:
- при запросах на
catch-all
-сервер (подразумевается директива server nginx). Наcatch-all
-сервер попадают запросы, для которых нет соответствующего Ingress-ресурса; - для Ingress–ресурсов, в которых не задан
secretName
в секцииtls
.
По умолчанию используется самоподписанный сертификат.
Внимание. Параметр не влияет на сертификаты, используемые в Ingress-ресурсах модулей Deckhouse. Чтобы указать сертификат для Ingress-ресурсов модулей Deckhouse, используйте глобальный параметр
modules.https.customCertificate
. - при запросах на
- булевый
Добавляет к подам контроллера аннотации для автоматического инжекта сайдкаров Istio.
При включении этого параметра к подам Ingress-контроллера добавляются аннотации
sidecar.istio.io/inject: "true"
иtraffic.sidecar.istio.io/includeOutboundIPRanges: "<Service CIDR>"
. При создании таких подов к ним автоматически будут добавлены сайдкары Istio с помощью mutating webhook. После этого весь трафик в сторону Service CIDR будет перехватываться сайдкаром.Чтобы воспользоваться этой функцией, добавьте аннотации в прикладные Ingress-ресурсы:
nginx.ingress.kubernetes.io/service-upstream: "true"
— с этой аннотацией Ingress-контроллер будет отправлять запросы на ClusterIP сервиса (из диапазона Service CIDR) вместо того, чтобы слать их напрямую в поды приложения. Сайдкарistio-proxy
перехватывает трафик только в сторону диапазона Service CIDR, остальные запросы отправляются напрямую;nginx.ingress.kubernetes.io/upstream-vhost: myservice.myns.svc
— с данной аннотацией сайдкар сможет идентифицировать прикладной сервис, для которого предназначен запрос.
Внимание. Данный параметр не может быть включен, если инлет Ingress-контроллера установлен в значение
HostWithFailover
. - массив строк
Список ревизий баз данных, которые будут скачаны при старте.
Подробнее о базах данных GeoLite — в статье в блоге MaxMind.
По умолчанию:
["GeoLite2-City","GeoLite2-ASN"]
- строка
Лицензионный ключ для скачивания базы данных GeoIP2.
При наличии ключа в конфигурации база GeoIP2 скачивается при каждом старте контроллера. Подробнее о получении ключа — в статье в блоге MaxMind.
- булевый
Включает использование заголовков ответа HTTP Strict-Transport-Security (HSTS). Подробнее о заголовках HSTS — в статье на портале MDN Web Docs.
По умолчанию:
false
- строка
Имя Ingress-класса для обслуживания NGINX Ingress Controller.
Позволяет создать несколько контроллеров для обслуживания одного Ingress-класса.
Если указать значение
nginx
, дополнительно будут обрабатываться Ingress-ресурсы без аннотацииkubernetes.io/ingress.class
или поляspec.ingressClassName
.По умолчанию:
"nginx"
Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
Пример:
1ingressClass: nginx
- строка
Обязательный параметр
Способ приема трафика из внешней сети. Изменение установленного способа невозможно.
Возможные значения:
LoadBalancer
— устанавливается Ingress-контроллер, и заказывается сервис с типомLoadBalancer
;LoadBalancerWithProxyProtocol
— устанавливается Ingress-контроллер, и заказывается сервис с типомLoadBalancer
. Ingress-контроллер использует proxy-protocol для получения настоящего IP-адреса клиента;-
LoadBalancerWithSSLPassthrough
— устанавливается Ingress-контроллер, и заказывается сервис с типомLoadBalancer
. Этот инлет включает функцию SSL Passthrough, которая позволяет настроить бэкенды на приём SSL-трафика напрямую, без терминации на Ingress-контроллере.Функция SSL Passthrough реализована путем перехвата всего трафика на настроенном HTTPS-порту (по умолчанию:
443
) и передачи его локальному TCP-прокси. Это полностью обходит NGINX и приводит к существенному снижению производительности.Протокол SSL Passthrough использует Server Name Indication (SNI) и считывает данные о виртуальном домене из протокола согласования TLS, для чего требуется подходящий клиент.
Если имя хоста не совпадает с запрошенным именем хоста, запрос передается в NGINX на настроенный SSL Passthrough прокси-порт (по умолчанию:
442
), который затем передает запрос серверу по умолчанию.В отличие от HTTP-бэкендов, трафик для SSL Passthrough бэкендов отправляется на ClusterIP, а не на отдельные эндпоинты.
Поскольку SSL Passthrough работает на 4 уровне модели OSI (TCP), а не на уровне 7 (HTTP), использование SSL Passthrough делает невозможным использование всех остальных аннотаций, установленных для Ingress.
HostPort
— устанавливается Ingress-контроллер, который доступен на портах узлов черезhostPort
;-
HostPortWithProxyProtocol
— устанавливается Ingress-контроллер, который доступен на портах узлов черезhostPort
и использует proxy-protocol для получения настоящего IP-адреса клиента.Важно. Перед использованием этого инлета убедитесь, что запросы к Ingress будут направляться только от доверенных источников. Для настройки ограничений воспользуйтесь параметром
acceptRequestsFrom
. -
HostPortWithSSLPassthrough
— устанавливается Ingress-контроллер, который доступен на портах узлов черезhostPort
. Этот инлет включает функцию SSL Passthrough, которая позволяет настроить бэкенды на приём SSL-трафика напрямую, без терминации на Ingress-контроллере.Укажите параметры работы инлета в секции
spec.HostPortWithSSLPassthrough
.Протокол SSL Passthrough использует SNI и считывает данные о виртуальном домене из протокола согласования TLS, для чего требуется подходящий клиент.
Если имя хоста не совпадает с запрошенным именем хоста, запрос передается в NGINX на настроенный SSL Passthrough прокси-порт (по умолчанию:
442
), который затем передает запрос серверу по умолчанию.Функция SSL Passthrough реализована путем перехвата всего трафика на настроенном HTTPS-порту (по умолчанию:
443
) и передачи его локальному TCP-прокси. Это полностью обходит NGINX и приводит к существенному снижению производительности.В отличие от HTTP-бэкендов, трафик для SSL Passthrough бэкендов отправляется на ClusterIP, а не на отдельные эндпоинты.
Поскольку SSL Passthrough работает на 4 уровне модели OSI (TCP), а не на уровне 7 (HTTP), использование SSL Passthrough делает невозможным использование всех остальных аннотаций, установленных для Ingress.
-
HostWithFailover
— устанавливаются два Ingress-контроллера — основной и резервный. Основной контроллер запускается вhostNetwork
. Если поды основного контроллера недоступны, трафик уходит в резервный контроллер.На одном хосте может быть только один контроллер с данным типом инлета.
Убедитесь, что на узле свободны следующие порты:
80
,81
,443
,444
,4207
,4208
.Чтобы поменять инлет, удалите правила iptables и перезапустите поды
kube-proxy
или перезагрузите узлы, на которых размещались Ingress-контроллеры.Данный инлет не может быть использован, если параметр
enableIstioSidecar
включен.
Допустимые значения:
LoadBalancer
,LoadBalancerWithSSLPassthrough
,LoadBalancerWithProxyProtocol
,HostPort
,HostPortWithSSLPassthrough
,HostPortWithProxyProtocol
,HostWithFailover
- булевый
Определяет, разрешены ли устаревшие версии протокола TLS и алгоритмов шифрования (cipher suites).
Работа разрешена для следующих версий протокола TLS:
TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
.Допустимые комбинации алгоритмов шифрования, расположенные в порядке от наиболее надёжной к наименее надёжной:
ECDHE-ECDSA-AES256-GCM-SHA384
,ECDHE-RSA-AES256-GCM-SHA384
,ECDHE-ECDSA-CHACHA20-POLY1305
,ECDHE-RSA-CHACHA20-POLY1305
,ECDHE-ECDSA-AES128-GCM-SHA256
,ECDHE-RSA-AES128-GCM-SHA256
,ECDHE-ECDSA-AES256-SHA384
,ECDHE-RSA-AES256-SHA384
,ECDHE-ECDSA-AES128-SHA256
,ECDHE-RSA-AES128-SHA256
,ECDHE-ECDSA-AES256-SHA
,ECDHE-RSA-AES256-SHA
,ECDHE-ECDSA-AES128-SHA
,ECDHE-RSA-AES128-SHA
,AES256-GCM-SHA384
,AES128-GCM-SHA256
,AES256-SHA256
,AES128-SHA256
,AES256-SHA
,AES128-SHA
.По умолчанию включены только
TLSv1.2
,TLSv1.3
и самые новые алгоритмы шифрования. - объект
Аннотации, которые будут назначены сервису для гибкой настройки балансировщика.
Модуль не учитывает особенности указания аннотаций в различных облаках.
Если аннотации для заказа балансировщика применяются только при создании сервиса, для обновления подобных параметров пересоздайте ресурс IngressNginxController (или создайте новый и удалите старый).
- массив строк
Список адресов в формате CIDR, которым разрешен доступ к балансировщику.
Внимание. Облачный провайдер может не поддерживать данную опцию и игнорировать ее.
- Провайдеры поддерживающие опцию: AWS, Azure, GCP.
- Провайдеры игнорирующие опцию: Yandex Cloud.
Для остальных облачных провайдеров поведение может зависеть от особенностей реализации облака. Протестируйте работу опции перед использованием в production-среде.
- объект
Необязательный параметр.
Секция настроек инлета
LoadBalancerWithProxyProtocol
.- объект
Аннотации, которые будут назначены сервису для гибкой настройки балансировщика.
Модуль не учитывает особенности указания аннотаций в различных облаках.
Если аннотации для заказа балансировщика применяются только при создании сервиса, для обновления подобных параметров пересоздайте ресурс IngressNginxController (или создайте новый и удалите старый).
- массив строк
Список адресов в формате CIDR, которым разрешен доступ к балансировщику.
Внимание. Облачный провайдер может не поддерживать данную опцию и игнорировать ее.
Провайдеры поддерживающие опцию: AWS, Azure, GCP. Провайдеры игнорирующие опцию: Yandex Cloud.
Для остальных облачных провайдеров поведение может зависеть от особенностей реализации облака. Протестируйте работу опции перед использованием в production-среде.
- объект
Необязательный параметр.
Секция настроек инлета
LoadBalancerWithSSLPassthrough
.- объект
Аннотации, которые будут назначены сервису для гибкой настройки балансировщика.
Модуль не учитывает особенности указания аннотаций в различных облаках.
Если аннотации для заказа балансировщика применяются только при создании сервиса, для обновления подобных параметров пересоздайте ресурс IngressNginxController (или создайте новый и удалите старый).
- массив строк
Список адресов в формате CIDR, которым разрешен доступ к балансировщику.
Внимание. Облачный провайдер может не поддерживать данную опцию и игнорировать ее.
Провайдеры поддерживающие опцию: AWS, Azure, GCP. Провайдеры игнорирующие опцию: Yandex Cloud.
Для остальных облачных провайдеров поведение может зависеть от особенностей реализации облака. Протестируйте работу опции перед использованием в production-среде.
- объект
Аналогично параметру
spec.nodeSelector
у подов.Если значение не указано или указано
false
, Deckhouse попытается определить значение автоматически.Используйте формат стандартного списка
nodeSelector
. Поды инстанса унаследуют это поле как есть. - объект
Настройки максимальных значений CPU и памяти (memory), которые может запросить под при выборе узла. Если VPA выключен, максимальные значения становятся значениями по умолчанию.
- массив объектов
Аналогично параметру
spec.tolerations
у подов.Если значение не указано или указано
false
, подам модуля автоматически устанавливаются все возможные tolerations.Используйте формат стандартного списка tolerations. Поды инстанса унаследуют это поле как есть.
- булевый
Разрешает использовать символ нижнего подчеркивания в заголовках.
Вспомогательные ресурсы:
По умолчанию:
false
Устаревший ресурс. Поддержка ресурса может быть исключена в следующих версиях.
- массив строк
Список адресов в формате CIDR, которым разрешено подключаться к контроллеру.
Независимо от инлета всегда проверяется непосредственный адрес (в логах содержится в поле
original_address
), с которого производится подключение, а не «адрес клиента», который может передаваться в некоторых инлетах через заголовки или с использованиемproxy protocol
.Параметр реализован с помощью map module, и если адрес, с которого непосредственно производится подключение, не разрешен – NGINX закрывает соединение (используя return 444).
По умолчанию к контроллеру можно подключаться с любых адресов.
- объект
Секция настроек Ingress-контроллера, в которую в формате
ключ: значение(строка)
можно записать любые возможные опции.Внимание. Ошибка в указании опций может привести к отказу в работе Ingress-контроллера.
Внимание. Не рекомендуется использовать данную опцию, так как не гарантируется обратная совместимость или работоспособность Ingress-контроллера.
- строка
Версия NGINX Ingress controller.
По умолчанию используется версия из настроек модуля.
Допустимые значения:
1.9
,1.10
,1.12
- объект
Секция с настройкой кастомизации HTTP-ошибок.
Если секция определена, все параметры в ней являются обязательными, изменение любого параметра приводит к перезапуску всех NGINX Ingress controller’ов.
- массив строк
Обязательный параметр
Список кодов ответа (массив), при которых запрос будет перенаправляться на custom default backend.
- объект
Сертификат, который используется:
- при запросах на
catch-all
-сервер (подразумевается директива server nginx). Наcatch-all
-сервер попадают запросы, для которых нет соответствующего Ingress-ресурса; - для Ingress–ресурсов, в которых не задан
secretName
в секцииtls
.
По умолчанию используется самоподписанный сертификат.
Внимание. Параметр не влияет на сертификаты, используемые в Ingress-ресурсах модулей Deckhouse. Для указания сертификата, который будет использоваться в Ingress-ресурсах модулей Deckhouse, используйте глобальный параметр modules.https.customCertificate.
- при запросах на
- булевый
Добавить к подам контроллера аннотации для автоматического инжекта сайдкаров Istio. При включении этого параметра к подам Ingress-контроллера добавляются аннотации
sidecar.istio.io/inject: "true"
иtraffic.sidecar.istio.io/includeOutboundIPRanges: "<Service CIDR>"
. При создании таких подов к ним автоматически будут добавлены сайдкары Istio с помощью mutating webhook. После этого весь трафик в сторону Service CIDR будет перехватываться сайдкаром.Чтобы воспользоваться этой функцией, необходимо доработать прикладные Ingress-ресурсы, добавив аннотации:
nginx.ingress.kubernetes.io/service-upstream: "true"
— с этой аннотацией Ingress-контроллер будет отправлять запросы на ClusterIP сервиса (из диапазона Service CIDR) вместо того, чтобы слать их напрямую в поды приложения. Сайдкар istio-proxy перехватывает трафик только в сторону диапазона Service CIDR, остальные запросы отправляются напрямую;nginx.ingress.kubernetes.io/upstream-vhost: myservice.myns.svc
— с данной аннотацией сайдкар сможет идентифицировать прикладной сервис, для которого предназначен запрос.
Внимание. Данный параметр не может быть включен, если инлет Ingress-контроллера установлен в значение
HostWithFailover
. - массив строк
Список ревизий баз данных, которые будут скачаны при старте.
По умолчанию:
["GeoLite2-City","GeoLite2-ASN"]
- строка
Лицензионный ключ для скачивания базы данных GeoIP2.
Указание ключа в конфигурации включает скачивание базы GeoIP2 при каждом старте контроллера. Подробнее о получении ключа.
- булевый
Включает обработку и передачу заголовков
X-Forwarded-*
.Внимание. При использовании этой опции вы должны быть уверены, что запросы к Ingress-контроллеру направляются только от доверенных источников. Одним из способов настройки ограничения может служить опция
acceptRequestsFrom
.
- строка
Имя Ingress-класса для обслуживания NGINX Ingress controller.
Позволяет создать несколько контроллеров для обслуживания одного Ingress-класса.
Важно. Если указать значение “nginx”, дополнительно будут обрабатываться Ingress-ресурсы без аннотации
kubernetes.io/ingress.class
или поляspec.ingressClassName
.По умолчанию:
"nginx"
Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
Пример:
1ingressClass: nginx
- строка
Обязательный параметр
Способ приема трафика из внешней сети. Изменение установленного способа невозможно.
LoadBalancer
— устанавливается Ingress-контроллер и заказывается сервис с типомLoadBalancer
;LoadBalancerWithProxyProtocol
— устанавливается Ingress-контроллер и заказывается сервис с типомLoadBalancer
. Ingress-контроллер использует proxy-protocol для получения настоящего IP-адреса клиента;-
HostPort
— устанавливается Ingress-контроллер, который доступен на портах узлов черезhostPort
;Требуется обязательная установка параметров в секции spec.HostPort.
-
HostPortWithProxyProtocol
— устанавливается Ingress-контроллер, который доступен на портах узлов черезhostPort
и использует proxy-protocol для получения настоящего IP-адреса клиента;Требуется обязательная установка параметров в секции spec.HostPortWithProxyProtocol.
Внимание. При использовании этого инлета, убедитесь, что запросы к Ingress-контроллеру направляются только от доверенных источников. Одним из способов настройки ограничения может служить параметр acceptRequestsFrom.
-
HostWithFailover
— устанавливаются два Ingress-контроллера — основной и резервный. Основной контроллер запускается в hostNetwork. Если поды основного контроллера недоступны, трафик уходит в резервный контроллер;Внимание. На одном хосте может быть только один контроллер с данным типом инлета.
Внимание. Необходимо, чтобы на узле были свободны следующие порты: 80, 81, 443, 444, 4207, 4208.
Внимание. Чтобы поменять инлет, удалите правила iptables и перезапустите поды
kube-proxy
или перезагрузите узлы, на которых размещались Ingress-контроллеры.Внимание. Данный инлет не может быть использован, если параметр
enableIstioSidecar
включен.
Допустимые значения:
LoadBalancer
,LoadBalancerWithProxyProtocol
,HostPort
,HostPortWithProxyProtocol
,HostWithFailover
- булевый
Определяет, разрешены ли устаревшие версии протокола TLS и алгоритмов шифрования (cipher suites).
Работа разрешена для следующих версий протокола TLS:
TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
.Допустимые комбинации алгоритмов шифрования, расположенные в порядке от наиболее надёжной к наименее надёжной:
ECDHE-ECDSA-AES256-GCM-SHA384
,ECDHE-RSA-AES256-GCM-SHA384
,ECDHE-ECDSA-CHACHA20-POLY1305
,ECDHE-RSA-CHACHA20-POLY1305
,ECDHE-ECDSA-AES128-GCM-SHA256
,ECDHE-RSA-AES128-GCM-SHA256
,ECDHE-ECDSA-AES256-SHA384
,ECDHE-RSA-AES256-SHA384
,ECDHE-ECDSA-AES128-SHA256
,ECDHE-RSA-AES128-SHA256
,ECDHE-ECDSA-AES256-SHA
,ECDHE-RSA-AES256-SHA
,ECDHE-ECDSA-AES128-SHA
,ECDHE-RSA-AES128-SHA
,AES256-GCM-SHA384
,AES128-GCM-SHA256
,AES256-SHA256
,AES128-SHA256
,AES256-SHA
,AES128-SHA
.По умолчанию включены только
TLSv1.2
,TLSv1.3
и самые новые алгоритмы шифрования. - объект
Аннотации, которые будут проставлены сервису для гибкой настройки балансировщика.
Внимание. Модуль не учитывает особенности указания аннотаций в различных облаках. Если аннотации для заказа LoadBalancer’а применяются только при создании сервиса, для обновления подобных параметров необходимо будет пересоздать
IngressNginxController
(или создать новый, затем удалив старый). - массив строк
Список адресов в формате CIDR, которым разрешен доступ на балансировщик.
Внимание. Облачный провайдер может не поддерживать данную опцию и игнорировать ее. Провайдеры поддерживающие опцию: AWS, GCP, Azure Провайдеры игнорирующие опцию: YandexCloud Для остальных облачных провайдеров поведение может зависеть от особенностей реализации облака. Перед промышленным использованием опции рекомендуется тестирование.
- объект
Необязательный параметр.
Секция настроек для инлета
LoadBalancerWithProxyProtocol
.- объект
Аннотации, которые будут проставлены сервису для гибкой настройки балансировщика.
Внимание. Модуль не учитывает особенности указания аннотаций в различных облаках. Если аннотации для заказа LoadBalancer’а применяются только при создании сервиса, для обновления подобных параметров необходимо будет пересоздать
IngressNginxController
(или создать новый, затем удалив старый). - массив строк
Список адресов в формате CIDR, которым разрешен доступ на балансировщик.
Внимание. Облачный провайдер может не поддерживать данную опцию и игнорировать ее. Провайдеры поддерживающие опцию: AWS, GCP, Azure Провайдеры игнорирующие опцию: YandexCloud Для остальных облачных провайдеров поведение может зависеть от особенностей реализации облака. Перед промышленным использованием опции рекомендуется тестирование.
- объект
Как в
spec.nodeSelector
у подов.Если значение не указано или указано
false
, будет использоваться автоматика.Формат: стандартный список
nodeSelector
. Поды инстанса унаследуют это поле как есть. - объект
Настройки максимальных значений CPU и memory, которые может запросить под при выборе узла (если VPA выключен, максимальные значения становятся значениями по умолчанию).
- массив объектов
Как в
spec.tolerations
у подов.Если значение не указано или указано
false
, будет использоваться автоматика.Формат: стандартный список toleration. Поды инстанса унаследуют это поле как есть.
- булевый
По умолчанию:
false