使用 Azure CLI 为已启用 Azure Arc 的 Kubernetes 群集部署 MetalLB 扩展
适用于:Azure 本地版本 23H2
负载均衡器的主要目的是在 Kubernetes 群集中的多个节点之间分配流量。 这有助于防止停机并提高应用程序的整体性能。 Azure Arc 启用的 AKS 支持使用 Arc 扩展在 Kubernetes 群集上创建 MetalLB 负载均衡器实例。
先决条件
- 至少具有一个 Linux 节点的已启用 Azure Arc 的 Kubernetes 群集。 可以使用 Azure CLI 或 Azure 门户在 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,可以按照以下步骤操作:
- 如果尚未注册,
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
- 若要安装 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 负载均衡器的模式。 支持的值为 ARP 、BGP 或 Both 。 |
$ipRange |
在或Both 模式下使用 MetalLB 负载均衡器ARP 的 IP 范围。 |
如果播发模式为 BGP
或 Both
,它还会创建自定义资源类型 BGPAdvertisement
。 如果播发模式为 ARP
或 Both
,它还会创建类型为以下类型的 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 对等方对所有具有 BGP
或 Both
播发模式的负载均衡器有效。 如果在或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