У меня есть один общедоступный кластер GKE с двумя узлами и двумя общедоступными внешними IP-адресами. Мне нужен только один исходящий IP-адрес.
Я хочу использовать для этого Cloud NAT. Кажется, это возможно.
Псевдоним диапазона IP-адресов, назначенный сетевому интерфейсу виртуальной машины: даже если сетевому интерфейсу назначен внешний IP-адрес, вы можете настроить шлюз Cloud NAT для обеспечения NAT для пакетов, источники которых поступают из псевдонима диапазона IP-адресов интерфейса. Внешний IP-адрес на интерфейсе никогда не выполняет однозначный NAT для псевдонимов IP-адресов.
Я создал Cloud NAT, но он не работает. Я использую следующие команды для получения IP-адреса, и он всегда возвращает один из IP-адресов узлов.
kubectl run -i --tty get-ip-address --image=dwdraju/alpine-curl-jq --restart=Never
и
curl checkip.amazonaws.com
В моем кластере включен собственный VPC.
Публичный кластер GKE предоставит внешний IP-адрес каждому узлу внутри кластера.
Даже если вы создаете конфигурацию NAT и можете использовать внешние IP-адреса для шлюза NAT, узлы по-прежнему будут доступны по его собственному внешнему IP-адресу.
Чтобы обеспечить использование только внешних IP-адресов для шлюза NAT, вам необходимо сделать кластер частным.
У Google есть руководство по настройке образца Cloud NAT с помощью GKE:
Другими словами, если вы хотите открыть какое-либо приложение, работающее внутри вашего кластера GKE, через внешний IP-адрес, вам необходимо использовать службу.
Например, служба типа LoadBalancer делает ваше приложение доступным через внешний IP-адрес вашего балансировщика нагрузки, который создается автоматически при применении обслуживание