【问题标题】:Fail to connect the GKE with GCE on the same VPC?GKE和GCE在同一个VPC上连接失败?
【发布时间】:2020-01-11 13:32:00
【问题描述】:

我是 Google Cloud Platform 和以下背景的新手:

我有一个作为 MongoDB 服务器运行的 Compute Engine VM 和一个作为 NodeJS 服务器运行的 Compute Engine VM,已经使用 Docker。然后 NodeJS 应用程序通过默认的 VPC 内部 IP 连接到 Mongo。现在,我正在尝试将 NodeJS 应用程序迁移到 Google Kubernetes Engine,但是当我将 NodeJS 应用程序 Docker 映像部署到集群时,我无法连接到 MongoDB 服务器。

GCE 和 GKE 等所有服务都在同一个区域 (us-east-1)。

我通过 SSH 访问 kubernetes 集群节点并部署了一个简单的 MongoDB Docker 映像并尝试通过命令行连接到远程 MongoDB 服务器进行了艰苦的测试,但问题是相同的,尝试连接时超时。

我还检查了 GCP 上的防火墙设置以及 MongoDB 服务器上的 bindIp 设置,它没有阻止。

有人知道会发生什么吗?非常感谢。

【问题讨论】:

  • 私有集群也可以使用内部负载均衡器来接受来自您的 VPC 网络内的流量。
  • 嗨@JohnHanley,据我了解,本文档说的是来自 GKE 集群的传入流量,而我的问题是从 GKE 集群到同一 VPC 上的 GCE 实例的传出流量。
  • VPC IP 地址在私有范围内 (RFC1918)。这意味着任何想要直接使用 TCP/IP 到这些地址的人都需要在同一个 VPC 中或在对等 VPC 中。公共资源不能寻址私有地址。当您创建私有 GKE 集群时,Google 会创建一个 VPC,然后将其与您的 VPC 对等,从而允许 GKE VPC 和您的 VPC 之间的私有地址连接。

标签: kubernetes google-cloud-platform google-compute-engine google-kubernetes-engine vpc


【解决方案1】:

在我的情况下,从 GKE 到 GCE VM 的流量被 Google Firewall 阻止,即使你们都在同一个网络中(默认)。

我必须将集群详细信息中列出的集群 pod 网络列入白名单:

Pod address range 10.8.0.0/14

https://console.cloud.google.com/kubernetes/list

https://console.cloud.google.com/networking/firewalls/list

【讨论】:

    【解决方案2】:

    默认情况下,GKE 集群中的容器应该能够通过内部 IP 访问同一 VPC 的 GCE 虚拟机。就像您从 GKE 容器访问 Internet(例如 google.com)一样,GKE 和 VPC 知道如何路由流量。问题必须与其他配置(防火墙或您的应用程序)有关。

    你可以做一个测试,在GCE VM中启动一个简单的HTTP服务器,说内部IP是10.138.0.5

    python -m SimpleHTTPServer 8080
    

    然后创建一个 GKE 容器并尝试访问该服务:

    kubectl run my-client -it --image=tutum/curl --generator=run-pod/v1 -- curl http://10.138.0.5:8080
    

    【讨论】:

    • 要使用 VPC 私有 IP 地址访问 Kubernetes 集群,您必须创建私有集群并分配内部负载均衡器。
    • 问题不是从GCE访问GKE,而是相反。
    • 我找不到文档在哪里说“要访问 VPC 中的私有 IP 地址,Kubernetes 集群必须是私有的”。
    • 我会尝试这个测试并给出反馈。
    • 完成。 Pod 地址范围必须添加到 MongoDB 服务器防火墙规则中。非常感谢你们。
    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2021-10-19
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多