GKE中的容器无法ping同一网络上的计算实例

Apo*_*tas 6 google-cloud-platform kubernetes google-kubernetes-engine

我在GKE中创建了一个新集群,版本为1.10.5-gke.0。我看到我的应用程序无法访问同一网络中的IP,基本上是实例在计算上运行。

我已经切换到Kubernetes节点之一,并且通过使用附带的工具箱,我可以ping这些IP地址,但是如果我尝试从在此集群上运行的容器中尝试,则无法这样做。

我看到,自1.10以来,google禁用了计算和存储的访问范围,即使启用了这些范围,我仍然会得到相同的结果。

我觉得有些困惑,因为它过去可以用于所有其他集群,而无需任何额外的配置

我在这里想念什么吗?

iAm*_*mcR 7

解决此问题的一种简单方法是使用 Google Cloud Console。

导航菜单 -> VPC 网络 -> 防火墙规则

.

通常在创建集群时,会自动创建一些带有特定前缀和后缀的规则。查看带有gke-前缀和-all后缀的规则表,例如 gke-[my_cluster_name]-all。您会注意到这条规则,它包含集群内 pod 的源范围,并且允许使用相当多的协议(tcp、udp、imp、esp 等)。

选择此规则并转到Edit。在目标下,选择下拉菜单并更改为网络中的所有实例

或者,您可以选择指定的Specified target tagsSpecified service account,在下面输入正确的值,例如您尝试访问的计算引擎的正确开发者服务帐户。

如果您使用的是 Kubernetes 版本 1.9.x 及更高版本,您也可以在此处查看另一种替代方式。故障排除

希望这一切都有帮助。


use*_*965 3

我也遇到了这个问题。我在默认网络上的虚拟机上运行 mongo,在默认网络上的新节点上重新创建 kubernetes 集群后,无法从 Pod 内部访问它。

添加此防火墙规则修复了问题:

NAME                                              NETWORK                DIRECTION  PRIORITY  SRC_RANGES                                                                                                                                                                                                                                   DEST_RANGES  ALLOW                         DENY  SRC_TAGS  SRC_SVC_ACCT  TARGET_TAGS                                        TARGET_SVC_ACCT
gke-seqr-cluster-dev-eb823c8e-all                 default                INGRESS    1000      10.48.0.0/24                                                                                                                                                                                                                                              tcp,udp,icmp,esp,ah,sctp
Run Code Online (Sandbox Code Playgroud)

这里,10.48.0.0 子网基于 cbr0 网络(通过 ssh 进入 kubernetes 节点并运行来查找ip address

cbr0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1460 qdisc htb state UP group default qlen 1000
   ..
    inet 10.48.0.1/24 scope global cbr0
       valid_lft forever preferred_lft forever
   ..
Run Code Online (Sandbox Code Playgroud)

获取 10.48.0.1 IP 的另一种方法是在 Pod 内安装并运行 Traceroute:

traceroute <ip of node you're trying to reach>
Run Code Online (Sandbox Code Playgroud)