GKE 节点的互联网连接

GKE 节点的互联网连接

我使用以下命令创建了一个 GKE 集群:

gcloud container clusters create experiment --num-nodes=1 --network default --subnetwork default --enable-private-nodes --enable-private-endpoint --enable-ip-alias --master-ipv4-cidr 172.16.0.16/28 --no-enable-basic-auth --no-issue-client-certificate 

我的 VPC 防火墙中没有出口规则,在 VPC 路由下我有一个自动创建的默认路由,该路由适用于 GKE 节点并允许互联网访问。

在 GKE 节点上我可以:

    $ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bb79b6b2107f: Pull complete 
111447d5894d: Pull complete 
a95689b8e6cb: Pull complete 
1a0022e444c2: Pull complete 
32b7488a3833: Pull complete 
Digest: sha256:ed7f815851b5299f616220a63edac69a4cc200e7f536a56e421988da82e44ed8
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest



docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6a5697faee43: Pull complete 
ba13d3bc422b: Pull complete 
a254829d9e55: Pull complete 
Digest: sha256:fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

但我不能:

$ wget https://www.amazon.com
--2020-10-31 19:22:44--  https://www.amazon.com/
Resolving www.amazon.com... 13.226.21.44
Connecting to www.amazon.com|13.226.21.44|:443... 

但是我可以:

  $ wget https://www.google.com
--2020-10-31 19:23:15--  https://www.google.com/
Resolving www.google.com... 172.217.212.147, 172.217.212.99, 172.217.212.106, ...
Connecting to www.google.com|172.217.212.147|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'index.html.1'
index.html.1                                   [ <=>                                                                                    ]  12.48K  --.-KB/s    in 0s      
2020-10-31 19:23:15 (72.1 MB/s) - 'index.html.1' saved [12782]





   route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.128.0.1      0.0.0.0         UG    1024   0        0 eth0
10.108.2.0      0.0.0.0         255.255.255.0   U     0      0        0 cbr0
10.128.0.1      0.0.0.0         255.255.255.255 UH    1024   0        0 eth0
169.254.123.0   0.0.0.0         255.255.255.0   U     0      0        0 docker0

GKE 节点上的互联网连接出了什么问题。我可以访问 docker hub,但无法访问www.amazon.com? 有点困惑。

答案1

我使用以下命令创建了一个 GKE 集群:

gcloud container clusters create experiment --num-nodes=1 --network default --subnetwork default --enable-private-nodes --enable-private-endpoint --enable-ip-alias --master-ipv4-cidr 172.16.0.16/28 --no-enable-basic-auth --no-issue-client-certificate

通过此命令你创建了一个私人的--enable-private-nodesGKE簇。

官方文件指出:

在私有集群中,节点只有内部 IP 地址,这意味着节点和 Pod默认与互联网隔离

--Cloud.google.com:Kubernetes Engine:如何:私有集群

默认情况下,您将无权访问网站点赞等内容amazon.commicrosoft.com

google.com由于私人 Google 访问权限,您的节点已成功连接到:

仅具有内部 IP 地址(没有外部 IP 地址)的 VM 实例可以使用私有 Google Access。它们可以访问 Google API 和服务的外部 IP 地址。数据包的源 IP 地址可以是网络接口的主要内部 IP 地址,也可以是分配给该接口的别名 IP 范围内的地址。如果停用 Private Google Access,虚拟机实例将无法再访问 Google API 和服务;它们只能在 VPC 网络内发送流量。

--Cloud.google.com:VPC:私有访问选项

您可以尝试在 2 个独立网络中创建VM仅具有内部 IP 地址的 2 个 ,其中一个网络启用了 PGA。您应该能够与google.com位于VM启用 PGA 的网络中的 进行通信(或者在具有 的网络上启用/禁用 PGA VM)。

附注:

您可以配置 Cloud NAT 以允许您的私有GKE节点访问互联网:


至于拉取图像:

从镜像注册表中提取容器镜像

在私有集群中,容器运行时可以从容器注册表;它无法从互联网上的任何其他容器镜像注册表中提取镜像。这是因为私有集群中的节点没有外部 IP 地址,因此默认情况下它们无法与 Google 网络之外的服务通信

如果私有集群中的节点位于具有以下条件的子网中,则它们可以与 Google 服务(如 Container Registry)进行通信:私人 Google 访问权限已启用。

以下命令创建一个部署,从 Google 拥有的 Container Registry 存储库中提取示例映像:

  • $ kubectl run hello-deployment --image gcr.io/google-samples/hello-app:2.0

注意:虽然 Container Registry 的Docker Hub 镜像可以从私有集群访问,因此不应完全依赖它。镜像只是一个缓存,因此图像会定期被删除,并且私有集群无法回退到 Docker Hub。

您的ubuntunginx图像GKE从私有节点可访问的镜像下载。如果您尝试下载不在镜像中的图像,您将收到以下错误:

  • $ kubectl describe pod
Pulling image "MYOWNPUBLICREPO/ubuntu-test:latest"
  Warning  Failed          13m (x184 over 58m)   kubelet, GKE-CLUSTER-POOL  Error: ImagePullBackOff
  Warning  Failed          8m6s (x14 over 58m)   kubelet, GKE-CLUSTER-POOL  Failed to pull image "MYOWNPUBLICREPO/ubuntu-test:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

建议将容器镜像仓库与私有GKE集群一起使用。您可以通过以下官方文档了解更多信息:

相关内容