我有一个带有多个节点池的私有 gke 集群,并且如果我创建一个 Cloud NAT 似乎只能为整个集群做阅读文档。有没有办法只配置集群的一个子集以访问通过 NAT 发送流量?我四处寻找,似乎无法将网络、IP 范围或子网分配给节点池,所以我不确定这是否可行。
3 回答
例如,您可以查看Google 的旧 nat gw 解决方案,基于 VM 实例而不是 Cloud NAT。做你需要的可能的方法如下:
- 使用标签创建专用GKE 节点池
- 使用上面的 terraform 示例或手动创建 NAT VM 实例
- 使用创建的 NAT 虚拟机实例作为目标创建默认路由,并将此路由应用于带有用于创建 GKE 节点池的标签的实例
引用的 nat gw 解决方案使用类似的技术,但它使用整个集群标签而不是单独的节点池标签将路由应用于所有节点池。
您可以使用ip-masquerade-agent为特定节点池设置Cloud NAT。
要将代理限制为特定的节点池,您需要使用节点亲和性和/或污点和容忍度
首先,我们必须概述您需要设置的内容。
成分:
1.) NAT 网关实例
2.) 网络标签和 VPC 路由
3.) 带有网络标签的节点池。
对于 1 和 2,您需要以与我们的GCE NAT 教程中所示类似的方式将另一个 GCE VM 实例配置为 NAT 网关。这应该会导致创建 NAT 实例和 VPC 路由,将网络流量从标记的资源引导到 NAT。
确保使用特定于将使用实例作为 NAT 的节点池的标签。
对于 3. 为了将节点池指向 NAT 实例,您必须在节点上使用正确的网络标签,以便正确路由来自这些节点的流量。
带标签的节点/节点池 -> VPC 路由 -> NAT 实例 -> 互联网
为了将其应用于整个节点池,您需要在节点池级别应用标签,以便将其级联到底层节点,您可以在此处查看如何执行此操作。不幸的是,这对于现有的节点池是不可能的,因此您必须使用相应的标签删除并重新创建现有的节点池,如下所示:
gcloud 容器节点池创建代理 --cluster=prod-cluster --tags=NatRouteA