我使用以下命令创建了一个 GKE 集群:
gcloud beta container clusters create "cluster-asia-south1"
--region "asia-south1"
--project "project123"
--cluster-version "1.14.8-gke.12"
--machine-type "n1-standard-1"
--image-type "COS" --disk-type "pd-standard" --disk-size "100"
--scopes "https://www.googleapis.com/auth/cloud-platform"
--num-nodes "1"
--no-enable-basic-auth
--metadata disable-legacy-endpoints=true
--max-pods-per-node "110" --enable-stackdriver-kubernetes
--enable-ip-alias
--network "projects/project123/global/networks/default"
--subnetwork "projects/project123/regions/asia-south1/subnetworks/default"
--default-max-pods-per-node "110"
--addons HorizontalPodAutoscaling,HttpLoadBalancing
--no-enable-autoupgrade
--no-enable-autorepair
--node-locations asia-south1-a,asia-south1-b
我知道可以从asia-south1
区域内的虚拟机访问此群集(例如gcp-vm-asia-south1-a
(。
因此,我在此虚拟机中安装了OpenVPN服务器(gcp-vm-asia-south1-a
(。现在,当我从本地系统连接到此 VM 时,我能够访问集群主端点,以下命令工作正常:
gcloud container clusters get-credentials "cluster-asia-south1" --region "asia-south1"
然后kuebctl get pods
工作正常,我也可以通过 Helm 连接。
假设我在同一 VPC 中还有两个集群,但区域不同(例如cluster-us-central1
和cluster-us-west1
(。如何使用同一个OpenVPN服务器来访问这些集群?
我知道如果我为每个区域设置一个OpenVPN服务器,我将能够连接到相应的VPN服务器,并且可以从该区域访问GKE集群而不会出现问题。
但我不想在每个地区管理三台OpenVPN服务器。管理堡垒会加热几iptables
或forwarding rules
或类似的东西应该没问题。
这个想法是为一个VPC保留一个OpenVPN服务器,无论有多少个区域。这是否可行,有什么办法可以做到这一点吗?
我尝试在--master-authorized-networks
中添加虚拟机、子网和客户端的私有 IP 范围,但没有任何效果(我认为因为它们都来自不同的地区(。
您是否按照文档中提到的--master-authorized-networks
使用了--enable-master-authorized-networks
标志?您是否使用命令gcloud container clusters describe [CLUSTER_NAME]
检查masterAuthorizedNetworksConfig:
?
您是否有任何防火墙规则可以限制从 OpenVPN 服务器访问其他集群?
编辑连接问题的原因可能是使用来自不同区域的子网:"VPC 网络是全局资源,但单个子网是区域资源"和"同一区域内的任何资源都可以访问区域资源"。
我按照 GCP 的这篇博客部署了代理,在同一区域中还有另一个虚拟机,上面部署了 OpenVPN 服务器。
我将本地计算机连接到OpenVPN服务器,并使用博客中显示的变量更改https_proxy=LOCAD_BALANCER_IP:PORT
代理。
现在,我的本地计算机能够与 GKE 集群的主 IP 进行交互,因为主机器认为请求来自集群内部署的代理服务。此代理服务认为请求不是来自区域外部,而是来自同一区域和 VPC 中的 OpenVPN 服务器 (VM(。