对 Azure Kubernetes 服务 (AKS) 使用自带容器网络接口 (CNI) 插件

默认情况下,Kubernetes 不提供网络接口系统。 但是,网络插件提供此功能。 Azure Kubernetes 服务 (AKS) 提供多个受支持的 CNI 插件。 有关支持的插件的信息,请参阅 AKS 网络概念

支持的插件满足 Kubernetes 中的大部分网络需求。 但是,高级 AKS 用户可能需要在本地 Kubernetes 环境中使用的 CNI 插件,或使用其他 CNI 插件中提供的高级功能。

本文介绍如何在未预安装 CNI 插件的情况下部署 AKS 群集。 届时,可以安装可在 Azure 中工作的第三方 CNI 插件。

支持

Azure 支持部门无法帮助解决通过自带容器网络接口 (BYOCNI) 部署的群集中与 CNI 相关的问题。 例如,CNI 相关问题将包括大多数东/西(Pod 到 Pod)流量,以及 kubectl proxy 和类似的命令。 如果需要 CNI 相关的支持,请使用受支持的 AKS 网络插件或寻求 BYOCNI 插件第三方供应商的支持。

并非 CNI 相关的问题仍可获得支持。

先决条件

  • 对于 Azure 资源管理器 (ARM) 或 Bicep,请至少使用模板版本 2022-01-02-preview 或 2022-06-01。
  • 对于 Azure CLI,请至少使用版本 2.39.0。
  • AKS 群集的虚拟网络必须允许出站 Internet 连接。
  • AKS 群集不得将 169.254.0.0/16172.30.0.0/16172.31.0.0/16192.0.2.0/24 用于 Kubernetes 服务地址范围、Pod 地址范围或群集虚拟网络地址范围。
  • AKS 群集使用的群集标识在虚拟网络中的子网上必须至少具有网络参与者权限。 如果希望定义自定义角色而不是使用内置的网络参与者角色,则需要以下权限:
    • Microsoft.Network/virtualNetworks/subnets/join/action
    • Microsoft.Network/virtualNetworks/subnets/read
  • 分配给 AKS 节点池的子网不能是委托子网
  • AKS 不会将网络安全组 (NSG) 应用于其子网,也不会修改与该子网相关的任何 NSG。 如果提供自己的子网并添加与该子网相关的 NSG,则必须确保 NSG 中的安全规则允许节点 CIDR 范围内的流量。 有关详细信息,请参阅网络安全组

在未预安装 CNI 插件的情况下创建 AKS 群集

  1. 使用 az group create 命令为 AKS 群集创建 Azure 资源组。

    az group create -l chinanorth3 -n myResourceGroup
    
  2. 使用 az aks create 命令创建 AKS 群集。 传递参数值为 none--network-plugin 参数。

    az aks create -l chinanorth3 -g myResourceGroup -n myAKSCluster --network-plugin none
    

部署 CNI 插件

AKS 预配完成后,群集将处于联机状态,但所有节点都处于 NotReady 状态,如以下示例所示:

  $ kubectl get nodes
  NAME                                STATUS     ROLES   AGE    VERSION
  aks-nodepool1-23902496-vmss000000   NotReady   agent   6m9s   v1.21.9

  $ kubectl get node -o custom-columns='NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].message'
  NAME                                STATUS
  aks-nodepool1-23902496-vmss000000   container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized

此时,群集已准备好安装 CNI 插件。

后续步骤

通过以下文章详细了解 AKS 中的网络: