Syl*_*ain 12 nat google-cloud-platform google-kubernetes-engine
我想使用Cloud NAT设置 NAT 网关,以便公共 GKE 集群中的 VM/Pod 使用静态 IP 地址。
我面临的问题是 NAT 网关似乎只在 VM 没有其他选项时才使用,即:
仅当流量没有其他匹配的路由或路径时,GCP 才会使用 Cloud NAT 转发流量。
但在公共 GKE 集群的情况下,VM 具有临时外部 IP,因此它们不使用网关。
根据文档:
如果在 VM 的接口上配置外部 IP [...] NAT 将不会对此类数据包执行。但是,分配给接口的别名 IP 范围仍然可以使用 NAT,因为它们无法使用外部 IP 访问 Internet。
和
通过此配置,您可以通过 SSH 直接连接到 GKE 虚拟机,同时让 GKE pod/容器使用 Cloud NAT 访问互联网。
这就是我想要的,但我看不到这里究竟要设置什么。
这意味着什么alias IP ranges assigned to the interface can still use NAT以及如何设置?
小智 7
将 google 的 Cloud NAT 与公共 GKE 集群结合使用是可行的!
首先,需要使用保留的外部 IP 设置云 NAT 网关和路由器。
完成后,ip-masq-agent需要更改配置,以免将 Pod IP 伪装为作为集群内部请求目标的外部 IP。更改配置是在nonMasqueradeCidrsip-masq-agent 的 ConfigMap 列表中完成的。
其工作原理是,对于列表中 IP 的每个传出请求,都nonMasqueradeCidrs不会进行 IP 伪装。所以请求似乎不是来自节点IP,而是来自Pod IP。然后,Cloud NAT 网关/路由器会自动对该内部 IP 进行 NAT。结果是请求似乎源自云 NAT 路由器的(稳定)IP。
资料来源:
这里的想法是,如果您对集群使用本机 VPC(Ip 别名),那么您的 pod 在路由出集群时将不会使用 SNAT。如果没有 SNAT,Pod 将不会使用节点的外部 IP,因此应使用 Cloud NAT。
不幸的是,目前情况并非如此。虽然 Cloud NAT 仍处于 Beta 阶段,但某些设置尚未完全到位,因此即使使用 IP 别名,Pod 仍在使用 SNAT。由于对节点 IP 进行了 SNAT,Pod 将不会使用 Cloud NAT。
话虽这么说,为什么不使用私有集群呢?它更安全,并且可与 Cloud NAT 配合使用。您无法直接通过 SSH 访问节点,但是 A) 您可以在项目中创建一个堡垒虚拟机实例,该实例可以使用内部 IP 标志通过 SSH 访问,并且 B) 在大多数情况下您通常不需要通过 SSH 访问节点。
“不幸的是,目前情况并非如此。虽然 Cloud NAT 仍处于 Beta 版,但某些设置尚未完全到位,因此即使使用 IP 别名,Pod 仍在使用 SNAT。由于对节点 IP 的 SNAT,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。
我知道我们的文档中对此不是很清楚,我已经报告了这一点,以澄清并解释它应该如何工作。”
我回应要求他们按照文档进行工作,而不是更改他们的文档。我正在等待他们的更新......
| 归档时间: |
|
| 查看次数: |
3325 次 |
| 最近记录: |