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

适用于:Azure Local 上的 AKS

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

先决条件

  • 至少具有一个 Linux 节点的已启用 Azure Arc 的 Kubernetes 群集。 可以使用 Azure CLIAzure 门户在 Azure 本地创建 Kubernetes 群集。 默认情况下,Azure 本地群集上的 AKS 已启用 Arc。
  • 确保为负载均衡器准备了足够的 IP 地址。 对于 Azure 本地上的 AKS,请确保为负载均衡器保留的 IP 地址不会与 Arc VM 逻辑网络中的 IP 地址或控制平面 IP 地址冲突。 有关 Kubernetes 中的 IP 地址规划和网络的更多信息,请参阅 Kubernetes 的网络要求Kubernetes 的 IP 地址规划
  • 本作指南假定你了解 MetalLB 的工作原理。 有关详细信息,请参阅 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
    
  2. 要安装 MetalLB 的 Arc 扩展,请获取 MetalLB 扩展资源提供程序的 AppID,然后运行扩展创建命令。 每个 Arc Kubernetes 群集必须运行以下命令一次。

    通过运行 az ad sp list 获取 Arc 扩展的应用程序 ID。 要运行以下命令,必须是 Azure 租户的 user 成员。 有关用户和来宾成员身份的更多信息,请参阅 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 ARPBoth 模式下 MetalLB 负载均衡器的 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 广告模式的负载均衡器都有效。 如果你在 BGPBoth 模式下使用 MetalLB 负载均衡器,则必须创建 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

后续步骤

使用 GitOps Flux v2 Arc 扩展在 Kubernetes 群集上部署应用程序