Kubernetes использует kube-proxy для экспонирования Service и обеспечения балансировки нагрузки. Реализация происходит на транспортном уровне. Для интернет‑приложений, где генерируется огромный объём информации, переадресация должна быть более детализированной, точно и гибко управляемой политиками и балансировщиками нагрузки, чтобы обеспечить более высокую производительность.
Именно здесь вступают в работу Ingress. Ingress предоставляют функции переадресации на уровне приложения, такие как виртуальные хосты, балансировка нагрузки, SSL‑прокси и HTTP‑маршрутизация, для Service, к которым можно напрямую обращаться извне кластера.
Kubernetes официально выпустил контроллер Ingress на основе Nginx. CCE NGINX Ingress Controller напрямую использует шаблоны и образы сообщества. NGINX Ingress Controller генерирует конфигурацию Nginx и сохраняет её с помощью ConfigMaps. Конфигурация будет записана в pod‑ы Nginx через API Kubernetes. Таким образом, конфигурация Nginx изменяется и обновляется. Подробности см. How the Add-on Works.
Сообщество с открытым исходным кодом: https://github.com/kubernetes/ingress-nginx
Ingress Nginx состоит из объекта ingress, контроллера ingress и Nginx. Контроллер ingress собирает Ingress в файл конфигурации Nginx (nginx.conf) и перезапускает Nginx, чтобы применить изменения конфигурации. Когда он обнаруживает изменение pod‑ов, связанных с 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 add-on NGINX Ingress Controller версии 2.2.75, 2.6.26, 3.0.1 и новее.
Параметр Nginx | Описание | Значение по умолчанию |
|---|---|---|
Maximum Worker Connections | Указывает максимальное количество соединений, которые каждый процесс‑worker Nginx может обрабатывать одновременно. Этот параметр используется для управления нагрузкой процессов‑worker. В среде с высокой конкуренцией рекомендуется установить этот параметр на большое значение, чтобы обеспечить стабильность системы. Такие соединения включают соединения клиентов и соединения с серверами back‑end. | 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‑сервером и сервером back‑end, в секундах. В течение этого периода NGINX Ingress Controller может поддерживать соединения для повторного использования. Это уменьшает накладные расходы на установление новых соединений и значительно повышает производительность в сценариях с высоким QPS. | 900 |
Request Timeout | Указывает тайм‑аут подключения клиента к прокси‑серверу, в секундах. Если клиент не может получить доступ к серверу back‑end в течение 10 секунд, NGINX Ingress Controller вернёт ошибку 502 Bad Gateway. Применяется в сценариях с высокой скоростью соединения. | 10 |
Maximum Request Body Size | Указывает максимальный размер тела запроса, которое Nginx может отправлять на сервер back‑end через прокси. Это относится к загрузке файлов и отправке больших форм данных. Если размер тела любого запроса превышает лимит, будет возвращена ошибка 413 Payload Too Large. | 20m |
Allow to Pass Through the Backend Server's Header | Обычно NGINX Ingress Controller удаляет заголовок server, отправляемый сервером back‑end клиенту, который идентифицирует сервер. Однако если этот параметр установлен в true, NGINX Ingress Controller будет передавать заголовок server напрямую от сервера back‑end клиенту. Чтобы избежать раскрытия типа и версии сервера, рекомендуется отключить эту опцию. | Disable |
Allow Underscores in Headers | Некоторые HTTP‑заголовки могут содержать символ подчёркивания (_), например X_Custom-Header, но согласно стандартам Request For Comments (RFC) это не рекомендуется. Поэтому многие серверы по умолчанию не разрешают подчёркивания. Вы можете включить этот параметр, если вам нужны подчёркивания в определённых заголовках, например когда сторонние сервисы или клиенты используют подчёркивания в информации заголовков. | Disable |
Generate Request ID | После получения запроса NGINX Ingress Controller генерирует уникальный идентификатор запроса. Этот идентификатор обычно записывается в логи или передаётся на сервер backend через заголовок. Это полезно для трассировки и отладки запросов, особенно для выявления проблем в распределённых системах. | 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 и может управлять политиками выселения pods Deployment после того, как узлы‑хосты будут помечены taints. Дополнение добавляет политику toleration по умолчанию для taints node.kubernetes.io/not-ready и node.kubernetes.io/unreachable соответственно. Окно времени 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