15

Я запускаю кластер k8s в облаке Google (GKE) и сервере MySQL в aws (RDS). Pods необходимо подключить к RDS, который разрешает только соединения с определенного IP-адреса. Как настроить исходящий трафик на статический IP-адрес?Статический исходящий IP-адрес в Kubernetes

+0

Скажите, что ваш код работал на отдельной виртуальной машине без k8s. Что бы вы сделали, чтобы настроить RDS для приема соединений? – iamnat

+0

Я добавлю NAT-сервер с глобальным IP-адресом и настрою другие серверы (например, веб-серверы) для подключения к Интернету через NAT. – Shouichi

+0

Hm..I никогда не использовал это раньше, но мне кажется, что если бы у вас был веб-сервер, работающий на виртуальной машине, которая подключается к RDS, RDS увидит входящее соединение из общедоступного IP-адреса виртуальной машины. Это означает, что вы можете либо иметь «прокси-сервер», работающий на определенном узле в вашем кластере, через который ваши веб-серверы подключаются к RDS (теперь вы можете использовать общедоступный IP-адрес этого узла), либо вы можете переадресовывать все IP-адреса всех узлов вашего кластер для RDS. Имеет ли это смысл? – iamnat

ответ

2

Я сделал некоторые исследования, и я нашел несколько вещей.

То, что мы ищем, называется «исходящие IP-адреса» или NAT-as-a-Service, и оба они еще не доступны в GKE.

В любом случае мы имеем два различных варианта:

  1. создать шлюз VM NAT, который действует в качестве выходного прокси. Вот хорошая статья говорить о том, что (google cloud NAT gateway)
  2. назначить статический IP-адрес для контейнера кластера экземпляры VM

Надеется, что это помогает!

+0

Просто, чтобы быть уверенным, не будет ли это (https://kubernetes.io/docs/tutorials/services/source-ip/) позаботиться об описанных потребностях? –

+0

mmhh не думаю, что @Zed_Blade: сервис всегда зависит от запросов, поступающих извне и обслуживаемых от стручков. Проблема, с другой стороны, это NAT для аутсорсинга трафика. –

+0

То же обсуждение [здесь] (https://groups.google.com/forum/#!topic/kubernetes-users/zNytc8GVB5s). [NAT-шлюз] (https://cloud.google.com/compute/docs/networking#natgateway), похоже, сейчас идет. – Carlos

7

У меня была такая же проблема для подключения к sftp-серверу с Pod. Чтобы решить эту проблему, сначала нужно создать внешний IP-адрес:

gcloud compute addresses create {{ EXT_ADDRESS_NAME }} --region {{ REGION }} 

Тогда, я полагаю, что ваш стручок назначается в кластер узла по умолчанию пула. Извлечь имя узла по умолчанию пула:

gcloud compute instances list | awk '{ print $1 }' | grep default-pool 

Erase по умолчанию внешний IP-адрес экземпляра виртуальной машины:

gcloud compute instances delete-access-config {{ VM_DEFAULT-POOL_INSTANCE }} --access-config-name external-nat 

Добавьте ваш внешний статический IP, созданные до:

gcloud compute instances add-access-config {{ VM_DEFAULT-POOL_INSTANCE }} --access-config-name external-nat --address {{ EXT_ADDRESS_IP }} 

Если Pod не привязан к узлу пула по умолчанию, не забудьте выбрать его с помощью узлаSelector:

nodeSelector: 
    cloud.google.com/gke-nodepool: {{ NODE_NAME }} 
+1

По какой-то причине команда 'add-access-config' требует параметров' zone' и 'network-interface'. Другое дело, что он работал как шарм. – defectus

+0

Привет, спасибо за ваш ответ! Для меня это не очень понятно. С помощью этого подхода контейнеры всегда работают только на одном узле? – Shouichi

+0

Это базовая конфигурация с пулом по умолчанию. В этом случае он работает с одним модулем только на одном узле. –