ingress-nginx контроллер для внешнего и внутреннего доступа

Вопрос или проблема

У нас есть требование использовать ingress-nginx как для внешнего, так и для внутреннего доступа к рабочим нагрузкам, работающим в кластере.

В зависимости от сетевой настройки кластера ingress-nginx создаст сервис типа LoadBalancer, который создаст либо внешний, либо внутренний балансировщик нагрузки. В моем случае у меня есть кластер EKS со всеми публичными подсетями, поэтому он будет предоставлять внешний балансировщик нагрузки.

Если у кластера только частные подсети, то он предоставит внутренний балансировщик нагрузки. Если вы хотите, чтобы были предоставлены как внешний, так и внутренний балансировщик нагрузки, как указано в документации ingress-nginx здесь, хотя он предоставляет и внешний, и внутренний балансировщик нагрузки, нет механизма для указания, какой балансировщик нагрузки использовать для вашего ресурса Ingress (он создает только один ресурс IngressClass).

Это уже было сообщено в проект здесь, который не имеет никакого заключения для общего случая использования. Единственное решение, которое я нашел до сих пор, – это иметь две разные установки контроллера, как указано здесь.

Кто-то сталкивался с такой же ситуацией и нашел другой способ?

Дополнительная информация для установки отдельных контроллеров: https://devrowbot.com/posts/internal-load-balancers-with-ingress-nginx/

Ответ или решение

Использование ingress-nginx контроллера для внешнего и внутреннего доступа в EKS кластере

Ingress-nginx контроллер является важной частью Kubernetes для управления внешним доступом к приложениям, работающим в кластере. Когда дело доходит до настройки ingress-nginx для внутреннего и внешнего доступа, важно учитывать архитектуру вашего кластера и конфигурацию сети. В этом ответе мы подробно рассмотрим вашу ситуацию и предложим возможные решения.

Проблема

Вы столкнулись с необходимостью обеспечить как внешний, так и внутренний доступ к рабочим нагрузкам в EKS кластере. В обычном случае, при настройке ingress-nginx, контроллер создает сервис типа LoadBalancer. В зависимости от архитектуры сети, это может привести к созданию только внешнего или внутреннего балансировщика нагрузки.

С учетом того, что вы упоминаете единственное наличие публичных подсетей, ingress-nginx создает внешний балансировщик нагрузки. Также в кластере, где есть только приватные подсети, будет создан внутренний балансировщик.

Однако, если вы хотите использовать оба типа балансировщика нагрузки (внешний и внутренний), существует ограничение: ingress-nginx поддерживает только одно Resource класса IngressClass, что означает, что вы не можете явно указать, какой именно балансировщик использовать для ваших ресурсов Ingress.

Возможные решения

  1. Два отдельных экземпляра контроллера ingress-nginx: Как вы уже упомянули, одним из предложенных решений является реализация двух отдельных экземпляров ingress-nginx. Это позволит вам создать разные классы Ingress, которые могут обращаться к соответствующим балансировщикам нагрузки. Это подходит для сложных сценариев, где вы хотите четко разделить внутренний и внешний трафик.

    По ссылке Devrowbot можно найти пошаговые инструкции по установке двух экземпляров контроллера, что может стать отличным решением в вашей ситуации.

  2. Использование маппинга маршрутов: Если возможно, подумайте о том, чтобы рассмотреть различные маршруты или поддомены для внутренних и внешних обращений. Например, можно настроить внутренние сервисы на специфические поддомены, такие как internal.example.com, и внешний доступ на external.example.com. Это потребует дополнительной конфигурации DNS, но может улучшить организацию трафика.

  3. Настройка пользовательского балансировщика нагрузки: Используйте альтернативные решения для управления трафиком, такие как AWS Application Load Balancer (ALB) или при необходимости создать пользовательский контроллер для работы с ingress. Такой подход потребует большего количества ресурсов и добавит сложности, но обеспечит необходимую гибкость.

  4. Мониторинг и оповещения: Как только вы выберете решение и реализуете его, не забудьте наладить мониторинг и оповещения для наблюдения за производительностью и доступностью ваших нагрузок. Это поможет вам быстро реагировать на проблемы, если они возникнут.

Заключение

Использование ingress-nginx контроллера как для внешнего, так и для внутреннего доступа – это распространенная задача, особенно в современных Kubernetes кластерах. Ваша ситуация требует внимательного подхода, и использование двух отдельных экземпляров контроллера ingress-nginx представляется более оптимальным решением для разделения трафика и управления балансировкой нагрузки.

Оставайтесь в курсе обновлений и возможных улучшений в проекте ingress-nginx, так как сообщество активно работает над расширением возможностей решения. Не стесняйтесь делиться своим опытом и результатами среди коллег и в сообществах.

Оцените материал
Добавить комментарий

Капча загружается...