繁体   English   中英

为公共 GKE 集群设置 Cloud NAT

[英]Setup Cloud NAT for public GKE clusters

我想使用Cloud NAT设置 NAT 网关,以便公共 GKE 集群中的 VM/Pod 使用 static IP 地址。

我面临的问题是 NAT 网关似乎只在 VM 没有其他选择的情况下使用,即:

仅当流量没有其他匹配路由或路径时,GCP 才使用 Cloud NAT 转发流量。

但在公共 GKE 集群的情况下,VM 具有临时外部 IP,因此它们不使用网关。

根据文档:

如果您在 VM 的接口上配置外部 IP [...] NAT 将不会对此类数据包执行。 但是,分配给接口的别名 IP 范围仍然可以使用 NAT,因为它们不能使用外部 IP 到达 Inte.net。

使用此配置,您可以通过 SSH 直接连接到 GKE VM,同时让 GKE pod/容器使用 Cloud NAT 访问 Inte.net。

这就是我想要的,但我看不出要在这里设置什么。

alias IP ranges assigned to the interface can still use NAT ,如何设置?

“不幸的是,目前情况并非如此。虽然 Cloud NAT 仍处于 Beta 版,但某些设置尚未完全到位,因此即使有 IP 别名,Pod 仍在使用 SNAT。由于 SNAT 到节点的 IP,Pod 将不使用云 NAT。”

事实上,正如帕特里克 W 上面所说,它目前并没有按照文档中的说明工作。 我也尝试过,并在 Kubernetes Engine 频道中与 GCP Slack 小组的人进行了交谈。 他们还在测试中确认它仅适用于 GKE 私有集群。 我们还没有开始使用私有集群。 我找不到关于这个简单问题的可靠文档:如果我创建了一个私有集群,我还能在该集群中拥有公共 K8S 服务(又名负载均衡器)吗? 所有关于私有 GKE 集群的文档都表明您不希望任何外部流量进入,但我们正在 GKE 集群上运行面向 Internet 的生产服务。

我就 Cloud NAT 问题向 GCP 支持提交了一张票,他们是这样说的:

“我一直在查看您的配置,Cloud NAT 无法正常工作的原因是您的集群不是私有集群。要将 Cloud NAT 与 GKE 一起使用,您必须创建一个私有集群。在非私有集群中,您的集群的公共 IP 地址是集群用于主节点和节点之间的通信。这就是为什么 GKE 没有考虑您拥有的 Cloud NAT 配置。创建私有集群将允许您结合 Cloud NAT 和 GKE。

我知道我们的文档中对此不是很清楚,我已经报告了这一点,以澄清并解释它应该如何工作。”

我回应要求他们按照文档进行工作,而不是更改他们的文档。 我正在等待他们的更新......

这里的想法是,如果您对集群使用原生 VPC(IP 别名),则您的 pod 在路由出集群时将不会使用 SNAT 如果没有 SNAT,Pod 将不会使用节点的外部 IP,因此应该使用 Cloud NAT。

不幸的是,目前情况并非如此。 虽然 Cloud NAT 仍处于 Beta 阶段,但某些设置尚未完全到位,因此即使使用 IP 别名,Pod 仍在使用 SNAT。 由于节点 IP 的 SNAT,Pod 将不会使用 Cloud NAT。

话虽如此,为什么不使用私有集群呢? 它更安全,可与 Cloud NAT 配合使用。 您不能直接通过 SSH 连接到节点,但是 A) 您可以在您的项目中创建一个堡垒 VM 实例,该实例可以使用内部 IP 标志进行SSH 连接,并且 B) 在大多数情况下您通常不需要通过 SSH 连接到节点。

将 google 的 Cloud NAT 与公共 GKE 集群一起使用是可行的!

首先需要使用保留的外部 IP 设置云 NAT 网关和路由器。

完成后,需要更改ip-masq-agent配置,以为作为集群内部请求目标的外部 IP 伪装 pod IP。 更改配置是在 ip-masq-agent 的 ConfigMap 中的nonMasqueradeCidrs列表中完成的。

其工作方式是,对于非伪装nonMasqueradeCidrs列表中的IP 的每个传出请求都不会进行IP 伪装。 所以请求似乎不是来自节点 IP,而是来自 pod IP。 然后,Cloud NAT 网关/路由器会自动对这个内部 IP 进行 NAT。 结果是该请求似乎源自云 NAT 路由器的(稳定)IP。

资料来源:

这可能对某人有帮助:

您可以简单地使用 TF 11版本运行此 terraform 脚本。 它将创建 VM 并将其用作 NAT 网关并通过它路由所有公共 VM 流量。

https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/master/examples/gke-nat-gateway

对于生产用例,还有 HA 设置:

https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/master/examples/ha-nat-gateway

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM