У меня есть мульти-кластерная / многозонная платформа k8s, работающая на Google Kubernetes Engine. Базовая сеть GCP VPC работает в режиме глобальной маршрутизации. Сервисам k8s назначены внутренние IP-адреса (clusterIP) через подсети псевдонимов IP.
Я могу пинговать узлы от одного кластера к другому, чтобы не было проблем с правилами брандмауэра или маршрутизацией в целом, но я не могу подключиться к отдельным службам на их внутренних IP-адресах с псевдонимами в кластерах.
Я могу подключаться к службам из других узлов и контейнеров в том же кластере, хотя если я создаю экземпляр вне кластера k8s в той же зоне, я не могу подключиться.
Похоже, что диапазоны IP-адресов псевдонимов не соответствуют маршрутизируется, даже если подсети отображаются в таблице маршрутизации VPC.
Есть ли способ гарантировать, что все подсети псевдонимов IP правильно маршрутизируются по всему VPC?
Некоторые детали ...
kubectl get services --namespace production
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch LoadBalancer 10.0.64.103 xxx.xxx.xxx.xxx 9200:30182/TCP,9300:31166/TCP 1m
gcloud compute routes list
NAME NETWORK DEST_RANGE NEXT_HOP PRIORITY
default-route-ac89edf7c623eb22 foo 10.0.64.0/19 foo 1000
IP-адрес кластера находится в указан диапазон подсети, но недоступен за пределами локального кластера k8s.
Это ожидаемое поведение при существующей настройке. Я считаю, что вы столкнулись с ограничением псевдонимов IP-адресов , которое задокументировано в этой документации GCP на « Создание кластеров с собственным VPC с использованием псевдонимов IP-адресов »:
«IP-адреса кластера для внутренних услуг остаются доступными только изнутри кластер. Если вы хотите получить доступ к сервису Kubernetes изнутри VPC, но извне кластера (например, из Compute Engine instance), используйте внутренний балансировщик нагрузки ».
Поэтому вам следует рассмотреть возможность использования Internal Load Balancing , чтобы иметь доступ к службам извне, которые работают внутри кластера.