Kubernetes использует kube-proxy для экспонирования Services и обеспечения load balancing. Реализация находится на транспортном уровне. Для Internet‑приложений, где генерируется массивный объём информации, переадресация должна быть более тонкой, точно и гибко управляемой политиками и load balancers для обеспечения более высокой производительности.
Именно здесь вступают ingresses. Ingresses предоставляют функции переадресации на уровне приложения, такие как виртуальные хосты, load balancing, SSL‑прокси и HTTP‑маршрутизацию, для Services, к которым можно напрямую обращаться извне кластера.
Kubernetes официально выпустил Ingress‑controller на основе Nginx. CCE NGINX Ingress Controller напрямую использует шаблоны и образы сообщества. NGINX Ingress Controller генерирует конфигурацию Nginx и сохраняет её с помощью ConfigMaps. Конфигурация будет записана в pods Nginx через Kubernetes API. Таким образом, конфигурация Nginx изменяется и обновляется. Подробности см. How the Add-on Works.
Сообщество с открытым исходным кодом: https://github.com/kubernetes/ingress-nginx
Nginx ingress состоит из объекта ingress, контроллера ingress и Nginx. Контроллер ingress собирает ingresses в файл конфигурации Nginx (nginx.conf) и перезапускает Nginx, чтобы применить изменения конфигурации. Когда он обнаруживает изменение pods, связанных с Service, он динамически изменяет конфигурацию группы upstream‑серверов Nginx. В этом случае процесс Nginx не требует перезапуска. Figure 1 демонстрирует работу этого дополнения.
Рисунок 1 Принцип работы Nginx ingress

Перед установкой этого дополнения у вас должен быть один доступный кластер с правильно работающим узлом. Если кластер недоступен, создайте его согласно Buying a Standard/Turbo Cluster.
Вы можете при необходимости изменить количество pod‑ов дополнения и квоты ресурсов. Высокая доступность невозможна при использовании одного pod‑а. Если на узле, где работает pod дополнения, произойдёт ошибка, дополнение завершится сбоем.
Чтобы настроить пользовательские параметры, поддерживаемые сообществом Kubernetes, выберите YAML и найдите соответствующие параметры в ConfigMaps. В этом примере используется параметр keep-alive-requests, установленный в 100. Это означает, что одновременно может быть активно до 100 запросов.
{"keep-alive-requests": "100"}
В таблице ниже показаны параметры, которые можно настроить в GUI дополнения NGINX Ingress Controller версии 2.2.75, 2.6.26, 3.0.1 и новее.
Nginx Parameter | Description | Default Value |
|---|---|---|
Maximum Worker Connections | Указывает максимальное количество соединений, которые каждый процесс‑worker Nginx может обрабатывать одновременно. Этот параметр используется для контроля нагрузки процессов‑worker. В среде с высокой конкуренцией рекомендуется установить для этого параметра большое значение, чтобы обеспечить стабильность системы. Такие соединения включают клиентские соединения и соединения с backend‑серверами. | 65536 |
Maximum Keepalive Requests | Определяет, сколько запросов может быть обработано по keepalive‑соединению. Если запросы исчерпывают лимит, соединение закрывается. | 100 |
Maximum Keepalive Connections to the Upstream Server | Включает кэш для соединений с upstream‑серверами. Этот параметр задаёт количество простоя keepalive‑соединений, которые могут храниться в кэше каждого процесса‑worker. Если простоя соединений, хранящихся в процессе, исчерпывает лимит, соединения, не использованные дольше всего, будут закрыты. | 320 |
Maximum Keepalive Timeout of the Upstream Server | Указывает тайм‑аут для keepalive‑соединения между upstream‑сервером и backend‑сервером, в секундах. В течение этого периода NGINX Ingress Controller может поддерживать соединения для повторного использования. Это снижает накладные расходы на установление новых соединений и значительно повышает производительность в сценариях с высоким QPS. | 900 |
Request Timeout | Указывает тайм‑аут для подключения клиента к прокси‑серверу, в секундах. Если клиент не может получить доступ к backend‑серверу в течение 10 секунд, NGINX Ingress Controller вернёт ошибку 502 Bad Gateway. Применяется в сценариях с высокой скоростью соединения. | 10 |
Maximum Request Body Size | Указывает максимальный размер тела запроса, которое Nginx может передать backend‑серверу через прокси. Это относится к загрузке файлов и отправке больших форм данных. Если размер тела любого запроса превышает лимит, будет возвращена ошибка 413 Payload Too Large. | 20m |
Allow to Pass Through the Backend Server's Header | Обычно NGINX Ingress Controller удаляет информацию заголовка server, отправляемую backend‑сервером клиенту, которая идентифицирует сервер. Однако если этот параметр установлен в true, NGINX Ingress Controller будет передавать заголовок server напрямую от backend‑сервера к клиенту. Чтобы не раскрывать тип и версию сервера, рекомендуется отключить эту опцию. | Disable |
Allow Underscores in Headers | Некоторые HTTP‑заголовки могут содержать символ подчёркивания (_), например X_Custom-Header, однако это не рекомендуется согласно стандартам Request For Comments (RFC). Поэтому многие серверы по умолчанию не разрешают подчёркивания. Вы можете включить этот параметр, если вам нужны подчёркивания в определённых заголовках, например когда сторонние сервисы или клиенты используют подчёркивания в информации заголовков. | Disable |
Generate Request ID | После получения запроса NGINX Ingress Controller генерирует уникальный идентификатор запроса. Этот идентификатор обычно записывается в логи или передаётся бэкенд‑серверу через заголовок. Это полезно для трассировки и отладки запросов, особенно для выявления проблем в распределённых системах. | Enable |
Ignore Invalid Headers | По умолчанию NGINX Ingress Controller отклоняет HTTP‑запросы, содержащие недопустимый заголовок. При включённой настройке NGINX Ingress Controller будет игнорировать недопустимые заголовки и продолжать обработку запросов. Это полезно для клиентов, которые не полностью соответствуют стандарту HTTP. | Enable |
Reuse Port | Включение SO_REUSEPORT позволяет нескольким процессам или потокам привязываться к одному и тому же {IP}:{Port}. Это может эффективно повысить конкурентную производительность серверов, особенно у тех, которые имеют многоядерные CPU. При включённой функции порт может принимать больше новых соединений. | Enable |
Allow Server Information in Response | Отключает информацию о сервере, добавляемую по умолчанию в заголовок ответа NGINX Ingress Controller. Обычно эта информация содержит версию Nginx. Отключение этой опции помогает скрыть сведения о сервере, повышая безопасность и препятствуя злоумышленникам использовать информацию о версии для атак на систему. | Disable |
Automatically Redirect HTTP to HTTPS | Отключает автоматическое перенаправление с HTTP на HTTPS. Например, если вы хотите использовать HTTPS только для определённых страниц, таких как страница входа, а HTTP — для остальных страниц, вы можете отключить перенаправление по умолчанию, используя эту опцию. | Disable |
CPU Affinity of Worker Threads | Автоматически распределяет рабочие процессы по определённым ядрам CPU для повышения производительности многопоточных систем. Например, на многопроцессорном сервере некоторые рабочие процессы могут быть привязаны к конкретному ядру CPU. Это уменьшает переключение контекстов и повышает эффективность обработки. | Auto |
Параметр | Описание |
|---|---|
Развертывание Multi-AZ |
|
Node Affinity |
|
Toleration | Использование как taints, так и tolerations позволяет (но не требует) планировать pods Deployment дополнения на узлах с соответствующими taints и обеспечивает контроль над политиками выселения pod, когда узлы‑хосты помечены taint. Дополнение применяет политики toleration по умолчанию для taint node.kubernetes.io/not-ready и node.kubernetes.io/unreachable на pod. Окно времени toleration составляет 60s. Подробности см. Configuring Tolerance Policies. |
Компонент | Описание | Тип ресурса |
|---|---|---|
cceaddon-nginx-ingress-<Controller name>-controller (Имя контроллера в версиях ранее 2.5.4 является cceaddon-nginx-ingress-controller.) | Ingress‑контроллер на основе Nginx, обеспечивающий гибкую маршрутизацию и переадресацию для кластеров. | Deployment |
cceaddon-nginx-ingress-<Controller name>-backend (Имя контроллера в версиях ранее 2.5.4 является cceaddon-nginx-ingress-default-backend.) | Бэкэнд по умолчанию Nginx ingress. Возвращается сообщение "default backend - 404". | Deployment |
Чтобы избежать ситуации, когда узел, на котором работает NGINX Ingress Controller, и его pod'ы не могут получить доступ к любому Nginx ingress, следует настроить анти‑аффинность между рабочей нагрузкой и NGINX Ingress Controller. Это означает, что pod'ы рабочей нагрузки не могут быть запланированы на тот же узел, что и NGINX Ingress Controller.
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxstrategy:type: RollingUpdatetemplate:metadata:labels:app: nginxspec:containers:- image: nginx:alpineimagePullPolicy: IfNotPresentname: nginximagePullSecrets:- name: default-secretaffinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions: # Implement anti-affinity with the NGINX Ingress Controller pods through the pod labels.- key: appoperator: Invalues:- nginx-ingress #If multiple NGINX Ingress Controllers are installed in the cluster, the label value is nginx-ingress- <Controller name>.- key: componentoperator: Invalues:- controllernamespaces:- kube-systemtopologyKey: kubernetes.io/hostname