Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Nginx Ingress

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

Установка Nginx Ingress

Для начала необходимо установить Nginx Ingress в кластере. В панели управления кластером перейдите во вкладку «Дополнения», нажмите на три точки рядом с Nginx Ingress и выберите «Установить».

Image2

После установки проверьте, что Ingress работает корректно. Выполните команду:

    

Убедитесь, что все поды находятся в статусе Running.

Настройка деплойментов и сервисов

Для удобства создадим отдельный неймспейс, в котором будут находиться все манифесты:

    

Мы развернем три Deployment с образами Nginx, каждый будет имитировать отдельный сервис. К каждому Deployment мы создадим Service с типом ClusterIP — это служебный тип сервиса в Kubernetes, который выдает внутренний IP-адрес внутри кластера. Такой сервис не доступен извне напрямую, однако он может быть подцеплен к Ingress для публикации во внешнюю сеть.

service1-deployment.yaml:

    

Пояснения к манифесту:

  1. Deployment

    • replicas: 2 указывает, что будет запущено две реплики подов с Nginx.

    • В секции selector и template.metadata.labels задаётся соответствие между подами и тем, как их будет находить сервис.

    • volumeMounts и volumes используются, чтобы подмонтировать файл service1.html из ConfigMap в директорию, откуда Nginx по умолчанию раздает контент.

  2. 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. Убедитесь, что сертификат не просрочен и соответствует доменам, которые вы хотите защитить.

Image1

Создание 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 для каждого домена:

    

После этого каждый домен будет использовать свой сертификат, указанный в соответствующем секрете.

Была ли статья полезна?
Ваша оценка очень важна