Назад | Перейти на главную страницу

Почему модуль не может подключиться к другой сети? (В новой версии Kubernetes)

У меня в GCP два проекта:

  1. С узлами Kubernetes v1.8.8-gke.0. и база данных вне Kubernetes, но в сети по умолчанию. Все поды могут подключаться к этому серверу и ко всем портам
  2. С узлами Kubernetes v1.9.7-gke.3 и базой данных вне Kubernetes, но в сети по умолчанию. Ни один модуль не может подключиться к этому серверу. Тест Traceroute не прошел.

Почему этот модуль не может подключиться? Идеи?

Спасибо.

Я сообщил об этой проблеме в Google здесь: https://issuetracker.google.com/issues/111986281

И они сказали, что это проблема Kubernetes 1.9:

Beginning with Kubernetes version 1.9.x, automatic firewall rules have changed such that workloads in your Kubernetes Engine cluster cannot communicate with other Compute Engine VMs that are on the same network, but outside the cluster. This change was made for security reasons.

По следующей ссылке - решение: https://cloud.google.com/kubernetes-engine/docs/troubleshooting#autofirewall

В принципе:

Сначала найдите сеть своего кластера: gcloud container clusters describe [CLUSTER_NAME] --format=get"(network)"

Затем получите CIDR IPv4 кластера, используемый для контейнеров:

gcloud container clusters describe [CLUSTER_NAME] --format=get"(clusterIpv4Cidr)"

Наконец, создайте правило брандмауэра для сети с CIDR в качестве исходного диапазона и разрешите все протоколы:

gcloud compute firewall-rules create "[CLUSTER_NAME]-to-all-vms-on-network" --network="[NETWORK]" --source-ranges="[CLUSTER_IPV4_CIDR]" --allow=tcp,udp,icmp,esp,ah,sctp

Поскольку у вас есть два разных сервера баз данных в GCP, они могут иметь разные конфигурации. Вы используете Cloud SQL или серверы баз данных, установленные на виртуальных машинах GCE? Для Cloud SLQ убедитесь, что внешние IP-адреса узлов кластера включены в белый список авторизованных новых экземпляров экземпляра Cloud SQL. Если ваша база данных работает на виртуальных машинах GCE, я бы рекомендовал проверить правила брандмауэра, чтобы убедиться, что они разрешают входящие подключения к сервер на правильном порту и протоколах. Вы также можете проверить адрес привязки вашего процесса базы данных, чтобы узнать, принимает ли он входящие соединения с внешних IP-адресов. (Это можно сделать, запустив «sudo netstat -plnt», чтобы увидеть процессы и их адреса привязки). Эта ссылка может помочь.