负载均衡(LoadBalancer)类型的 Service 通过使用外部负载均衡器,使流量能够平滑地分发到集群中的多个 Pod 上。本文介绍负载均衡类型 Service 的常见概念和技术原理。
当创建一个 LoadBalancer 类型的 Service 时,系统会为该 Service 创建或复用一个外部的负载均衡器(Cloud Load Balancer,CLB),用于向公网或者内网暴露服务。负载均衡器支持转发到 NodePort 服务,也支持直接转发到处于 VPC-CNI 网络模式下的容器中。转发到 NodePort 服务时的基本原理,如下图所示。
当 Serivce 类型为 LoadBalancer 或 NodePort 时,支持配置该服务的外部流量策略,用于控制从外部网络到服务的流量路由。支持的配置项包括Local
和Cluster
。在 Pod 直通模式或非 Pod 直通模式下,外部流量策略的转发行为略有不同。
在非 Pod 直通模式下,流量经由节点 NodePort 转发到 Pod 中。此时,不同外部流量策略的主要区别如下:
说明
VCI Pod 一定会被添加到 CLB 后端。
非 Pod 直通模式下,外部流量策略主要区别,如下表所示。
对比项 | Local | Cluster |
---|---|---|
CLB 后端挂载 | 仅 Pod 所在的节点会挂载到 CLB 后端。 | 所有集群内的节点都将挂载到 CLB 后端。 |
CLB 配额 | CLB 配额消耗较少。详情请参见 配额限制。 | 集群内所有节点都挂载到 CLB 后端,会大量消耗 CLB 配额。详情请参见 配额限制。 |
访问负载均衡地址 | 仅 Pod 所在节点可以访问负载均衡地址。 | 集群内任意节点均可访问负载均衡地址。 |
Pod 负载均衡 | 默认 Pod 之间负载不均衡。 | 默认 Pod 之间负载均衡。 |
保留来源IP | 支持。 | 不支持。 |
会话保持 | 支持。 | 不支持。 |
适用场景 | 适用于需要保留客户端原始 IP 地址的应用,例如基于原始 IP 地址的日志记录。 | 适用于需要保证服务的高可用性,并且对源 IP 保存不敏感的应用,例如大型 Web 应用集群。 |
在 Pod 直通模式下,Pod 会被直接添加到 CLB 后端,外部的请求会直接转发到 Pod,不会再经过节点进行转发。适用于对网络有性能要求的场景。
说明
Pod 直通模式下,外部流量策略主要区别,如下表所示。
对比项 | Local | Cluster |
---|---|---|
CLB 后端挂载 | Pod 直接挂载到 CLB 后端。 | Pod 直接挂载到 CLB 后端。 |
CLB 配额 | 仅挂载业务 Pod,CLB 配额消耗较少。详情请参见 配额限制。 | 仅挂载业务 Pod,CLB 配额消耗较少。详情请参见 配额限制。 |
访问负载均衡地址 | 仅 Pod 所在节点可以访问负载均衡地址。 | 集群内任意节点均可访问负载均衡地址。 |
Pod 负载均衡 | 默认 Pod之间负载均衡。 | 默认 Pod之间负载均衡。 |
保留来源 IP | 支持。 | 支持。 |
会话保持 | 支持。 | 支持。 |