Azure 负载均衡器在开放系统互连(OSI)模型的第 4 层运行,该模型同时支持入站和出站方案。 它将抵达负载均衡器前端的入站流量分配到后端池实例。
与 AKS 集成的公共负载均衡器有两个用途:
- 为了为 AKS 虚拟网络(VNet)中的群集节点提供出站连接,可以通过将专用 IP 地址转换为其 出站池中的公共 IP 地址来实现。
- 通过类型的
LoadBalancerKubernetes 服务提供对应用程序的访问,使你能够轻松缩放应用程序并创建高度可用的服务。
本文介绍与 AKS 上的公共负载均衡器的集成。 有关内部负载均衡器集成,请参阅 在 AKS 中使用内部负载均衡器。
先决条件
- Azure 负载均衡器以两种 SKU 提供:“基本”和“标准”。 默认情况下,创建 AKS 群集时将使用标准 SKU。 标准 SKU 允许你访问添加的功能,例如更大的后端池、多个节点池、可用性区域,并且默认是安全的。 这是推荐的 AKS 的负载均衡器 SKU。 有关 基本 SKU 和 标准 SKU 的详细信息,请参阅 Azure 负载均衡器 SKU 比较。
- 有关类型为
LoadBalancer的 Kubernetes 服务支持的注释的完整列表,请参阅 LoadBalancer 注释。 - 本文假设已有一个 AKS 群集,其中包含标准 SKU Azure 负载均衡器。 如果需要 AKS 群集,可以使用 Azure CLI、 Azure PowerShell 或 Azure 门户创建群集。
重要
如果想要使用自己的网关、防火墙或代理提供出站连接,则可以跳过创建负载均衡器出站池和相应的前端 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 (基本或标准)。
标准 SKU 负载均衡器仅支持标准 SKU IP 地址。
在 AKS 中创建负载均衡器服务
创建出站类型为 LoadBalancer(默认)的 AKS 群集后,群集可以使用负载均衡器公开服务。
创建名为
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-load-balancer-ipv4用于 IPv4 地址,service.beta.kubernetes.io/azure-load-balancer-ipv6用于 IPv6 地址。 -
将 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 入口显示服务公开的外部 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 ...