我使用以下命令创建了一个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节点并允许Internet访问。
在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节点上的Internet连接发生了什么。我可以到达docker hub,但不能到达www.amazon.com吗?这里有点困惑。
答案 0 :(得分:1)
GKE节点上的Internet连接发生了什么。我可以到达 docker hub而不是www.amazon.com?这里有点困惑。
我知道乍一看似乎有些令人困惑,因为 您可能认为您确实可以访问Docker Hub 。好吧,实际上您不。
您尝试curl https://hub.docker.com/
吗?我想你没有。如果这样做,您会注意到它也失败了。
您可以阅读here:
私有群集中的节点没有对公共节点的出站访问权限 互联网。。他们只能访问Google API和服务, 包括容器注册表。
那么,这里实际上发生了什么?
您不是直接从Docker Hub提取图像,而是从由 Google Container Registry 维护的镜像中提取图像。您可以通过非常简单的方式进行检查。如果您拉nginx
(等于nginx:latest
)可以正常工作,但是如果您尝试拉nginx:1.14.2
,它将失败。这是因为 GCR 不会在 Docker Hub 上保留所有映像的旧版本。 official docs中也提到了这一点:
您无法直接从Docker Hub获取图像。而是使用图片 托管在Container Registry上。请注意,虽然Container Registry的 Docker Hub mirror 可从私有群集访问,但不应独占 依靠。镜像只是一个缓存,因此图像会定期 删除后,私有集群将无法使用Docker Hub。
我前段时间在this答案中对此进行了深入的解释,因此您可能还想看看它。在the official docs中也有很好的解释。
但是我可以:
$ wget https://www.google.com
来吧,您在GCP平台?上,因此您正在通过 Google的网络访问google.com
,而这可能不是测试与公共互联网的连接的最佳选择在这个特定的云平台上。