Azure 负载均衡器在开放系统互连(OSI)模型的第 4 层运行,该模型同时支持入站和出站方案。 它将到达负载均衡器前端的传入流量分发到后端池中的实例。
与 AKS 集成的公共负载均衡器有两个用途:
- 为了为 AKS 虚拟网络(VNet)中的群集节点提供出站连接,可以通过将专用 IP 地址转换为其 出站池中的公共 IP 地址来实现。
- 通过类型的
LoadBalancerKubernetes 服务提供对应用程序的访问,使你能够轻松缩放应用程序并创建高度可用的服务。
本文介绍与 AKS 上的公共负载均衡器的集成。 有关内部负载均衡器集成,请参阅 在 AKS 中使用内部负载均衡器。
先决条件
- AKS 支持标准 SKU Azure 负载均衡器,该 SKU 在创建 AKS 群集时默认使用。 标准 SKU 允许你访问更大的后端池、多个节点池、可用性区域等功能,并且默认是安全的。 基本 SKU 已于 2025 年 9 月 30 日停用,AKS 不再支持它。 如果你现有的 AKS 群集使用 Basic SKU,请参阅 在 AKS 上从 Basic 负载均衡器升级。 有关负载均衡器 SKU 的详细信息,请参阅Azure 负载均衡器 SKU 比较。
- 有关类型为
LoadBalancer的 Kubernetes 服务支持的注释的完整列表,请参阅 LoadBalancer 注释。 - 本文假设已有一个 AKS 群集,其中包含标准 SKU Azure 负载均衡器。 如果需要 AKS 群集,可以使用 Azure CLI、 Azure PowerShell 或 Azure 门户创建群集。
- 需要
kubectl安装和配置才能连接到 AKS 群集。 若要安装kubectl、下载群集凭据并验证连接,请参阅 “连接到群集”。
重要
如果想要使用自己的网关、防火墙或代理提供出站连接,则可以跳过创建负载均衡器出站池和相应的前端 IP,方法是使用出站类型作为 UserDefinedRouting (UDR)。 出站类型定义群集的出口方法,它默认为 LoadBalancer 类型。
限制
创建和管理支持标准 SKU 负载均衡器的 AKS 群集时存在以下限制:
AKS 管理代理节点的生命周期和操作。 不支持修改与代理节点关联的 IaaS 资源。 不支持的操作示例是对负载均衡器资源组进行手动更改。
至少需要指定一个公共 IP 或 IP 前缀来允许 AKS 群集的出口流量。 此外,需要使用公共 IP 或 IP 前缀来保持控制平面与代理节点之间的连接,以及保持与旧版 AKS 的兼容性。 可以使用以下选项来指定 标准 SKU 负载均衡器的公共 IP 或 IP 前缀:
- 提供自己的公共 IP。
- 提供自己的公共 IP 前缀。
- 指定一个数字,最大可以为 100,使 AKS 群集可以在其所在的资源组中创建该数量的标准 SKU 公共 IP。 此资源组通常以
MC_开头命名。 AKS 会将公共 IP 分配到标准 SKU 负载均衡器。 默认情况下,如果未指定公共 IP、公共 IP 前缀或 IP 数量,则会在 AKS 群集所在的资源组中自动创建一个公共 IP。 还必须允许公共地址,并避免创建任何禁止创建 IP 的 Azure 策略。
AKS 创建的公共 IP 不能作为自定义自带公共 IP 地址重复使用。 必须创建和管理所有自定义 IP 地址。
无法通过直接修改 AKS 管理的负载均衡器资源来更改负载均衡器 SKU。 若要将现有 AKS 群集从已停用 的基本 SKU 迁移到 标准 SKU,请使用支持的 AKS 升级过程。 迁移会导致停机,且一旦开始就无法回滚。
标准 SKU 负载均衡器仅支持标准 SKU IP 地址。
在 AKS 中创建负载均衡器服务
创建出站类型为 LoadBalancer(默认)的 AKS 群集后,群集可以使用负载均衡器公开服务。
验证集群中是否至少有一个带有
app: public-app标签且正在运行并处于就绪状态的 Pod。 下一步中的 Service 清单会选择带有此标签的 Pod,但不会创建 Deployment。kubectl get pods -l app=public-app创建名为
public-svc.yaml的服务清单,用于创建类型为LoadBalancer的公共服务。apiVersion: v1 kind: Service metadata: name: public-svc spec: type: LoadBalancer ports: - port: 80 selector: app: public-app
指定负载均衡器 IP 地址
如果要将特定 IP 地址与负载均衡器一起使用,可以使用两个选项来指定 IP 地址:
-
设置服务批注 (建议):用于
service.beta.kubernetes.io/azure-pip-name按名称指定现有的公共 IP 资源。 这种标注是最高效的选项,可帮助您避免潜在的限流。 您还可以将service.beta.kubernetes.io/azure-load-balancer-ipv4用于 IPv4 地址,将service.beta.kubernetes.io/azure-load-balancer-ipv6用于 IPv6 地址。 有关公共 IP 资源、资源组和标识要求,请参阅 将静态公共 IP 地址与 AKS 负载均衡器配合使用。 -
将 LoadBalancerIP 属性添加到负载均衡器 YAML 清单:将
Service.Spec.LoadBalancerIP属性添加到负载均衡器 YAML 清单。 此字段在 上游 Kubernetes 之后弃用,不支持双堆栈。 当前使用情况保持不变,现有服务无需修改即可正常工作。
部署负载均衡器服务清单
使用
kubectl apply部署公共服务清单,并指定 YAML 清单的名称。kubectl apply -f public-svc.yamlAzure 负载均衡器配置了一个新的公共 IP 地址,作为新服务的前端。 由于 Azure 负载均衡器可以有多个前端 IP,因此部署的每个新服务都会获得唯一的专用前端 IP。
确认已创建服务,并使用命令配置
kubectl get service负载均衡器。kubectl get service public-svc查看服务详细信息时,负载均衡器上为此服务创建的公共 IP 地址将显示在输出的 EXTERNAL-IP 列中。 IP 地址从 <待定> 变为实际的公共 IP 地址可能需要几分钟时间。 以下示例输出显示成功创建服务:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default public-svc LoadBalancer 10.0.39.110 203.0.113.187 80:32068/TCP 52s使用
kubectl describe service命令获取有关服务的详细信息。kubectl describe service public-svc以下示例输出是运行
kubectl describe service后的精简版输出。 LoadBalancer Ingress 显示由您的服务公开的外部 IP 地址。 IP 显示内部地址。Name: public-svc Namespace: default Labels: <none> Annotations: <none> Selector: app=public-app ... IP: 10.0.39.110 ... LoadBalancer Ingress: 203.0.113.187 ... TargetPort: 80/TCP NodePort: 32068/TCP ... Session Affinity: None External Traffic Policy: Cluster ...