从 Azure Kubernetes 服务 (AKS) 上的基本负载均衡器升级

本文介绍如何将基本负载均衡器实例升级到 Azure Kubernetes 服务(AKS)上的标准负载均衡器。 建议对所有生产实例使用标准负载均衡器。 它为基础结构提供了许多 关键差异 。 有关从基本负载均衡器升级到 AKS 外部的标准负载均衡器的指导,请参阅 基本负载均衡器升级的官方指南

重要

基本负载均衡器将于 2025 年 9 月 30 日停用。 有关详细信息,请查看官方公告。 如果当前使用的是基本负载均衡器,请确保在停用日期之前升级到标准负载均衡器,以避免群集不受支持。 本文可帮助你完成升级过程。

注释

对于同时使用可用性集和基本负载均衡器的群集,需要运行一个单独的 az aks update 命令来执行两次迁移(可用性集到虚拟机节点池和基本负载均衡器到标准负载均衡器)。 有关执行此迁移的步骤,请参阅 可用性集迁移 指南。

在您开始之前

在开始迁移之前,请查看以下信息:

  • 迁移期间发生停机。 请相应地规划停机时间。
  • 迁移开始后,不允许回滚。
  • 此过程还会将基本 IP 迁移到标准 IP,同时使与负载均衡器关联的入站 IP 地址保持不变。 创建新的公共 IP 并将其关联到标准负载均衡器出站规则,以便为群集出口流量提供服务。

先决条件

群集必须满足以下先决条件,然后才能执行迁移:

  • 此脚本的最低 Kubernetes 版本为 1.27。 如果需要升级 AKS 群集,请参阅 升级 AKS 群集
  • 需要安装 Azure CLI。 所需的最低版本为 2.76.0。
  • 如果群集使用私钥保管库运行密钥管理服务,则需要在执行迁移之前禁用密钥管理服务。 有关详细信息,请参阅 “关闭 KMS”。
  • 在执行迁移之前,需要禁用任何ValidatingAdmissionWebhooksMutatingAdmissionWebhooks

将基本负载均衡器升级到标准负载均衡器

  1. 使用az aks update命令,并将--load-balancer-sku标志设置为Standard,将基本负载均衡器升级为标准负载均衡器。

    az aks update \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP \
      --load-balancer-sku=Standard
    
  2. 使用 az aks show 命令验证迁移是否成功。

    az aks show \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP
    

    在输出中,确认类型 load-balancer 已设置为 Standard

  3. 验证所有 Pod 和服务是否都使用 kubectl get podskubectl get svc 命令成功运行。

    kubectl get svc -A
    kubectl get pods -A
    

确认新的出站 IP 地址

可以通过确认与 IP 地址关联的资源 ID,然后列出 IP 地址来鉴定与出站规则相关的新 IP 地址。

  1. 使用 az aks show 命令获取出站 IP 地址的资源 ID。

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query networkProfile.loadBalancerProfile.effectiveOutboundIPs[].id
    
  2. 使用 az network public-ip show 命令获取每个资源 ID 的新 IP 地址。

    az network public-ip show --ids $IP_RESOURCE_ID --query ipAddress -o tsv
    

FAQ

创建新的 AKS 群集或进行升级时,为什么会出现 Error: “Load Balancer SKU 'basic' is invalid; must use 'standard'.

Microsoft 已停止支持基本负载均衡器 SKU 用于某些 AKS 操作,创建操作现在某些区域中遭到阻止。

若要解决此问题,请确保在创建新群集时指定 --load-balancer-sku standard 。 例如:

az aks create \
  --name $CLUSTER_NAME \
  --resource-group $RESOURCE_GROUP \
  --load-balancer-sku standard

为什么我不能将基本负载均衡器就地更改为标准负载均衡器?

负载均衡器 SKU 在 AKS 中创建后是不可变的,因为它是群集拥有的托管资源。

可以使用以下选项之一解决此问题:

在从基本负载均衡器升级到标准负载均衡器后,为什么找不到我的公网IP?

在迁移期间,负载均衡器对象丢失了对公共 IP 资源的引用。 如果 IP 绑定到基本 SKU 负载均衡器且未反弹,可能会出现这种情况。

若要解决此问题,请执行下列操作:

  1. 确保新标准公共 IP 存在于正确的资源组中。

  2. 使用以下配置在服务清单中重新关联它:

    annotations:
      service.beta.kubernetes.io/azure-load-balancer-ipv4: <your-ip>
    

在没有公共 IP 的专用群集上迁移负载均衡器时,为什么在迁移期间仍创建公共 IP?

outboundType如果是LoadBalancer,则无论负载均衡器 SKU 如何,AKS 都会自动预配公共 IP(PIP)。

若要解决此问题,请执行下列操作:

  1. outboundType 更改为 userDefinedRouting 以实现完全专用群集。
  2. 确保通过 Azure 防火墙/NVA 配置自定义出站路由。

为何在内部负载均衡器设置中迁移失败?

当前迁移工具不支持内部虚拟网络(VNet)负载均衡器(基本到标准)。

若要解决此问题,请执行下列操作:

  1. 使用标准负载均衡器在同一 VNet 中重新创建群集。
  2. 部署工作负载并验证内部名称解析。

节点池正在使用可用性集。 即使负载均衡器迁移后,我仍然遇到问题吗?

是的。 如果您的节点池使用可用性集,该功能将在 2025 年 9 月 30 日之后不再在 AKS 中受支持。

若要解决此问题,请执行下列操作:

  1. 对于同时使用可用性集和基本负载均衡器的群集,必须运行一个单独的 az aks update 命令来执行两次迁移(可用性集到虚拟机节点池和基本负载均衡器到标准负载均衡器)。 有关执行此迁移的步骤,请参阅 可用性集迁移 指南。
  2. 升级后,必须使用 Azure CLI 或 REST API 来执行 CRUD作或管理池。 检查 限制

升级前是否需要删除默认 Webhook?

否。 如果在集群中不存在其他 ValidatingAdmissionWebhooksMutatingAdmissionWebhooks,则可以在迁移过程中保留控制平面中的默认 Webhook。

默认 Webhook 包括:

  • aks-node-mutating-webhook
  • webhook-admission-controller
  • node-validating-webhook

运行迁移命令需要哪些访问权限?

若要运行迁移命令,需要:

  • 订阅或资源组中的参与者或所有者角色。
  • Azure CLI 版本必须≥ 2.72.0。
  • AKS 预览版扩展版本必须≥ 0.5.170。

如何查看密钥管理服务 (KMS) 加密是否已禁用?

可以使用命令检查 KMS 加密是否在 AKS 群集 az aks list 上启用。

az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}"
  • 如果输出显示 "KmsEnabled": null,则表示未为该群集启用 KMS 加密,你可以跳过任何步骤来禁用它。 例如:

      {
    
        "KeyId": null,
    
        "KmsEnabled": null,
    
        "Name": "myAKSCluster"
    
      },
    ...
    
  • 如果启用了 KMS 并想要禁用它,请参阅 “关闭 KMS 加密”。

后续步骤

有关 AKS 网络的详细信息,请参阅 Azure Kubernetes 服务(AKS)的网络概念