Ingress — это ресурс Kubernetes, позволяющий организовать доступ к сервисам внутри кластера через HTTP и HTTPS. Он предоставляет маршрутизацию на основе URL, доменов и других параметров. В этой статье рассмотрим использование Nginx Ingress на примере трех деплойментов Nginx, имитирующих три разных сервиса. Мы также настроим SSL-сертификат для защиты соединения.
Установка Nginx Ingress
Для начала необходимо установить Nginx Ingress в кластере. В панели управления кластером перейдите во вкладку «Дополнения», нажмите на три точки рядом с Nginx Ingress и выберите «Установить».

После установки проверьте, что Ingress работает корректно. Выполните команду:
Убедитесь, что все поды находятся в статусе Running.
Настройка деплойментов и сервисов
Для удобства создадим отдельный неймспейс, в котором будут находиться все манифесты:
Мы развернем три Deployment с образами Nginx, каждый будет имитировать отдельный сервис. К каждому Deployment мы создадим Service с типом ClusterIP — это служебный тип сервиса в Kubernetes, который выдает внутренний IP-адрес внутри кластера. Такой сервис не доступен извне напрямую, однако он может быть подцеплен к Ingress для публикации во внешнюю сеть.
service1-deployment.yaml:
Пояснения к манифесту:
-
Deployment
-
replicas: 2 указывает, что будет запущено две реплики подов с Nginx.
-
В секции selector и template.metadata.labels задаётся соответствие между подами и тем, как их будет находить сервис.
-
volumeMounts и volumes используются, чтобы подмонтировать файл
service1.htmlизConfigMapв директорию, откуда Nginx по умолчанию раздает контент. -
Service
-
ClusterIP означает, что сервис будет доступен только внутри кластера по выделенному IP-адресу. Для внешнего доступа мы будем использовать Ingress.
service2-deployment.yaml:
service3-deployment.yaml:
Чтобы отличать наши сервисы друг от друга, создадим ConfigMap с тремя разными HTML-страницами.
configmap.yaml:
И применим манифесты:
Проверим статус подов:
Все поды должны иметь статус Running. На этом подготовительные работы можно считать завершенными.
Создание Ingress
С помощью Ingress мы укажем, какой трафик (по доменам и путям) перенаправлять на соответствующие сервисы. Создадим манифест ingress.yaml:
Пояснения к манифесту:
-
rules.host задает домен, к которому будет привязан Ingress.
-
paths определяет правила маршрутизации:
-
При обращении к
ingress1.example.com/service1будет перенаправление наservice1. -
При обращении к
ingress1.example.com/service2будет перенаправление наservice2. -
При обращении к
ingress2.example.com/будет перенаправление наservice3.
Применим манифест:
Создание LoadBalancer
Чтобы обратиться к Nginx Ingress из внешней сети, создадим Service типа LoadBalancer, который будет отвечать за балансировку нагрузки и предоставит нам внешний IP-адрес. Подготовим для этого манифест loadbalancer.yaml следующего содержания:
Применим манифест:
Дождитесь, пока балансировщик создастся, и убедитесь, что у него появился внешний IP-адрес:
Внешний IP будет отображен в колонке EXTERNAL-IP.
Полученный IP-адрес необходимо прописать в DNS-настройках домена в виде А-записей для доменов ingress1.example.com и ingress2.example.com. После обновления DNS ваши домены будут указывать на этот балансировщик, и вы сможете обращаться к сервисам по внешним URL:
http://ingress1.example.com/service1— отобразится заголовок «Welcome to Service 1!».http://ingress1.example.com/service2— отобразится заголовок «Welcome to Service 2!».http://ingress2.example.com/— отобразится заголовок «Welcome to Service 3!».
Настройка SSL-сертификата
Для обеспечения защищенного соединения в Nginx Ingress необходимо добавить существующий SSL-сертификат в виде Kubernetes-секрета, а затем указать этот секрет в манифесте Ingress.
Если вы хотите автоматизировать выпуск и продление сертификатов (например, через Let’s Encrypt), рекомендуем использовать инструмент cert-manager.
Подготовка файлов сертификата и ключа
Сохраните файл ключа tls.key и сертификат tls.crt локально. Если вы заказывали сертификат в Timeweb Cloud, содержимое ключа и сертификата можно скопировать со страницы управления сертификатом в панели Timeweb Cloud. Убедитесь, что сертификат не просрочен и соответствует доменам, которые вы хотите защитить.

Создание Kubernetes-секрета
Чтобы добавить сертификат в кластер, необходимо закодировать файлы в Base64 и создать манифест секрета. Выполните в терминале команды:
Затем создайте файл tls-secret.yaml следующего содержания:
Сохраните файл и примените манифест:
Проверьте, что значения ключа и сертификата ненулевые. Для этого выполните:
Обновление манифеста Ingress
Обновите ваш манифест ingress.yaml, добавив секцию tls, и укажите имя созданного секрета:
Примените измененный манифест:
Теперь при обращении к ingress1.example.com или ingress2.example.com по HTTPS браузер будет использовать сертификат, указанный в секрете ingress-example-tls. Таким образом, трафик к вашим сервисам будет защищен.
Если у вас несколько сертификатов для разных доменов, создайте Secret для каждого из них. Например, для доменов example.com и example.org создайте два секрета.
После этого обновите манифест Ingress, добавив секцию tls для каждого домена:
После этого каждый домен будет использовать свой сертификат, указанный в соответствующем секрете.