Правила Ingress (Kubernetes Ingress) открывают HTTP/HTTPS маршруты снаружи кластера для внутренней маршрутизации (Kubernetes Service), что позволяет контролировать внешний доступ к вычислительным компонентам.
Создайте Ingress для управления внешним HTTP/HTTPS доступом к Service.
При создании нескольких ingress в одном и том же namespace разные ingress НЕ ДОЛЖНЫ иметь одинаковые Domain, Protocol и Path (то есть дублирование точек доступа не допускается).
Правила Ingress зависят от реализации Ingress Controller, который отвечает за отслеживание изменений в Ingress и Service. После создания нового правила Ingress внутри Ingress Controller автоматически создаётся правило переадресации, соответствующее правилу Ingress. Когда Ingress Controller получает запрос, он сопоставляет правило переадресации с правилом Ingress и распределяет трафик по указанным внутренним маршрутам, как показано на схеме ниже.
Для протокола HTTP Ingress поддерживает только порт 80 в качестве внешнего порта. Для протокола HTTPS Ingress поддерживает только порт 443 в качестве внешнего порта. Балансировщик нагрузки платформы автоматически добавит порты 80 и 443 для прослушивания.
Далее мы используем community-версию Ingress-NGINX, чтобы продемонстрировать, как получить доступ к вашему приложению с помощью контроллера NGINX.
Разверните контроллер Ingress-NGINX
.
После выполнения этой команды автоматически создаются следующие ресурсы:
Вид | Имя | Описание |
---|---|---|
Namespace | ingress-nginx | Ресурсы для изоляции контроллеров |
ServiceAccount | ingress-nginx | Сервисный аккаунт для контроллера |
ClusterRole | ingress-nginx | Разрешения на уровне кластера |
ClusterRoleBinding | ingress-nginx | Привязка ClusterRole к SA |
ConfigMap | ingress-nginx-controller | Настройка поведения контроллера (например, уровни логирования, таймаут прокси и т.д.) |
ValidatingWebhookConfig | ingress-nginx-admission | Вебхук для проверки легитимности конфигурации Ingress (опционально) |
Service (TCP/UDP) | ingress-nginx-controller | Тип по умолчанию LoadBalancer , можно изменить на NodePort . |
Deployment | ingress-nginx-controller | |
Pod | ingress-nginx-controller-xxx | |
Role /RoleBinding | связанные с admission | Поддержка вебхука |
Job | ingress-nginx-admission-create | Регистрация вебхука |
Если вы хотите изменить адрес реестра по умолчанию, можно скачать YAML-файл с помощью curl
, изменить его и затем применить.
Ожидайте запуска Pod ingress-nginx-controller-xxx
.
Локальное тестирование
Создайте простой веб-сервер и связанный с ним сервис:
Создайте ресурс ingress. В этом примере используется хост, который сопоставляется с localhost
:
Пробросьте локальный порт к контроллеру ingress:
Получите доступ к вашему развертыванию с помощью curl:
Примечание: Этот параметр временно разрешает доменное имя demo.local в IP 127.0.0.1 и используется на порту 8080. При посещении http://demo.local:8080
вы фактически посещаете http://127.0.0.1:8080
.
С другой стороны, следует настроить hosts
:
В итоге вы должны увидеть HTML-ответ с текстом вроде "Welcome to nginx!".
После этого вы можете получить доступ к сайту по адресу http://demo.local:8080/
.
Тип по умолчанию для ingress-nginx-controller
— LoadBalancer
. Если поле EXTERNAL-IP
показывает pending
, это означает, что вашему Kubernetes кластеру не удалось создать балансировщик нагрузки.
Если вы интегрируетесь с провайдером, который поддерживает указание IP-адресов балансировщика нагрузки для Service через (специфичные для провайдера) аннотации, рекомендуется использовать этот способ.
Онлайн-тестирование
Когда у вашего ingress-nginx-controller
(Service типа LoadBalancer) появляется EXTERNAL-IP
, вы можете создать ресурс ingress. В следующем примере предполагается, что вы настроили DNS-запись для www.developer.io
:
Вы можете получить доступ к http://www.developer.io
и увидеть тот же вывод.
В текущем namespace должен быть доступен Service.
Убедитесь у администратора, что для проекта, связанного с текущим namespace, выделено используемое доменное имя.
Для доступа к домену через HTTPS необходимо предварительно сохранить HTTPS-сертификат в виде TLS-секрета.
ingress-nginx
.hosts
.Зайдите в Container Platform.
В левой навигационной панели выберите Network > Ingress.
Нажмите Create Ingress.
Используйте инструкции ниже для настройки параметров.
Параметр | Описание |
---|---|
Ingress Class | Ingress может реализовываться разными контроллерами с разными именами IngressClass . Если на платформе доступно несколько ingress контроллеров, пользователь может выбрать нужный с помощью этого параметра. |
Domain Name | Хосты могут быть точными совпадениями (например, foo.bar.com ) или шаблонами с подстановочными знаками (например, *.foo.com ). Доступные доменные имена выделяются администратором платформы. |
Certificates | TLS-секрет или сертификаты, выделенные администратором платформы. |
Match Type и Path |
|
Service | Внешний трафик будет перенаправлен на этот Service. |
Service Port | Укажите порт Service, на который будет перенаправлен трафик. |
Нажмите Create.
Если у ingress отсутствует Ingress Class, все ALB-инстансы, выделенные этому проекту, будут обрабатывать этот ingress.