Невозможно подключиться к частной региональной конечной точке GKE из клиента OpenVPN

Я создал частный кластер GKE через Terraform ( google_container_cluster с private = true а также region установить) и установить stable/openvpn Шлем Диаграмма. Мои настройки в основном такие же, как описано в этой статье: https://itnext.io/use-helm-to-deploy-openvpn-in-kubernetes-to-access-pods-and-services-217dec344f13 и я могу см ClusterIP - только выставленный сервис, как описано в статье. Тем не менее, пока я подключен к VPN, kubectl не удается из-за невозможности связаться с мастером.

Я оставил OVPN_NETWORK настройка по умолчанию (10.240.0.0) и поменял OVPN_K8S_POD_NETWORK и настройку маски подсети для вторичного диапазона, который я выбрал при создании своей частной подсети, в которой находится частный кластер.

Я даже пытался добавить 10.240.0.0/16 к моему master_authorized_networks_config но я почти уверен, что настройка работает только во внешних сетях (добавление внешнего IP-адреса совершенно другого сервера OVPN позволяет мне работать kubectl когда я к нему подключусь).

Есть идеи, что я здесь делаю не так?

Изменить: я только что вспомнил, что я должен был установить значение для master_ipv4_cidr_block для того, чтобы создать частный кластер. Итак, я добавил 10.0.0.0/28 в файл ovpn.conf как push "route 10.0.0.0 255.255.255.240" но это не помогло Документы по этому параметру гласят:

Определяет частный блок RFC1918 для VPC мастера. Основной диапазон не должен перекрываться с какой-либо подсетью в VPC вашего кластера. Мастер и ваш кластер используют пиринг VPC. Должен быть указан в нотации CIDR и должен быть /28 подсети.

но каково значение для клиента OpenVPN в подсети за пределами кластера? Как использовать вышеупомянутый пиринг VPC?

1 ответ

Разобрался в чем проблема: gcloud container clusters get-credentials всегда записывает внешний IP-адрес мастера ~/.kube/config, Так kubectl всегда говорит с этим внешним IP-адресом вместо внутреннего IP-адреса.

Чтобы исправить: я побежал kubectl get endpointsотметил 10.0.0.x IP и заменили внешний IP в ~/.kube/config с этим. Сейчас kubectl работает нормально при подключении к серверу OVPN внутри кластера Kube.

Можете добавить --internal-ip на вашу команду gcloud, чтобы автоматически поставить внутренний IP-адрес ~/.kube/config файл