从其他区域访问私有 GKE 集群?

Posted

技术标签:

【中文标题】从其他区域访问私有 GKE 集群?【英文标题】:Access private GKE clusters from a different region? 【发布时间】:2020-04-22 03:38:48 【问题描述】:

我使用以下命令创建了一个 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)。

因此,我在此 VM (gcp-vm-asia-south1-a) 中安装了 Open*** 服务器。现在,当我从本地系统连接到此 VM 时,我可以访问集群主端点,并且以下命令可以正常工作:

gcloud container clusters get-credentials "cluster-asia-south1" --region "asia-south1"

然后kuebctl get pods 工作正常,我也可以通过 Helm 进行连接。

假设我在同一个 VPC 但不同区域中还有两个集群(例如 cluster-us-central1cluster-us-west1)。我如何使用同一个 Open*** 服务器来访问这些集群?

我了解,如果我为每个区域设置一个 Open*** 服务器,我将能够连接到相应的 *** 服务器,并且该区域的 GKE 集群将可以毫无问题地访问。

但我不想在每个区域管理三台 Open*** 服务器。管理一个堡垒,几个iptablesforwarding rules 或类似的东西应该没问题。

这个想法是为一个 VPC 保留一个 Open*** 服务器,无论有多少区域。这是否可行,有没有办法做到这一点?

我尝试在--master-authorized-networks 中添加虚拟机、子网和客户端的私有 IP 范围,但没有任何效果(我认为因为它们都来自不同的区域)。

【问题讨论】:

【参考方案1】:

您是否将--enable-master-authorized-networks 标志与--master-authorized-networks 一起使用,正如提到的in the documentation?你有没有用命令gcloud container clusters describe [CLUSTER_NAME]检查masterAuthorizedNetworksConfig:

您是否有任何防火墙规则可以限制从您的 Open*** 服务器访问其他集群?

编辑连接问题的原因可能是使用来自不同 regions 的子网:“VPC 网络是全球资源,但各个子网是区域资源”和“区域资源可访问由同一区域内的任何资源”。

【讨论】:

【参考方案2】:

我按照blog from GCP 部署代理,并且在同一区域内有另一个 VM 部署了 Open*** 服务器。

我将本地计算机连接到 Open*** 服务器并使用博客中显示的 https_proxy=LOCAD_BALANCER_IP:PORT 变量更改我的代理。

现在我的本地机器能够与 GKE 集群的主 IP 进行交互,因为主认为请求来自部署在集群内的代理服务。此代理服务认为请求不是来自区域外,而是来自同一区域和 VPC 中的 Open*** 服务器 (VM)。

【讨论】:

以上是关于从其他区域访问私有 GKE 集群?的主要内容,如果未能解决你的问题,请参考以下文章

使用 terraform 将公共 GKE 更改为私有 GKE 集群

Terraformed 私有 GKE 集群自动化访问

使用私有 IP 从不同 VPC 网络中的 GKE 集群连接到 Cloud SQL

如何为私有 GKE 集群启用 Gitlab CI/CD?

在具有私有 GKE 集群的 Terraform 上使用 Kubernetes 提供程序

对于每个环境,我们是不是需要单独的 GKE 集群?