在 Azure Kubernetes 服务(AKS)中使用您自己的 CNI 插件

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

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

本文介绍如何在未预安装 CNI 插件的情况下部署 AKS 群集。 在此处,可以安装可在 Azure 中运行的任何 CNI 插件。

Support

Microsoft 支持无法协助解决在您自行部署使用自带 CNI 插件的集群中出现的 CNI 相关问题。 例如,CNI 相关问题将包括大多数东/西(Pod 到 Pod)流量,以及 kubectl proxy 和类似的命令。 如果需要与 CNI 相关的支持,请使用支持的 AKS 网络插件或寻求 CNI 插件供应商的支持。

Microsoft仍支持与 CNI 无关的问题。

先决条件

  • 对于 Azure 资源管理器或 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)范围内的流量。 有关详细信息,请参阅网络安全组
  • AKS 不会在托管虚拟网络中创建路由表。

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

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

    az group create --location chinanorth3 --name myResourceGroup
    
  2. 使用 az aks create 命令创建 AKS 群集。 传递参数值为 --network-pluginnone 参数。

    az aks create \
        --location chinanorth3 \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --network-plugin none \
        --generate-ssh-keys
    

部署 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 插件。