【问题标题】:Internet connectivity for GKE nodesGKE 节点的互联网连接
【发布时间】:2020-10-31 19:25:30
【问题描述】:

我使用以下命令创建了一个 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 ?这里有点困惑。

【问题讨论】:

  • Pod(GKE 节点)需要访问构建在其中运行的容器所需的内容。看起来谷歌只允许这种资源,比如 dockerhub 和它们的地址空间(你可能在 CDN 后面有容器注册表),它们会阻止其他一切。这就是您无法打开 amazon.com 的原因。
  • @Iñigo 你说的有道理。谢谢。但要寻找更确定和更官方的东西。
  • 在防火墙的 443 端口上添加允许外部访问规则

标签: google-cloud-platform google-kubernetes-engine gke-networking


【解决方案1】:

GKE 节点上的互联网连接发生了什么。我可以到达 码头中心但不是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,这可能不是测试与公共互联网连接的最佳选择特定的云平台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2012-01-24
    相关资源
    最近更新 更多