У меня есть мультикластерная / многозонная платформа k8s, работающая на Google Kubernetes Engine. Базовая сеть GCP VPC работает в режиме глобальной маршрутизации. Сервисам k8s назначаются внутренние IP-адреса (clusterIP) через подсети псевдонимов IP.
Я могу пинговать узлы из одного кластера в другой, чтобы не было проблем с правилами брандмауэра или маршрутизацией в целом, но я не могу подключиться к отдельным службам по их внутренним IP-адресам псевдонимов в кластерах.
Я могу подключаться к службам из других узлов и контейнеров в том же кластере, хотя, если я создаю экземпляр вне кластера k8s в той же зоне, я не могу подключиться.
Кажется вероятным, что диапазоны псевдонимов IP-адресов не маршрутизируются, хотя подсети отображаются в таблице маршрутизации VPC.
Есть ли способ обеспечить правильную маршрутизацию всех IP-подсетей Alias по всему 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-адрес clusterIP находится в указанном диапазоне подсетей, но недоступен за пределами локального кластера k8s.
Это ожидаемое поведение с вашей существующей настройкой. Я считаю, что вы переживаете ограничение псевдонимов IP, который задокументирован в этой документации GCP на "Создание кластеров VPC с использованием псевдонимов IP":
«IP-адреса кластера для внутренних служб остаются доступными только изнутри кластера. Если вы хотите получить доступ к службе Kubernetes из VPC, но извне кластера (например, из экземпляра Compute Engine), используйте внутренний балансировщик нагрузки. "
Поэтому вам следует подумать об использовании Внутренняя балансировка нагрузки чтобы иметь доступ к сервисам извне, которые работают внутри кластера.