本页面介绍了如何通过直接为 Google Kubernetes Engine (GKE) 集群内的特定 Pod 分配一个或多个永久性(静态)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 地址接收流量。
术语和概念
本页面使用以下概念:
网关类
网关类——网关用于管理永久性 IP 地址分配,分为以下类:
- gke-persistent-regional-external-managed,用于外部 IP 地址
gke-persistent-regional-internal-managed,用于内部(仅限 Google Cloud)IP 地址
网关类适用于特定区域。网关类提供基本 IP 地址管理,专注于第 3 层 (L3) 网络路由。
网关对象
网关对象——充当管理和配置永久性 IP 地址的中心点。GKE 中的网关对象管理永久性 IP 地址池。它们列出这些地址,并定义有关如何将这些 IP 地址分配给 GKEIPRoute
的规则。
监听器
监听器是 GKE 网关配置的一部分,用于控制网关命名空间中的哪些 Pod 可以使用网关持有的永久性 IP 地址。借助监听器,您可以自定义访问权限以实现灵活性和安全性。每个监听器都需要唯一的名称,并且允许您按命名空间(全部、基于标签或仅网关的命名空间)过滤访问权限。
GKEIPRoute 对象
GKEIPRouteGKEIPRoute 对象是一种自定义资源,您可以将其配置成向 GKE 集群中的特定 Pod 分配永久性 IP 地址。您可以使用 GKEIPRoute
对象的状态部分来监控永久性 IP 地址设置,该设置通过以下字段提供关键信息:
Pod
Pod 字段显示与永久性 IP 地址关联的 Pod 的确切名称。一个 Pod 可以使用多个永久性 IP 地址。
条件
“条件”字段会通知您的外部 IP 地址设置是否正常工作,并且有助于诊断配置无效时的问题。有以下四个条件:
Accepted
:表示GKEIPRoute
资源规范是否有效。如果您的配置有错误,则Accepted
条件为False
,并附带原因。GCPReady
:表示 Google Cloud 已准备所有必要的资源。Google Cloud 资源预配过程中的错误会体现在GCPReady
条件的状态中。DPV2Ready
:表示数据路径编程的状态,例如数据路径已准备就绪并已编程以允许在配置的永久性 IP 地址上进行网络连接。Ready
:表示您的永久性 IP 地址设置有效且正常运行。只要您已将应用配置为使用永久性 IP 地址,就可以通过该地址访问 Pod。当所有其他三个前置条件也为True
时,此字段设置为True
。
回应模式
“回应模式”决定了当链接到永久性 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 地址优先于严格就绪的场景,或者即时连接可能比完整的健康运行状况更重要的环境,例如开发环境和测试环境。
StatefulSets
StatefulSets 是一种 Kubernetes 工作负载,专为需要稳定标识符和永久性存储空间的应用而设计。StatefulSet 中的 Pod 具有可预测的名称(例如:my-app-0、my-app-1)。
部署
Deployment 是一种用于管理无状态应用的 Kubernetes 工作负载,其中 Pod 通常可以互换。Deployment 中的 Pod 名称不是完全可预测的。
使用场景
GKE Pod 的永久性 IP 地址适合在 GKE 和 GKE Enterprise 上运行网络相关应用的网络和安全服务提供商的多种使用场景。
GKE Pod 的永久性 IP 地址适合以下使用场景:
- 通过 NAT 进行控制:通过为运行网络功能的 Pod 分配永久性 IP 地址,您可以对用于出站流量的来源 IP 地址进行精细控制。这样,您就可以集成专有 NAT 逻辑。
- 专用 IP 地址池:借助专用 IP 地址,您可以将特定地址与各个 5G 核心 Pod 匹配,从而确保与专用供应商软件兼容。
- 可靠的流量:由于返回流量需要通过相同的网络功能路由回来,永久性 IP 地址可确保外部系统识别并响应正确的 Pod,而不会中断通信。
优势
GKE Pod 的永久性 IP 地址具有以下优势:
- 外部身份:如果为 Pod 提供外部永久性 IP 地址,则即使该 Pod 重启或在集群内移动,外部系统也可以持续访问该 Pod。这对于需要外部可发现的端点的服务非常有用。
- 可靠通信:依赖具有特定 IP 地址的其他资源的应用可以使用永久性 IP 地址可靠地建立连接。永久性 IP 地址对于旧版系统或具有硬编码 IP 地址依赖项的应用非常重要。
- 旧版迁移:旧版迁移可帮助迁移在过渡过程中依赖于特定 IP 地址的应用。
- BYOIP:借助 BYOIP,您可以在 GKE 集群中使用您已拥有的特定 IP 地址范围来保持对它们的控制。