本页面介绍 Service 清单的参数,这些参数控制 LoadBalancer Service 行为和配置。在阅读本页面内容之前,请确保您熟悉 Google Kubernetes Engine (GKE) LoadBalancer Service 概念。
Service 参数
GKE 支持 LoadBalancer Service 的以下参数。
| 参数 | Service 字段和说明 | 内部 | 外部 | 版本支持 |
|---|---|---|---|---|
| 内部直通式网络负载均衡器 |
指示 GKE 创建内部直通式网络负载均衡器。 如果满足以下任一条件,负载均衡器会使用
在所有其他情况下,负载均衡器都会使用实例组后端。如需了解详情,请参阅节点分组。 |
如果您的集群使用 GKE 1.33.1-gke.1779000 版或更高版本,并且启用了 GKE 子集,我们建议您使用 |
||
| 基于后端服务的区域级外部直通式网络负载均衡器 |
指示 GKE 创建区域级外部直通式网络负载均衡器。 如果存在以下任一情况,负载均衡器会使用
在所有其他情况下,负载均衡器都会使用实例组后端。如需了解详情,请参阅节点分组。 |
如果您的集群使用 GKE 1.33.1-gke.1779000 至 1.36 版,我们建议您使用 |
||
| 加权负载均衡 | networking.gke.io/weighted-load-balancing: "pods-per-node"
与服务 Pod 较少的节点相比,允许服务 Pod 较多的节点接收更大比例的新连接。 |
GKE 1.31.0+ | ||
| 内部流量政策 | spec.internalTrafficPolicy
如果设置为 运行 GKE Dataplane V2 的集群不支持此参数。 |
GKE 1.22+ | ||
| 外部流量政策 | spec.externalTrafficPolicy
控制哪些节点虚拟机通过负载均衡器健康检查,以及数据包被路由到集群中的就绪型服务 Pod。此外,还控制在启用 GKE 子集时如何将节点分组到 如需了解详情,请参阅 LoadBalancer Service 概念。 |
GKE 1.14+(对于 Windows 节点池,则为 1.23.4-gke.400+)。 | ||
| 可用区级亲和性 | spec.trafficDistribution: PreferSameZone
为内部 LoadBalancer Service 启用可用区级亲和性。可用区级亲和性用于控制内部直通式网络负载均衡器在可用区匹配时针对兼容的客户端将传入流量路由到哪个可用区。如需使用可用区级亲和性,您必须启用 GKE 子集化(从 GKE 1.36 版开始默认启用)。 如需了解详情,请参阅可用区级亲和性和流量分配。 | 在 GKE 1.33.3-gke.1392000 及更高版本中处于预览阶段。在 GKE 1.36 版及更高版本中正式发布。 | ||
| 健康检查端口 | spec.healthCheckNodePort
为 LoadBalancer 服务部署负载均衡器健康检查。仅当 |
所有受支持的版本。 | ||
| 防火墙规则和来源 IP 地址许可名单 | spec.loadBalancerSourceRanges
在 GKE 和 VPC 网络中配置可选的防火墙规则,以仅允许特定来源范围。
|
所有受支持的版本。 | ||
| 静态 IP 地址 |
指定分配给负载均衡器转发规则的静态 IPv4 地址和/或静态 IPv6 地址范围。如需了解重要的配置要求和实现详情,请参阅共享公共 IP 地址的注意事项。 |
|
||
| Network Service Tiers | cloud.google.com/network-tier
指定 GKE 用于外部转发规则和 IP 地址的 Network Service Tiers。注释有效值为 |
GKE 1.19 及更高版本。 | ||
| 自定义子网 | networking.gke.io/load-balancer-subnet |
(仅适用于 IPv6) |
GKE 1.29 及更高版本。如需了解其他要求,请参阅自定义子网注解。 | |
| 自备 IPv6 地址 (BYOIPv6) | networking.gke.io/ip-collection-v6: "projects/PROJECT_ID/regions/REGION/publicDelegatedPrefixes/SUB_PREFIX_NAME"
指定 对于内部 LoadBalancer Service,通过使用 |
(仅适用于单栈 IPv6) |
GKE 1.37.1-gke.2097000 版及更高版本 | |
| 全球访问权限 | networking.gke.io/internal-load-balancer-allow-global-access: "true"
允许 VPC 网络或连接网络中任意区域的客户端访问转发规则的 IP 地址。 |
在 GKE 1.16+ 中处于预览阶段。现已在 GKE 1.17.9-gke.600+ 中全面推出。 | ||
| 所有端口 | 如果在 |
GKE 版本 1.18.19-gke.1400 或更高版本 | ||
| ipFamilyPolicy |
定义 GKE 如何将 IP 地址分配给 Service。
您可以将 如需在双栈集群中创建单栈 IPv6 LoadBalancer Service,请将此字段的值设置为 |
1.29 版或更高版本的 GKE 集群支持 LoadBalancer Service 的双栈网络。
单栈 IPv6 LoadBalancer Service 在 GKE 1.36.0-gke.2646000 版及更高版本中提供预览版。 |
||
| ipFamilies(可选) |
定义 IP 地址系列以分配单栈或双栈 Service。请使用以下任何值:
对于双栈集群中的单栈 IPv6 LoadBalancer Service,请将此字段的值设置为 |
1.29 版或更高版本的 GKE 集群支持 LoadBalancer Service 的双栈网络。
在 GKE 1.36.0-gke.2646000 版及更高版本中,单栈 IPv6 LoadBalancer Service 处于预览阶段。 |
运行状况检查端口
如负载均衡器健康检查中所述,GKE 在创建区域级外部直通式网络负载均衡器或内部直通式网络负载均衡器时始终会部署负载均衡器健康检查。
能否设置 healthCheckNodePort 参数取决于以下 externalTrafficPolicy 配置:
externalTrafficPolicy |
健康检查端口 |
|---|---|
Cluster |
您不能使用 |
Local |
您可以使用 |
防火墙规则和来源 IP 地址许可名单
除非您已将集群配置为跳过为 LoadBalancer Service 创建 VPC 防火墙规则,否则 GKE 会为每个 Service 创建入站流量允许 VPC 防火墙规则。
每条自动创建的防火墙规则都具有以下特征:
- 防火墙规则的方向为入站,其操作为允许。 Google Cloud中的隐式拒绝入站流量防火墙规则意味着 GKE 在创建入站流量防火墙规则时使用许可清单模型。
- GKE 将防火墙规则的协议和目标端口设置为在服务的
spec.ports[]列表中指定的协议和目标端口。 - GKE 通过将目的地参数明确设置为 LoadBalancer 的虚拟 IP 地址(负载均衡器的转发规则),来为 LoadBalancer Service 配置防火墙规则。
- GKE 会设置防火墙规则的目标参数,以包含集群的所有节点。
- 如果 Service 包含
spec.loadBalancerSourceRanges[],则 GKE 会将防火墙规则的来源参数设置为该列表中的 IP 地址。此外,GKE 还会配置节点操作系统内的路由和规则,以使用kube-proxy和iptables(在不使用 GKE Dataplane V2 的集群上)或cilium-agent和 eBPF 规则(在具有 GKE Dataplane V2 的集群上)来限制负载均衡流量的来源 IP 地址。如果 Service 不包含loadBalancerSourceRanges[],则 GKE 会将防火墙规则的来源参数设置为所有 IP 地址(0.0.0.0/0)。 - 对于 IPv6 LoadBalancer Service,请在
spec.loadBalancerSourceRanges[]字段中指定 IPv6 CIDR 范围(例如2001:db8::/32范围)。GKE 会为 Service 的 IPv6 转发规则创建单独的防火墙规则。如果 Service 不包含loadBalancerSourceRanges[]字段,则 GKE 会将该防火墙规则的来源参数设置为所有 IPv6 地址(::/0)。
静态 IP 地址
您可以创建静态 IP 地址,并配置 GKE 以将该静态地址分配给负载均衡器的转发规则。使用静态 IP 地址有助于确保即使您对 LoadBalancer Service 进行更改,负载均衡器的 IP 地址也会保持不变。如果不使用静态 IP 地址,则当您更新 LoadBalancer Service 时,GKE 可能会为负载均衡器转发规则分配不同的 IP 地址。转发规则 IP 地址与 Service 的 spec.clusterIP 地址不同。Service 的 ClusterIP 地址从不会在更新 LoadBalancer Service 时发生更改。
静态 IP 地址参数
如需指示 LoadBalancer Service 使用静态 IP 地址,请使用 spec.loadBalancerIP 参数或 networking.gke.io/load-balancer-ip-addresses 注解。在 GKE 1.29 及更高版本中,如果 Service 清单同时包含参数和注解,则注解优先于 spec.loadBalancerIP。
| 参数或注解以及值 | 要求和功能 |
|---|---|
spec.loadBalancerIP:IPv4_ADDRESS
|
您可以为仅限 IPv4 的内部 LoadBalancer Service 指定静态内部 IPv4 地址。您可以为仅限 IPv4 的外部 LoadBalancer Service 指定静态外部 IPv4 地址。此参数适用于所有受支持的 GKE 版本。 |
networking.gke.io/load-balancer-ip-addresses:IP_ADDRESS_RESOURCE_NAME
|
您可以为仅限 IPv4、仅限 IPv6 和双栈内部和外部 LoadBalancer Service 指定静态 IPv4 地址和/或静态 IPv6 地址范围。该注解需要 GKE 1.29 或更高版本并具有以下其他要求:
|
共享公共 IP 地址的注意事项
如果每个负载均衡器的转发规则都使用 IP 地址、协议、端口指定和 Network Service Tiers 指定(如此部分中的此表所示)的唯一组合,则两个或更多 LoadBalancer Service 可以引用同一静态 IP 地址。此外:
静态 IPv6 地址实际上是
/96IPv6 地址范围,但 GKE 仅将节点配置为接受/96范围内第一个 IPv6 地址 (/128) 上的数据包。如需使两个或更多内部 LoadBalancer Service 使用相同的内部 IPv4 地址,必须创建用于
SHARED_LOADBALANCER_VIP的静态 IP 地址。
| 内部 LoadBalancer Service | 外部 LoadBalancer Service | |
|---|---|---|
| 端口指定 | 内部直通式网络负载均衡器的转发规则支持最多五个个别端口号,也可以配置为使用所有端口。 当内部 LoadBalancer Service 指定了超过 5 个 具有相同 IP 地址和协议的转发规则不能有重叠的端口。这意味着,您无法创建多个共享同一 IP 地址、协议和端口的内部 LoadBalancer Service。例如:
如需了解详情,请参阅:使用公共 IP 地址的内部直通式网络负载均衡器转发规则。 |
对于运行 1.37 之前 GKE 版本的集群,如果 LoadBalancer Service 清单未将 用于基于目标池的区域级外部直通式网络负载均衡器的转发规则必须使用连续端口范围。连续端口范围包含 Service 所需的所有端口,不过也可能包含 Service 未使用的其他端口。例如,由基于目标池的区域级外部直通式网络负载均衡器提供支持的一个外部 LoadBalancer Service 在其 Service 清单中指定端口 80 和 443,而它使用的负载均衡器转发规则的端口范围是 80-443。此端口范围可防止其他外部 LoadBalancer Service 使用端口 80 和 443 中的任一端口以及 80 到 443 之间的任何端口号。 在 1.37 或更高版本中,GKE 默认会创建基于后端服务的区域级外部直通式网络负载均衡器。在早期版本中,如果 LoadBalancer Service 清单包含设置为 |
| Network Service Tiers | 无法配置 - 内部地址始终为高级层级。 | 可针对静态区域级外部 IPv4 地址进行配置。静态区域级外部 IPv6 地址范围只能在高级层级中创建。 静态外部 IP 地址的 Network Service Tiers 指定必须与以下任一项匹配:
项目的默认层级为高级层级,除非您以不同方式进行了配置。 |
IP 地址预留
GKE 不会预留使用 spec.loadBalancerIP 或 networking.gke.io/load-balancer-ip-addresses 注解配置的静态 IP 地址。这意味着,当您删除 Service 时,分配给 Service 的 IP 地址可以释放。
如需预留 IP 地址,您必须在项目中手动创建地址资源。静态 IP 地址必须具有以下属性:
- 仅属于区域级。
- 与集群位于同一区域。
- 与 LoadBalancer 服务位于同一 Network Service Tiers。
- 名称不使用 LoadBalancer 名称、
k8s-之类的前缀或服务的 UUID。
如果您自己不预留地址,项目日志可能会包含有关创建和很快移除的地址资源的条目。这是正常服务配置的一部分,应该在预期之内。
LoadBalancer 子网
您可以将内部 LoadBalancer Service 配置为使用与集群位于同一区域和 VPC 网络中的自定义子网中的临时或静态 IPv4 地址和/或 IPv6 地址范围。将自定义子网用于内部 LoadBalancer Service 可实现以下目的:
- 对同一 VPC 网络和区域中两个或更多 GKE 集群中的内部 LoadBalancer Service 所创建的内部直通式网络负载均衡器进行分组。
- 创建其内部直通式网络负载均衡器的 IPv4 地址与集群节点 IPv4 地址分开的内部 LoadBalancer Service。
- 创建其内部直通式网络负载均衡器的 IPv6 地址范围与集群节点和 Pod IPv6 地址分开的内部 LoadBalancer Service。如果集群的子网具有外部 IPv6 地址范围,则必须有一个自定义 LoadBalancer 子网为内部 LoadBalancer Service 提供支持。
您可以将外部 LoadBalancer Service 配置为使用与集群位于同一区域和 VPC 网络中的自定义子网中的临时或静态 IPv6 地址范围。使用自定义子网可创建其区域级外部直通式网络负载均衡器的 IPv6 地址范围与集群节点和 Pod IPv6 地址分开的外部 LoadBalancer Service。如果集群的子网具有内部 IPv6 地址范围,则必须有一个自定义 LoadBalancer 子网为外部 LoadBalancer Service 提供支持。
内部直通式网络负载均衡器和区域级外部直通式网络负载均衡器的 IPv6 地址通常来自 VPC 网络中的子网范围。对于 GKE 1.37.1-gke.2097000 及更高版本中的单栈 IPv6 外部 LoadBalancer Service,IPv6 地址可以改为来自 BYOIPv6 公共委派前缀。如果地址来自子网,则该子网的 IPv6 访问类型必须与您创建的负载均衡器类型匹配:内部 LoadBalancer Service 需要具有内部 IPv6 地址范围(包括从 BYOIPv6 前缀预配的子网)的子网,而外部 LoadBalancer Service 需要具有外部 IPv6 地址范围的子网。如需简要了解何时需要自定义 LoadBalancer 子网,请参阅 IPv6 LoadBalancer Service。
自定义子网注解
使用 networking.gke.io/load-balancer-subnet:
SUBNET_RESOURCE_NAME 注解可指示 LoadBalancer Service 使用自定义子网中的临时或静态 IP 地址,其中 SUBNET_RESOURCE_NAME 是自定义子网的名称。您可以使用此注解为仅限 IPv4、仅限 IPv6 或双栈内部 LoadBalancer Service 指定自定义子网,也可以为仅限 IPv6 或双栈外部 LoadBalancer Service 指定自定义子网。
如需使用 networking.gke.io/load-balancer-subnet 注解,您必须满足以下要求:
- 您的集群必须运行 GKE 1.29 版或更高版本。
- 如需为内部 LoadBalancer Service 指定自定义子网,您的集群必须启用 GKE 子集。在 1.36 版及更高版本中,GKE 子集化默认处于启用状态。
- 如需为外部 LoadBalancer Service 指定自定义子网,您必须配置基于后端服务的负载均衡器。在 GKE 1.37 及更高版本中,此配置是默认行为。在早期版本中,您必须在创建外部 LoadBalancer Service 时在 Service 清单中添加设置为
networking.gke.io/l4-regional-external值的spec.loadBalancerClass字段。 - 对于单栈 IPv6 集群(使用
--stack-type=ipv6标志创建),当负载均衡器访问权限类型与节点子网访问权限类型不同时,您必须使用此注解。例如,当您在节点子网使用INTERNALIPv6 访问权限类型 (ULA) 的集群上部署外部 LoadBalancer Service 时,或者在节点子网使用EXTERNALIPv6 访问权限类型 (GUA) 的集群上部署内部 LoadBalancer Service 时,请使用此注解。此注解指定的子网必须具有与相应负载均衡器类型匹配的 IPv6 访问权限类型(EXTERNAL或INTERNAL)。或者,外部 LoadBalancer Service 可以从 BYOIPv6 公共委托前缀(而非子网)获取其 IPv6 地址范围;在这种情况下,请勿使用此注解。
内部 LoadBalancer Service 的子网和 IPv4 地址
下表介绍了 IPv4 专用或双栈内部 LoadBalancer Service 的有效子网指定和 IPv4 地址组合。
静态 IPv4 地址
|
临时 IPv4 地址 | |
|---|---|---|
自定义子网
|
自定义子网和静态 IPv4 地址:静态内部 IPv4 地址必须已在自定义子网的主要 IPv4 地址范围中创建。 | 自定义子网和临时 IPv4 地址:GKE 使用自定义子网主要 IPv4 地址范围中未分配的内部 IPv4 地址。 |
| 集群子网 | 集群子网和静态 IPv4 地址:静态内部 IPv4 地址必须已在集群子网的主要 IPv4 地址范围中创建。 | 集群子网和临时 IPv4 地址:GKE 使用集群子网主要 IPv4 地址范围中未分配的内部 IPv4 地址。 |
内部 LoadBalancer Service 的子网和 IPv6 地址范围
下表介绍了 IPv6 专用或双栈内部 LoadBalancer Service 的有效子网指定和 IPv6 地址范围组合。即使内部直通式网络负载均衡器 IPv6 转发规则使用内部 /96 IPv6 地址范围,GKE 也只是将节点配置为接受其目的地与转发规则的 /96 范围的第一个 IPv6 地址 (/128) 匹配的数据包。
| 静态 IPv6 地址范围 | 临时 IPv6 地址范围 | |
|---|---|---|
自定义双栈或仅限 IPv6 的子网
|
自定义子网和静态 IPv6 地址范围:静态内部 /96 IPv6 地址范围必须已在自定义子网的内部 /64 IPv6 地址范围中创建。
|
自定义子网和临时 IPv6 地址范围:GKE 使用自定义子网的内部 /64 IPv6 地址范围中未分配的内部 /96 IPv6 地址范围。
|
集群双栈或仅限 IPv6 的子网
|
集群子网和静态 IPv6 地址范围:静态内部 /96 IPv6 地址范围必须已在集群子网的内部 /64 IPv6 地址范围中创建。
|
集群子网和临时 IPv6 地址范围:GKE 使用集群子网的内部 /64 IPv6 地址范围中未分配的内部 /96 IPv6 地址范围。
|
外部 LoadBalancer Service 的子网和 IPv4 地址
对于 IPv4 专用和双栈外部 LoadBalancer Service,外部 IPv4 地址(无论是静态外部 IPv4 地址还是临时外部 IPv4 地址)不会来自子网。
外部 LoadBalancer Service 的子网和 IPv6 地址范围
下表介绍了单栈 IPv6 或双栈外部 LoadBalancer Service 的子网或子前缀与 IPv6 地址范围的有效组合。即使区域级外部直通式网络负载均衡器 IPv6 转发规则使用外部 /96 IPv6 地址范围,GKE 也只是将节点配置为接受其目的地与转发规则的 /96 范围的第一个 IPv6 地址 (/128) 匹配的数据包。
| 静态 IPv6 地址范围 | 临时 IPv6 地址范围 | |
|---|---|---|
自定义双栈或仅限 IPv6 的子网
|
自定义子网和静态 IPv6 地址范围:静态外部 /96 IPv6 地址范围必须已在自定义子网的外部 /64 IPv6 地址范围中创建。静态外部 IPv6 地址范围只能在高级层级中创建。
|
自定义子网和临时 IPv6 地址范围:GKE 使用自定义子网的外部 /64 IPv6 地址范围中未分配的外部 /96 IPv6 地址范围。
|
集群双栈或仅限 IPv6 的子网
|
集群子网和静态 IPv6 地址范围:静态外部 /96 IPv6 地址范围必须已在集群子网的外部 /64 IPv6 地址范围中创建。静态外部 IPv6 地址范围只能在高级层级中创建。
|
集群子网和临时 IPv6 地址范围:GKE 使用集群子网的外部 /64 IPv6 地址范围中未分配的外部 /96 IPv6 地址范围。
|
BYOIPv6 公开委派前缀
|
BYOIPv6 前缀和静态 IPv6 地址范围:您必须使用 --endpoint-type=NETLB 和 --ip-collection 标志从区域级子前缀预留静态外部 /96 IPv6 地址范围,并使用 networking.gke.io/load-balancer-ip-addresses 注解引用静态地址。(可选)您还可以添加 networking.gke.io/ip-collection-v6 注解;如果添加,此注解必须引用您从中预留静态地址的同一子前缀。 |
BYOIPv6 前缀和临时 IPv6 地址范围:使用 networking.gke.io/ip-collection-v6 注解指定区域级子前缀。
GKE 会从子前缀中分配可用的外部 /96 IPv6 地址范围。
|
全球访问权限
如果内部 LoadBalancer Service 的 networking.gke.io/internal-load-balancer-allow-global-access 注解为 false 或未指定,GKE 会创建一个内部直通式网络负载均衡器且停用其转发规则的全局访问。停用全局访问权限后,需要访问负载均衡器的客户端必须位于同一区域和 VPC 网络,或位于连接到集群 VPC 网络的网络。
如果内部 LoadBalancer Service 的 networking.gke.io/internal-load-balancer-allow-global-access 注解为 true,则 GKE 会在内部直通式网络负载均衡器的转发规则上启用全局访问选项。位于 VPC 网络任意区域中或位于连接到集群 VPC 网络的网络中的客户端都可以访问负载均衡器。
如需详细了解全局访问权限如何适用于连接网络中的客户端,请参阅:
- 内部直通式网络负载均衡器文档中的客户端访问
- 内部直通式网络负载均衡器和连接的网络
所有端口转发规则
内部直通式网络负载均衡器的转发规则支持五个唯一端口号或所有端口。
在 GKE 中,内部 LoadBalancer Service 只能支持 Service 的 spec.ports[].port 中的最多 100 个端口。如果内部 LoadBalancer Service 最多定义 5 个端口,则转发规则将包含这些特定端口。不过,如果 Service 指定了超过 5 个端口,则转发规则会自动配置为匹配所有端口。将转发规则配置为使用所有端口时,GKE 只会为 Service 上 spec.ports[].port 中配置的特定端口创建入口允许防火墙规则。
如需详细了解内部直通式网络负载均衡器转发规则和有效端口规范,请参阅转发规则和端口规范。
IPv4/IPv6 双栈 LoadBalancer Service
您可以创建内部或外部 LoadBalancer Service,该 Service 可以是单栈(仅 IPv4 或仅 IPv6)或双栈。单栈 LoadBalancer Service 会创建一条使用 IPv4 地址或 IPv6 地址的转发规则。双栈 LoadBalancer Service 会创建两条转发规则:一条规则使用 IPv4 地址,另一条规则使用 IPv6 地址。如需创建 IPv4/IPv6 双栈 LoadBalancer Service,请部署在 IPv4/IPv6 双栈集群上,并根据您使用的负载均衡器的类型完成以下任一操作:
- 对于内部 LoadBalancer Service,您必须启用 GKE 子集。对于单栈 IPv6 和双栈集群,GKE 子集化默认处于启用状态。如需了解详情,请参阅启用内部负载均衡器子集。
- 对于外部 LoadBalancer Service,您必须使用基于后端服务的区域级外部直通式网络负载均衡器。如需了解详情,请参阅基于后端服务的外部网络负载均衡器。
对于每项 Service,您可以定义 ipFamilyPolicy 和 ipFamilies 规范。如需了解详情,请参阅 IPv4/IPv6 双栈 Service。
双栈 LoadBalancer Service 的限制
- 栈类型为
ipv4的集群不支持使用 IPv6 地址的 LoadBalancer Service。如需了解详情,请参阅为 VPC 原生集群使用双栈 IP 地址或配置单栈 IPv6 集群。 使用单栈地址创建的 LoadBalancer Service 无法升级为双栈服务。
根据以下条件,使用双栈地址创建的 LoadBalancer Service 可以更改为单栈:
- 使用 ipFamilies
["IPv4","IPv6"]的 Service 可以更改为使用 ipFamiliesIPv4的 Service,但不能更改为使用 ipFamiliesIPv6的 Service。 - 使用 ipFamilies
["IPv6","IPv4"]的 Service 可以更改为使用 ipFamiliesIPv6的 Service,但不能更改为使用 ipFamiliesIPv4的 Service。
- 使用 ipFamilies
IPv6 LoadBalancer Service
IPv6 LoadBalancer Service 是指其转发规则具有 IPv6 地址的 LoadBalancer Service。Service 可以是单栈 IPv6,也可以是同时具有 IPv4 和 IPv6 转发规则的双栈。如需在双栈集群中创建单栈 IPv6 LoadBalancer Service,请将 spec.ipFamilyPolicy 字段的值设置为 SingleStack,并将 spec.ipFamilies 字段的值设置为 IPv6。在仅 IPv6 集群中,这些是默认值,您可以省略它们。
IPv6 LoadBalancer Service 始终使用 GCE_VM_IP NEG 后端,其 IPv6 地址来自 VPC 网络中的子网范围或自带 IPv6 (BYOIPv6) 公共委派前缀。
单栈 IPv6 LoadBalancer Service 在 GKE 1.36.0-gke.2646000 版及更高版本中处于预览版阶段。
IPv6 LoadBalancer Service 的限制
- 您无法使用
spec.loadBalancerIP字段指定 IPv6 地址。请改用networking.gke.io/load-balancer-ip-addresses注解。 - 仅高级层级支持外部 IPv6 LoadBalancer Service,包括静态外部 IPv6 地址范围。GKE 会拒绝设置
cloud.google.com/network-tier: Standard注解的外部 IPv6 LoadBalancer Service。 - 您无法将单栈 IPv6 LoadBalancer Service 更改为使用 IPv4 地址。将
spec.ipFamilies字段的值设置为IPv4或将spec.ipFamilyPolicy字段的值设置为RequireDualStack会被拒绝。 - 您只能在 GKE 1.37.1-gke.2097000 及更高版本中的单栈 IPv6 外部 LoadBalancer Service 上使用
networking.gke.io/ip-collection-v6注解。GKE 不支持双栈 Service、IPv4 Service 或内部 LoadBalancer Service 的networking.gke.io/ip-collection-v6注解,并且您无法将此注解与networking.gke.io/load-balancer-subnet注解结合使用。
为负载均衡器选择子网
提供负载均衡器 IP 地址的子网的 IPv6 访问权限类型必须与负载均衡器的类型匹配。如果集群的子网已具有所需的访问权限类型,GKE 会使用集群的子网。否则,您必须创建具有所需访问权限类型的自定义 LoadBalancer 子网,并使用 networking.gke.io/load-balancer-subnet 注解指定此子网。唯一的例外情况是使用 BYOIPv6 公共委托前缀的外部 LoadBalancer Service,因为无论集群子网的访问权限类型如何,该前缀都会提供 IPv6 地址范围。
下表总结了哪个子网或前缀提供负载均衡器的 IPv6 地址范围:
| LoadBalancer Service 类型 | 集群子网的 IPv6 访问权限类型 | 负载均衡器的 IPv6 地址范围的来源 |
|---|---|---|
| 内部 | INTERNAL |
集群的子网。无需注解。 |
| 内部 | EXTERNAL |
具有 INTERNAL IPv6 访问权限类型的自定义 LoadBalancer 子网,通过 networking.gke.io/load-balancer-subnet 注解指定。 |
| 内部(使用 BYOIPv6) | INTERNAL 或 EXTERNAL |
一个子网,其内部 IPv6 地址范围来自 INTERNAL_IPV6_SUBNETWORK_CREATION 模式下的 BYOIPv6 公开委托前缀,并使用 networking.gke.io/load-balancer-subnet 注解指定(如果该子网是集群的子网,则不需要注解)。 |
| 外部 | EXTERNAL |
集群的子网。无需注解。 |
| 外部 | INTERNAL |
具有 EXTERNAL IPv6 访问权限类型的自定义 LoadBalancer 子网,通过 networking.gke.io/load-balancer-subnet 注解指定。 |
| 外部(使用 BYOIPv6) (GKE 1.37.1-gke.2097000 及更高版本) |
INTERNAL 或 EXTERNAL |
EXTERNAL_IPV6_FORWARDING_RULE_CREATION 模式下的 BYOIPv6 公开委派前缀,使用 networking.gke.io/ip-collection-v6 注解或通过从该前缀预留的静态 IPv6 地址指定。请勿指定 networking.gke.io/load-balancer-subnet 注解。 |
如需了解子网和 IPv6 地址范围的有效组合,请参阅内部 LoadBalancer Service 的子网和 IPv6 地址范围以及外部 LoadBalancer Service 的子网和 IPv6 地址范围。
自备 IPv6 地址 (BYOIPv6)
您可以将自带 IPv6 地址 (BYOIPv6) 与内部和外部 IPv6 LoadBalancer Service 搭配使用。
对于直接从公共委托前缀分配地址的外部 LoadBalancer Service,GKE 服务代理 (service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com) 需要特定的 Identity and Access Management (IAM) 权限。在拥有公开委派前缀的项目上,向此代理授予 Compute Public IP Admin 角色 (roles/compute.publicIpAdmin)。此角色包含 compute.publicDelegatedPrefixes.use 权限。
GKE 在初始 Service 创建期间以及每次同步 Service 时都需要此权限。
外部 LoadBalancer Service(GKE 1.37.1-gke.2097000 及更高版本):单栈 IPv6 外部 LoadBalancer Service(spec.ipFamilyPolicy: SingleStack 和 spec.ipFamilies: ["IPv6"])直接从公共委托前缀 (PDP) 的区域级 IPv6 子前缀分配外部 /96 BYOIPv6 地址范围。GKE 在单栈 IPv6 集群和双栈集群上都支持此功能,前提是 Service 是单栈 IPv6。集群的子网可以具有内部或外部 IPv6 访问权限类型,因为地址范围源自子前缀,而不是子网。
区域级 IPv6 子前缀必须满足以下要求:
- 配置为
EXTERNAL_IPV6_FORWARDING_RULE_CREATION模式 - 配置的可分配前缀长度为
/96 - 处于
ANNOUNCED状态
如需分配临时外部 BYOIPv6 地址范围,请在 networking.gke.io/ip-collection-v6 注解中指定子前缀(以完整资源网址或部分资源路径 projects/PROJECT_ID/regions/REGION/publicDelegatedPrefixes/SUB_PREFIX_NAME 的形式提供)。或者,如需使用您从子前缀预留的静态外部 BYOIPv6 地址范围,请使用 networking.gke.io/load-balancer-ip-addresses 注解。
如果您更改 networking.gke.io/ip-collection-v6 注解,GKE 会使用新前缀中的新地址重新创建 IPv6 转发规则,这会短暂中断流量。如果您移除该注解,则 Service 会还原为使用具有外部 IPv6 地址范围的子网中由 Google 提供的地址。如果集群子网使用内部 IPv6 地址范围,为避免错误,您必须同时添加 networking.gke.io/load-balancer-subnet 注解。如需了解详情,请参阅为外部 LoadBalancer Service 使用自备 IPv6 地址 (BYOIPv6)。
内部 LoadBalancer Service:IPv6 内部 LoadBalancer Service 使用来自内部 IPv6 子网的 BYOIPv6 地址。您可以通过在 INTERNAL_IPV6_SUBNETWORK_CREATION 模式下配置的公开委派前缀 (PDP) 的区域级 IPv6 子前缀创建此子网。如需了解详情,请参阅创建和使用 IPv6 子前缀。
如需配置 Service,请使用 networking.gke.io/load-balancer-subnet 注解指定 BYOIPv6 子网,或将该子网用作集群的默认子网。(可选)使用 networking.gke.io/load-balancer-ip-addresses 注解指定预留的静态内部 BYOIPv6 地址。
内部 LoadBalancer Service 不支持 networking.gke.io/ip-collection-v6 注解。如果您应用此注解,GKE 会忽略它并发出 IPCollectionV6Error 警告事件。如需了解详情,请参阅为内部 LoadBalancer Service 使用自备 IPv6 地址 (BYOIPv6)。
后续步骤
- 了解 LoadBalancer Service。
- 了解如何设置内部负载均衡器。
- 阅读适用于应用负载均衡器的 Ingress 概览。
- 了解如何使用独立 NEG。
- 详细了解 VPC 防火墙规则。