Pod 的永久性 IP 地址简介

本文档介绍了如何通过为 Google Kubernetes Engine (GKE) 集群中的特定 Pod 分配一个或多个永久性 IP 地址来配置可靠的通信。对于需要高 可用性的应用,您还可以配置这些永久性 IP 地址以支持 快速故障切换或使用 基于健康检查的负载均衡

在某些情况下,当您运行自定义网络地址转换 (NAT) 解决方案时,您可能需要为传出和传入连接提供静态永久性 IP 地址,无论是在 NAT 解决方案启动连接时还是在接收连接时。您可能还需要控制分配给应用的 IP 地址,以管理应用与其他系统的交互方式或应用如何根据您的业务需求处理特定类型的请求。

默认情况下,Pod 将其接口 IP 地址用于出站流量。接口 IP 地址会在 Pod 重启或移动时更改。为了更好地控制路由通信,您可以在 GKE 中为 Pod 手动配置永久性 IP 地址。

这些 IP 地址可以是用于通过互联网进行通信的外部 IP 地址,也可以是用于在 Google Cloud网络内进行通信的内部 IP 地址。您可以使用 Google 提供的 IP 地址,也可以使用自备 IP 地址 (BYOIP)。

通过在 GKE 中为 Pod 配置永久性 IP 地址,您可以映射应用和业务逻辑,以允许特定 Pod 向任何永久性 IP 地址发送流量或从任何永久性 IP 地址接收流量。

下图说明了具有多个网络接口的 Pod 如何使用次要网络中的永久性 IP 地址,同时仍在默认网络上通信:

多网络架构
Multi-network-architecture

术语和概念

本页面使用以下概念:

基于健康检查的负载均衡

如果您想将来自永久性 IP 地址的流量分配给多个与特定标签选择器匹配的活跃 Pod,请使用基于健康检查的负载均衡。此功能使用您创建的区域级健康检查来持续监控 Pod,并确保流量仅路由到健康端点。您还可以为永久性 IP 地址配置备用(备份)Pod。 只有当所有主要活跃 Pod 的健康检查都失败时,GKE 才会自动将流量分配给这些备用 Pod。此配置可防止单个 Pod 在发生故障时过载,并确保服务持续可用。

网关类

网关类,用于管理永久性 IP 地址分配,分为 以下类:

  • gke-persistent-regional-external-managed,用于外部 IP 地址
  • gke-persistent-regional-internal-managed,用于内部 (Google Cloud-only) IP 地址
  • gke-persistent-fast-regional-external-managed,用于具有快速故障切换功能的外部 IP 地址
  • gke-persistent-fast-regional-internal-managed,用于具有快速故障切换功能的内部 (Google Cloud) IP 地址

以下网关类适用于基于健康检查的负载均衡:

  • gke-passthrough-lb-internal-managed,用于在多个 Pod 之间共享的内部(Google Cloud-仅限) 永久性 IP 地址。
  • gke-passthrough-lb-external-managed,用于在多个 Pod 之间共享的外部永久性 IP 地址。

    网关类适用于特定区域。网关类提供基本 IP 地址管理,专注于第 3 层 (L3) 网络路由。

下表比较了每个网关类的功能:

功能 gke-persistent-* 网关类 gke-passthrough-lb-* 网关类
主要目标 单个工作负载的永久性 IP 地址。 跨多个工作负载进行负载均衡。
Pod 映射 1:1(路由到最近创建的匹配 Pod)。 1:N(将流量分配给所有健康状况良好的匹配 Pod)。
健康检查 不支持用于路由决策。 必需(使用区域级健康检查)。
备份 Pod 不支持。 支持(使用备用 Pod 进行故障切换)。
故障切换速度 标准或快速(使用 *-fast-* 类)。 可通过健康检查参数进行配置

网关对象

网关对象——充当管理和配置永久性 IP 地址的中心点。GKE 中的网关对象可管理一组永久性 IP 地址。它们列出这些地址,并定义有关如何将这些 IP 地址分配给 GKEIPRoute 的规则。

监听器

监听器是 GKE 网关配置的一部分,用于控制网关命名空间中的哪些 Pod 可以使用网关持有的永久性 IP 地址。借助监听器,您可以自定义访问权限以实现灵活性和安全性。每个监听器都需要唯一的名称,并且允许您按命名空间(全部、基于标签或仅网关的命名空间)过滤访问权限。

GKEIPRoute 对象

GKEIPRoute 对象是一种自定义资源,您可以将其配置成向 GKE 集群中的特定 Pod 分配永久性 IP 地址。您可以使用 GKEIPRoute 对象的状态部分来监控永久性 IP 地址设置,该设置通过以下字段提供关键信息:

  • Pod

    Pod 字段显示与永久性 IP 地址关联的 Pod 的确切名称。一个 Pod 可以使用多个永久性 IP 地址。

  • 条件

    “条件”字段会通知您的外部 IP 地址设置是否正常工作,并且有助于诊断配置无效时的问题。有四种条件:

    • Accepted :表示 GKEIPRoute 资源规范是否有效。如果您的配置有错误,则 Accepted 条件为 False,并附带原因。
    • GCPReady: 表示 Google Cloud 已准备好所有必要 资源。资源预配过程中的错误会体现在 GCPReady 条件的状态中。 Google Cloud
    • DPV2Ready :表示数据路径编程的状态,例如数据路径已准备就绪并已编程以允许在配置的永久性 IP 地址上进行网络连接。
    • Ready :表示您的永久性 IP 地址设置有效且正常运行。只要您已将应用配置为使用永久性 IP 地址,就可以通过该地址访问 Pod。当所有其他三个前置条件也为 True 时,此字段设置为 True
  • nodeSelector

    使用快速故障切换时,您必须使用 nodeSelector 字段来指定哪些节点预配置为快速故障切换。这有助于确保在发生故障切换时,您可以在具有永久性 IP 地址的指定节点上快速将新 Pod 上线。请确保您在这些节点上安排具有永久性 IP 地址的 Pod。通常,您可以使用 Pod 的 nodeSelector 来匹配节点上的标签。配置快速故障切换时,请使用 nodeSelector 字段,并确保指定的标签选择的节点不超过 64 个。

以下字段仅适用于基于健康检查的负载均衡:

  • loadBalancing:指定监控 Pod 健康状况的区域级健康检查名称。
  • backupPodSelector:定义当所有主要 Pod 运行状况不佳时接收流量的 Pod 集。

回应模式

“回应模式”决定了当链接到永久性 IP 地址的 Pod 发生变化时(例如跨节点移动或新创建的匹配 Pod 可用时)系统的行为。您可以使用回应模式来确保您的永久性 IP 地址始终可用,即使您的 Pod 发生变化。

反应模式包括:

  • ReadyCondition

    ReadyCondition 模式下,永久性 IP 地址系统会优先考虑 Pod 健康状况。永久性 IP 地址系统仅将 IP 地址分配给匹配您指定的标签且已通过 Kubernetes 健康探测的 Pod,发出信号来表明其 Ready 状态为 True。此模式非常适合那些需要接收永久性 IP 地址的 Pod 完全准备好处理传入和传出流量的应用。

  • Exists

    Exists 模式会优先考虑 Pod 的存在。如果 Pod 与配置中的标签匹配且已被安排到集群中的特定节点上,则永久性 IP 地址将关联到该 Pod。这意味着 Pod 存在且具有指定的运行位置。此模式非常适合快速分配永久性 IP 地址优先于严格就绪的场景,或者即时连接可能比完整的健康运行状况更重要的环境,例如开发环境和测试环境。

StatefulSet

StatefulSet 是一种 Kubernetes 工作负载,专为需要稳定标识符和永久性存储空间的应用而设计。StatefulSet 中的 Pod 具有可预测的名称(例如:my-app-0、my-app-1)。

部署

Deployment 是一种用于管理无状态应用的 Kubernetes 工作负载,其中 Pod 通常可以互换。Deployment 中的 Pod 名称不是完全可预测的。

使用场景

GKE Pod 的永久性 IP 地址适合在 GKE 上运行网络相关应用的网络和安全服务提供商的多种使用场景。

GKE Pod 的永久性 IP 地址适合以下使用场景:

  • 通过 NAT 进行控制 :通过为运行网络功能的 Pod 分配永久性 IP 地址,您可以对用于出站流量的来源 IP 地址进行精细控制。这样,您就可以集成专有 NAT 逻辑。
  • 专用 IP 地址池 :借助专用 IP 地址,您可以将特定地址与各个 5G 核心 Pod 匹配,从而确保与专用供应商软件兼容。
  • 可靠的流量 :由于返回流量需要通过相同的网络功能路由回来,永久性 IP 地址可确保外部系统识别并响应正确的 Pod,而不会中断通信。
  • 对时间敏感的应用实现高可用性 :对于具有严格正常运行时间要求的应用(例如电信行业中的应用),您可以将永久性 IP 地址与快速故障切换搭配使用,以便在发生故障时快速将流量重定向到健康状况良好的 Pod,从而将停机时间缩短到仅几秒钟。
  • 负载分配 :当您使用基于健康检查的负载均衡时,GKE 会将流量分配给多个活跃 Pod,以避免单个实例过载。如果没有可用的健康状况良好的 Pod,您可以在不同的命名空间或节点中配置备份 Pod。

福利

GKE Pod 的永久性 IP 地址具有以下优势:

  • 外部身份 :如果为 Pod 提供外部永久性 IP 地址,则即使该 Pod 重启或在集群内移动,外部系统也可以持续访问该 Pod。这对于需要外部可发现的端点的服务非常有用。
  • 可靠通信 :依赖具有特定 IP 地址的其他资源的应用可以使用永久性 IP 地址可靠地建立连接。永久性 IP 地址对于旧版系统或具有硬编码 IP 地址依赖项的应用非常重要。
  • 旧版迁移:旧版迁移可帮助迁移在过渡过程中依赖于特定 IP 地址的应用。
  • BYOIP:借助 BYOIP,您可以在 GKE 集群中使用您已拥有的特定 IP 地址 范围来保持对它们的控制。
  • 提高应用正常运行时间:借助快速故障切换功能,您可以 显著提高关键应用的正常运行时间,方法是在 Pod 发生故障时将 停机时间缩短到仅几秒钟。
  • 通过自动故障切换实现高可用性:当主要 Pod 的健康检查失败时,通过自动将流量重定向到健康状况良好的备用 Pod 来实现服务可用性 。

后续步骤