使用 Azure CLI 为已启用 Azure Arc 的 Kubernetes 群集部署 MetalLB 扩展

适用于:Azure 本地版本 23H2

负载均衡器的主要目的是在 Kubernetes 群集中的多个节点之间分配流量。 这有助于防止停机并提高应用程序的整体性能。 Azure Arc 启用的 AKS 支持使用 Arc 扩展在 Kubernetes 群集上创建 MetalLB 负载均衡器实例。

先决条件

  • 至少具有一个 Linux 节点的已启用 Azure Arc 的 Kubernetes 群集。 可以使用 Azure CLIAzure 门户在 Azure 本地版本 23H2 上创建 Kubernetes 群集。 默认情况下,Azure 本地版本 23H2 群集上的 AKS 已启用 Arc。
  • 确保有足够的 IP 地址用于负载均衡器。 对于 Azure 本地版本 23H2 上的 AKS,请确保为负载均衡器保留的 IP 地址不会与 Arc VM 逻辑网络中的 IP 地址冲突并控制平面 IP。 有关 Kubernetes 中的 IP 地址规划和网络的详细信息,请参阅 Kubernetes 的网络要求和 Kubernetes 的 IP 地址规划。
  • 本操作指南假定你了解金属 LB 的工作原理。 有关详细信息,请参阅 适用于 Kubernetes 的 MetalLB 概述。

安装 Azure CLI 扩展

运行以下命令以安装所需的 Azure CLI 扩展:

az extension add -n k8s-runtime --upgrade

为 MetalLB 启用 Arc 扩展

在继续操作之前配置以下变量:

参数 说明
$subId Kubernetes 群集的 Azure 订阅 ID。
$rgName Kubernetes 群集的 Azure 资源组。
$clusterName Kubernetes 群集的名称。

选项 1:使用 az k8s-runtime load-balancer enable 命令为 MetalLB 启用 Arc 扩展

若要使用以下命令为 MetalLB 启用 Arc 扩展,必须具有 Graph 权限 Application.Read.All。 可以通过登录到 Azure 订阅并运行以下命令来检查你是否具有此权限:

`az ad sp list --filter "appId eq '087fca6e-4606-4d41-b3f6-5ebdf75b8b4c'" --output json`

如果命令失败,请联系 Azure 租户管理员获取 Application.Read.All 角色。

如果确实具有权限,可以使用 az k8s-runtime load-balancer enable 命令安装 Arc 扩展并为 Kubernetes 群集注册资源提供程序。 该 --resource-uri 参数引用 Kubernetes 群集的资源管理器 ID。

az k8s-runtime load-balancer enable --resource-uri subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Kubernetes/connectedClusters/$clusterName

选项 2:使用 az k8s-extension add 命令为 MetalLB 启用 Arc 扩展

如果没有 Graph 权限 Application.Read.All,可以按照以下步骤操作:

  1. 如果尚未注册, Microsoft.KubernetesRuntime RP 请注册。 请注意,每个 Azure 订阅只需注册一次。 还可以使用Azure 门户注册资源提供程序。 有关如何注册资源提供程序和所需权限的详细信息,请参阅 如何注册资源提供程序
az provider register -n Microsoft.KubernetesRuntime

可以通过运行以下命令来检查资源提供程序是否已成功注册。

az provider show -n Microsoft.KubernetesRuntime -o table

预期输出:

Namespace                    RegistrationPolicy    RegistrationState
---------------------------  --------------------  -------------------
Microsoft.KubernetesRuntime  RegistrationRequired  Registered
  1. 若要安装 MetalLB 的 Arc 扩展,请获取 MetalLB 扩展资源提供程序的 AppID,然后运行扩展 create 命令。 每个 Arc Kubernetes 群集必须运行以下命令一次。

通过运行 az ad sp list 获取 Arc 扩展的应用程序 ID。 若要运行以下命令,你必须是 user Azure 租户的成员。 有关用户和来宾成员身份的详细信息,请参阅 Microsoft Entra ID 中的默认用户权限。

$objID = az ad sp list --filter "appId eq '00001111-aaaa-2222-bbbb-3333cccc4444'" --query "[].id" --output tsv

获得$objID后,可以在 Kubernetes 群集上安装 MetalLB Arc 扩展。 若要运行以下命令,需要具有 Kubernetes 扩展参与者 角色。

az k8s-extension create --cluster-name $clusterName -g $rgName --cluster-type connectedClusters --extension-type microsoft.arcnetworking --config k8sRuntimeFpaObjectId=$objID -n arcnetworking

在 Kubernetes 群集上部署 MetalLB 负载均衡器

现在,可以通过运行 az k8s-runtime load-balancer create 命令远程为 Kubernetes 群集创建负载均衡器。 此命令在命名空间kube-system中创建类型IPAddressPool自定义资源。

在继续操作之前配置以下变量:

参数 说明
$lbName MetalLB 负载均衡器实例的名称。
$advertiseMode MetalLB 负载均衡器的模式。 支持的值为 ARPBGPBoth
$ipRange 在或Both模式下使用 MetalLB 负载均衡器ARP的 IP 范围。

如果播发模式为 BGPBoth,它还会创建自定义资源类型 BGPAdvertisement。 如果播发模式为 ARPBoth,它还会创建类型为以下类型的 L2Advertisement自定义资源:

az k8s-runtime load-balancer create --load-balancer-name $lbName --resource-uri subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Kubernetes/connectedClusters/$clusterName --addresses $ipRange --advertise-mode $advertiseMode

为 Kubernetes 群集创建 BGP 对等互连

通过运行 az k8s-runtime bgp-peer create 命令远程为 Kubernetes 群集创建 BGP 对等方。 请注意,BGP 对等方对所有具有 BGPBoth 播发模式的负载均衡器有效。 如果在或Both模式下使用 MetalLB 负载均衡器BGP,则必须创建 BGP 对等互连。

在继续操作之前配置以下变量:

参数 说明
$peerName BGP 对等方的名称。
$myASN 用于会话本地端的 AS 编号。
$peerASN 会话的远程端预期为 AS 编号。
$peerIP 建立会话时要拨号的地址。
az k8s-runtime bgp-peer create --bgp-peer-name $peerName --resource-uri subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Kubernetes/connectedClusters/$clusterName --my-asn $myASN --peer-asn $peerASN --peer-address $peerIP

后续步骤