Я запускаю кластер k8s в облаке Google (GKE) и сервере MySQL в aws (RDS). Pods необходимо подключить к RDS, который разрешает только соединения с определенного IP-адреса. Как настроить исходящий трафик на статический IP-адрес?Статический исходящий IP-адрес в Kubernetes
ответ
Вы можете настроить службы, который указывает на внешний IP с
Если я правильно прочитал документ, это для входящего трафика. – Shouichi
Я сделал некоторые исследования, и я нашел несколько вещей.
То, что мы ищем, называется «исходящие IP-адреса» или NAT-as-a-Service, и оба они еще не доступны в GKE.
В любом случае мы имеем два различных варианта:
- создать шлюз VM NAT, который действует в качестве выходного прокси. Вот хорошая статья говорить о том, что (google cloud NAT gateway)
- назначить статический IP-адрес для контейнера кластера экземпляры VM
Надеется, что это помогает!
Просто, чтобы быть уверенным, не будет ли это (https://kubernetes.io/docs/tutorials/services/source-ip/) позаботиться об описанных потребностях? –
mmhh не думаю, что @Zed_Blade: сервис всегда зависит от запросов, поступающих извне и обслуживаемых от стручков. Проблема, с другой стороны, это NAT для аутсорсинга трафика. –
То же обсуждение [здесь] (https://groups.google.com/forum/#!topic/kubernetes-users/zNytc8GVB5s). [NAT-шлюз] (https://cloud.google.com/compute/docs/networking#natgateway), похоже, сейчас идет. – Carlos
У меня была такая же проблема для подключения к 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 }}
По какой-то причине команда 'add-access-config' требует параметров' zone' и 'network-interface'. Другое дело, что он работал как шарм. – defectus
Привет, спасибо за ваш ответ! Для меня это не очень понятно. С помощью этого подхода контейнеры всегда работают только на одном узле? – Shouichi
Это базовая конфигурация с пулом по умолчанию. В этом случае он работает с одним модулем только на одном узле. –
Скажите, что ваш код работал на отдельной виртуальной машине без k8s. Что бы вы сделали, чтобы настроить RDS для приема соединений? – iamnat
Я добавлю NAT-сервер с глобальным IP-адресом и настрою другие серверы (например, веб-серверы) для подключения к Интернету через NAT. – Shouichi
Hm..I никогда не использовал это раньше, но мне кажется, что если бы у вас был веб-сервер, работающий на виртуальной машине, которая подключается к RDS, RDS увидит входящее соединение из общедоступного IP-адреса виртуальной машины. Это означает, что вы можете либо иметь «прокси-сервер», работающий на определенном узле в вашем кластере, через который ваши веб-серверы подключаются к RDS (теперь вы можете использовать общедоступный IP-адрес этого узла), либо вы можете переадресовывать все IP-адреса всех узлов вашего кластер для RDS. Имеет ли это смысл? – iamnat