Как получить выходной статический IP-адрес для каждого пространства имен в кластере EKS?

Моя текущая настройка включает кластер EKS с несколькими пространствами имен (мультиарендаторскими) на множестве разных узлов EKS в частных подсетях. Я бы хотел, чтобы исходящий трафик из модулей имел выделенный EIP для каждого пространства имен. AFAIK нет готовых решений этой проблемы. Я долго и упорно искал в Интернете, но тщетно. Вот некоторые из решений, которые мне надоели, но в конечном итоге натолкнулись на препятствие.

Istio Egress Gateway Позволяет направлять весь исходящий трафик от модулей через выделенный модуль выходного шлюза. Но модуль выходного шлюза примет IP-адрес узла, на котором он работает, что не подойдет для моего варианта использования. Кроме того, я не нашел достойной документации о том, как настроить несколько модулей выходного шлюза на нескольких узлах.

Calico Egress Gateway Очень похоже на решение Istio Egress Gateway и имеет те же ограничения.

Индивидуальное решение Я начал внедрять индивидуальное решение, в котором я настраиваю несколько узлов шлюза в общедоступной подсети, каждый из которых имеет выделенный EIP. Теперь я могу изменить IP-маршруты/шлюзы в частном узле EKS, чтобы маршрутизировать трафик через определенный узел шлюза на основе IP-адреса источника модуля. Это решение кажется очень громоздким, а эксплуатационные накладные расходы такого решения очень высоки.

Я рассматривал подобные решения , но мне с ними не повезло.

Есть ли лучший подход/решение этой проблемы?

PS Мой производственный кластер чрезвычайно велик, я не могу позволить себе выделить кластер для каждого пространства имен.

Я также разместил этот вопрос в stackoverflow .Я действительно не уверен, на каком форуме лучше задать этот вопрос. С радостью удалю, где это уместно.

2 ответа

Краткое изложение обсуждения этой темы для большей наглядности здесь:

В GitHub создан запрос на добавление функции , но с марта обновлений нет.

Calico Enterprise решит этот конкретный вариант использования, назначив IP пространству имен, как описано в их интеграции с Kubernetes здесь :

Выходной шлюз определяет статический выходной IP-адрес для SNAT для трафика, покидающего кластер, и применяет его к определенному пространству имен. Затем он назначает один модуль в пространстве имен выходным модулем и назначает маршрутизируемый IP-адрес, который используется специально для исходящего трафика, покидающего кластер.

Но на практике модуль Egress Gateway не поддерживает AWS VPS, поэтому он не может назначать EIP-адреса Egress модулям. Когда трафик выходит из модулей шлюза, он принимает IP-адрес самого узла в качестве IP-адреса источника.

много разных узлов EKS в частных подсетях...

EIP не работает в частной подсети. Если у вас есть рабочие узлы, назначенные в общедоступной подсети, вы можете использовать EIP и обратный прокси-сервер на этих общедоступных узлах для предоставления услуг в частной сети. Затем вы можете использовать Calico Egress Gateway на этих общедоступных узлах для модулей обратного прокси, в свою очередь, используя базовый EIP.

В конце концов я остановился на решении, в котором я вывожу трафик из модулей в частной подсети через «Прокси-модули», которые я настроил в общедоступных подсетях. Этим прокси-подам назначаются общедоступные IP-адреса, поэтому исходящий трафик автоматически принимает эти IP-адреса. С эксплуатационной точки зрения в этом решении есть некоторые накладные расходы, но это лучшее, что я мог придумать, учитывая ограничения.

Другие вопросы по тегам