Статический исходящий IP-адрес в Кубернете
Я запускаю кластер k8s в облаке Google (GKE) и сервере MySQL в aws (RDS). Pods необходимо подключить к RDS, который разрешает только соединения с определенного IP-адреса. Как настроить исходящий трафик на статический IP-адрес?
Ответы
Ответ 1
У меня была такая же проблема для подключения к sftp-серверу из Pod.
Чтобы решить эту проблему, сначала необходимо создать внешний IP-адрес:
gcloud compute addresses create {{ EXT_ADDRESS_NAME }} --region {{ REGION }}
Затем я полагаю, что ваш модуль привязан к кластеру node по умолчанию.
Извлеките имя пула по умолчанию node:
gcloud compute instances list | awk '{ print $1 }' | grep default-pool
Стереть внешний ip по умолчанию для экземпляра vm:
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 не подключен к пулу по умолчанию node, не забудьте выбрать его с помощью nodeSelector:
nodeSelector:
cloud.google.com/gke-nodepool: {{ NODE_NAME }}
Ответ 2
Я провел небольшое исследование и нашел несколько вещей.
То, что мы ищем, называется "исходящие IP-адреса" или NAT-as-a-Service, и они оба еще не доступны в GKE.
В любом случае у нас есть два разных варианта:
- создайте виртуальную машину NAT Gateway, которая действует как выходной прокси. Вот хорошая статья об этом (облачный NAT-шлюз Google)
- назначить статические IP-адреса экземплярам виртуальной машины кластера
Надеюсь, поможет!
Ответ 3
Обновленные инструкции Google NAT Gateway здесь *:
https://cloud.google.com/solutions/using-a-nat-gateway-with-kubernetes-engine
(* выглядит больно не так уж плохо и работает)
Ответ 4
Вы можете использовать kubeip, модуль, который для каждого нового узла будет назначать IP-адрес из предопределенного пула.
Ответ 5
Я знаю, что это действительно старый, но для меня решение заключается в создании частного кластера kubernetes в облаке Google. Если кластер является частным, то узлы не будут иметь никаких внешних ips. Если у узлов нет внешнего ip, а у нас облачный nat, то весь исходящий трафик будет иметь тот же ip, что и облачный nat. Все это можно сделать через облачную консоль Google.
Я нашел эту статью информативной по созданию частного кластера.
https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters
Если кластер является частным и вам нужен доступ к нему из некоторой удаленной области, используйте эту команду:
Обновление кластеров контейнеров gcloud {имя_кластера} --enable-master-авторизованные сети - master-авторизованные сети {CIDR-запись вашего ip}
ПРИМЕЧАНИЕ. Создайте облако nat в том же регионе, что и кластер kubernetes. Также при создании облачного nat, убедитесь, что вы выбрали опцию "вручную" для IP-адресов NAT, затем выберите один статический IP-адрес, который у вас есть. Оставьте остальные настройки по умолчанию, если вы не знаете, что делаете.
После того, как все настроено, kubectl exec для любого вашего модуля, работающего на любом узле. Используйте команду dig для проверки вашего исходящего IP-адреса.
dig +short myip.opendns.com @resolver1.opendns.com
Должен быть таким же, как облачный nat ip.
Ответ 6
Вы можете настроить Сервис, который указывает на внешний IP-адрес с помощью
http://kubernetes.io/docs/user-guide/services/#external-ips