了解 GKE 中的 IP 地址

如需构建可伸缩且安全的 Google Kubernetes Engine (GKE) 集群,您必须有效地管理 IP 地址。本文档全面介绍了 GKE 如何使用 IP 地址进行集群通信、支持的网络模型,以及有效管理 IP 地址的最佳实践。

本文档适用于为组织设计和架构网络的云架构师和网络专家。如需详细了解 中的常见角色和示例任务 Google Cloud,请参阅常见的 GKE Enterprise 用户角色和 任务。

在继续操作之前,请确保您熟悉以下概念:

IP 地址如何连接 GKE 组件

GKE 基于 Kubernetes 网络模型构建,该模型要求每个组件都具有不同的 IP 地址才能进行通信。以下部分介绍了 GKE 如何为核心集群组件分配和使用 IP 地址:

  • 节点:GKE 会为每个节点(即 Compute Engine 虚拟机实例)分配一个内部 IP 地址,该地址来自与其节点池关联的 子网的主要 IP 地址范围。此 IP 地址可实现节点与 Kubernetes 控制平面之间的通信。节点还可以具有外部 IP 地址,以便进行出站互联网访问。

  • Pod:按照 Kubernetes“每个 Pod 一个 IP”模型,GKE 会为每个 Pod 分配一个唯一的 IP 地址,该地址来自分配给节点的 Pod CIDR 范围。在 GKE 中,VPC 网络以原生方式路由 Pod IP 地址。这种内置的可路由性可实现 Pod 之间的直接通信(即使跨不同节点也是如此),而无需进行网络地址转换 (NAT)。单个 Pod 中的所有容器共享同一个 IP 地址,并且可以通过 localhost 进行通信。

  • Service:GKE 会从专用次要 IP 地址范围为每个 Kubernetes Service 分配一个稳定的 虚拟 IP 地址(ClusterIP)。此 ClusterIP 为一组 Pod 提供了一个可靠的单一端点。当您向 ClusterIP 发送流量时,GKE 会自动将流量负载均衡到该 Service 中的健康 Pod。

  • 控制平面:在专用集群中,控制平面位于 Google 管理的租户项目中,并使用自己的内部 IP 地址范围。 此租户项目连接到您的 VPC 网络,从而实现控制平面与集群 VPC 网络中的节点之间的安全通信。此连接通常使用 Private Service Connect。

  • 负载均衡器:如需将应用公开给互联网或在 VPC 网络内公开应用,您可以将 GKE 配置为使用Google Cloud 负载均衡器。外部负载均衡器使用公共 IP 地址。 内部负载均衡器使用 VPC 网络的主要子网范围中的内部 IP 地址。

下表总结了 GKE 如何为集群组件分配 IP 地址:

组件 IP 地址的分配方式
节点 GKE 会为每个节点分配一个内部 IP 地址。 GKE 会从与节点的节点池关联的子网的主要 IP 地址 范围分配此 IP 地址。此子网可以 是集群的默认子网,也可以是额外的子网。
Pod GKE 会为每个 Pod 分配一个唯一的 IP 地址,该地址来自分配给其节点的 Pod CIDR 范围。
Service (ClusterIP) GKE 会从集群 VPC 网络中的专用次要 IP 地址 范围为每个 Service 分配一个稳定的虚拟 IP 地址 (ClusterIP)。
控制平面 在专用集群中,GKE 控制平面在 Google 管理的租户项目中拥有自己的 内部 IP 地址范围。此 租户项目连接到您的 VPC 网络,通常 使用 Private Service Connect。
负载均衡器 外部负载均衡器使用公共 IP 地址。内部负载均衡器使用集群子网的主要 IP 地址范围中的内部 IP 地址。

Kubernetes IP 地址分配和 GKE 实现

如需有效使用 GKE,您必须了解 抽象 Kubernetes 网络模型与 GKE 如何实现 此模型之间的区别 Google Cloud。

  • Kubernetes IP 地址分配模型:开源 Kubernetes 项目 规定,每个 Pod 都会收到一个唯一的 IP 地址。所有 Pod IP 地址都可以直接通信,而无需进行网络地址转换 (NAT)。这种方法有助于确保 Pod 可以使用其分配的 IP 地址相互访问的平面网络空间。

  • GKE IP 地址分配实现:GKE 通过与 VPC 原生网络集成,在 Google Cloud 实现 Kubernetes IP 地址分配模型。创建 Pod 时,GKE 会从 VPC 别名 IP 地址范围 分配其 IP 地址。这样,每个 Pod 的 IP 地址都可以在整个 VPC 网络中以原生方式路由。这不仅实现了 Pod 之间的直接通信,还实现了与 Compute Engine 实例和 Cloud SQL 数据库等其他 Google Cloud 资源的直接通信。同样,GKE 在 VPC 网络中管理 Kubernetes Service IP 地址(例如 ClusterIP)。当您创建用于外部公开的 LoadBalancer 服务时,GKE 会预配Google Cloud 负载均衡器。这些负载均衡器使用 VPC 网络中的公共或内部 IP 地址。GKE 使用 Google Cloud强大的 IP 地址分配和网络基础架构,以 可伸缩且安全的方式 实现基于 Kubernetes IP 的网络概念。

GKE 网络模型:VPC 原生集群

GKE 使用 VPC 原生网络(这是一项核心 Google Cloud 功能)实现 Kubernetes 网络模型。

此模型使用别名 IP 地址范围。在 VPC 原生 集群中, Kubernetes 会将 Pod IP 地址配置为节点 虚拟网络接口上的别名 IP 地址范围。

此实现具有以下几个主要优势:

  • VPC 原生可路由性 :Pod IP 地址可以直接在 VPC 网络中路由。这简化了网络 设计,并实现了 Pod 与 其他 Google Cloud 资源(例如 Compute Engine 实例和 Cloud SQL 实例)之间的直接、低延迟通信。
  • 节省路由配额 :通过为 Pod 使用别名 IP 地址,GKE 不会为每个节点创建自定义静态路由。这节省了 VPC 路由配额,与旧版基于路由的集群相比有了显著改进,对于大规模部署非常重要。
  • 增强安全性 :VPC 原生可路由性让您可以将 VPC 原生防火墙规则直接应用于 Pod 流量,从而增强网络级安全性。

VPC 原生是所有 GKE 集群的默认和推荐网络模式。

为何有效的 IP 地址管理至关重要

为确保集群可以扩缩并保持应用运行状况,您必须有效地规划 IP 地址空间:

  • 确保可伸缩性:有效地规划节点、Pod 和 Service IP 地址范围,以防止 IP 地址耗尽,并允许集群扩缩,而无需进行破坏性的网络重新架构。
  • 保证可靠性:避免您的 GKE 集群与其他网络(例如通过 Cloud VPN 连接的本地 环境)之间的 IP 地址范围重叠。重叠的范围可能会导致路由冲突、不可预测的行为和服务中断。
  • 加强安全性:有效地管理 IP 地址以加强 网络安全性。定义 Kubernetes 网络政策以控制 Pod 之间的流量,并在网络级配置防火墙规则以实现工作负载隔离。

为集群选择 IP 地址分配模型

GKE 支持多种网络栈配置,以满足您的网络要求,包括仅 IPv4、双栈(IPv4 和 IPv6)以及即将推出的仅 IPv6 选项。

仅 IPv6(单栈)

这是标准且最常见的配置,其中所有集群组件都使用 IPv4 地址。即使在仅 IPv4 模型中,GKE 也提供了灵活性:

  • RFC 1918 专用 IP 地址:为集群使用 RFC 1918 专用 IP 地址范围(例如 10.0.0.0/8)。
  • 以非公开方式使用的公共 IP 地址 (PUPI):如果您的组织缺乏 足够的专用 IP 地址空间,您可以在 VPC 网络内使用公共 IP 地址范围 以供内部使用。使用 PUPI 时,您必须配置 IP 伪装 代理。此代理会对来自 Pod 的出站流量执行来源网络地址转换 (SNAT)。如果没有 SNAT,返回到使用 PUPI 的 Pod 的流量将通过公共互联网路由,并且会失败。IP 伪装代理通过将出站数据包的来源 IP 地址从 Pod 的 PUPI 更改为节点的内部 IP 地址来防止这种情况。这种方法有助于确保返回流量正确路由回节点,然后转发到原始 Pod。

双栈(IPv4 和 IPv6)

双栈集群同时使用 IPv4 和 IPv6 协议。GKE 会为双栈集群中的节点、Pod 和 Service 同时分配 IPv4 和 IPv6 地址。此模型非常适合:

  • 促进向 IPv6 的逐步过渡。
  • 确保与支持 IPv6 的工作负载以及现有的仅 IPv4 客户端和服务兼容。

您可以在创建集群时启用双栈网络,也可以将现有的单栈集群更新为双栈。

后续步骤