【问题标题】:Communication between pods and services in GCP between different clusters linked in VPC networkVPC 网络中链接的不同集群之间的 GCP 中的 Pod 和服务之间的通信
【发布时间】:2019-03-20 15:28:07
【问题描述】:

我在 GCP 中有 2 个集群,一个在欧洲,另一个在美国。 我创建了一个 VPC 网络来对等子网并配置相关的防火墙规则。 现在我能够在 Pod 之间创建调用,但是当我尝试从欧洲的 Pod 到另一个集群中的服务创建它们时,我获得了超时。我很好地检查了所有防火墙规则,但找不到解决方案。有人可以给我一些提示来解决我的问题吗?

【问题讨论】:

    标签: kubernetes google-cloud-platform vpc


    【解决方案1】:

    问题在于 GCP 需要使用虚拟机 IP 地址才能在 VPC 外部进行通信。为了允许在 VPN 上进行跨集群通信,您需要确保集群可以在同一虚拟网络上进行通信。如果内部 IP 地址(pod 地址空间)用于访问虚拟网络外部的内部 IP 地址(在这种情况下是通过 VPN),GKE 会阻止出口流量。因此,您需要配置一个 ip 表规则来伪装流量,因为它来自 VM 实例 IP 地址,而不是所有到另一个子网的传出流量的 pod IP 地址。

    有一个使用守护进程集来定义 iptables MASQUERADE 规则的实现。

    您可以在 github 页面 - https://github.com/kubernetes-incubator/ip-masq-agent 和 k8s 文档 - https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/ 上找到更多详细信息

    【讨论】:

    • 谢谢。我想更好地描述我的情况:我在美国有一个带有 ClusterIP 类型服务的 RabbitMQ 集群,在欧洲有一个带有 ubuntu 的 pod。从 ubuntu pod 我可以创建与美国 RabbitMQ pod 的 TCP 连接,但当我尝试创建与 RabbitMQ 集群服务的相同连接时却不能。我检查了防火墙规则日志:在欧洲,我的出口规则接受两个目的地,但在美国的入口规则中,我只能看到带有目标 pod IP 的日志,没有服务 IP 的日志
    • @maurotinto 您是否尝试使用内部 ip 创建负载均衡器并尝试将其用于通信而不是 ClusterIP 服务。为此,请向服务添加注释 cloud.google.com/load-balancer-type: "Internal",并将服务类型更改为 LoadBalancer。要获取静态 IP,您也可以设置 IP 地址
    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 2021-02-20
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2021-04-19
    • 2019-07-13
    相关资源
    最近更新 更多