Стабильный публичный IP или диапазон IP для исходящих соединений в GKE

20

Я использую Google Kubernetes Engine для запуска модулей по требованию. Каждый модуль общедоступен для доступа в Интернет с помощью службы нодпорта.

Я ищу способ в GKE получить один IP-адрес или диапазон IP-адресов для исходящих соединений, чтобы передать их сторонним API для внесения их в белый список.

IP-адреса узлов GKE не могут управляться при автоматическом масштабировании узлов или при их обновлении. Мне нужен способ поддерживать постоянный исходящий IP.

Я попытался использовать простой NAT-шлюз для узлов Kubernetes (используя пример здесь ), и хотя он маршрутизирует исходящие соединения к NAT-шлюзу, он разрывает входящий трафик на модули (служба Nodeport), так как они сбрасываются на NAT-шлюз.

  • Существует ли диапазон IP-адресов по умолчанию для облачного региона Google, который я могу предоставить третьей стороне в белый список (или)

  • Если GKE предоставляет способ выбрать внешние IP-адреса узла из предварительно зарезервированного списка статических IP-адресов (или)

  • Есть ли другой способ добиться наличия одного статического IP-адреса или диапазона IP-адресов, который представляет исходящий трафик от модулей

Я нашел подобные вопросы, подобные этому , но они не решают мою проблему, так как модули должны быть внешне подключаемыми, что ломается при использовании NAT.

Параг
источник

Ответы:

6

Google Cloud теперь предоставляет управляемый сервис NAT Gateway - Cloud NAT .

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

Пример реализации для использования Cloud NAT с GKE представлен здесь - https://cloud.google.com/nat/docs/gke-example.

Параг
источник
Кластер должен быть частным?
Gajus
3
Да, кластер должен быть приватным, но мастер может быть публичным. Если какие-либо из ваших услуг также должны быть общедоступными, они могут быть выставлены балансировщиком нагрузки.
Параг
@Parag Обязательно ли кластер быть частным? Есть ли способ, который я могу использовать, если IP-адреса узлов являются общедоступными.
Сухас Чикканна
1
@SuhasChikkanna С CloudNAT нет. Если вы хотите, чтобы у узлов были внешние IP-адреса, но также требовался один исходящий IP-адрес, вы можете создать свой собственный экземпляр шлюза NAT с помощью Squid и иметь условную маршрутизацию, которая будет направлять ваши внутренние серверы на экземпляры напрямую, но любой трафик извне поступает. через NAT. Это даст вашим пользователям единый исходящий IP-адрес, а ваши узлы будут доступны для выбранных IP-источников.
Параг
@Parag Звучит хорошо! Определенно попробую это. Большое спасибо :)
Сухас Чикканна
1

Вы можете попробовать это решение:

https://cloud.google.com/solutions/using-a-nat-gateway-with-kubernetes-engine

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

Поведение шлюза по умолчанию хорошо работает в нормальных условиях. Тем не менее, вы можете захотеть изменить, как эфемерные внешние IP-адреса распределяются, чтобы:

  • Предоставить стороннему сервису постоянный внешний IP-адрес.
  • Мониторинг и фильтрация выходного трафика из кластера Google Kubernetes Engine.
alphayax
источник