Azure Kubernetes Service (AKS) を使用して独自のコンテナー ネットワーク インターフェイス (CNI) プラグインを導入する

Kubernetes には、既定のネットワーク インターフェイス システムが提供されていません。 代わりに、ネットワーク プラグインがこの機能を提供します。 Azure Kubernetes Service (AKS) では、サポートされている CNI プラグインをいくつか利用できます。 サポートされているプラグインについて詳しくは、AKS ネットワークの概念に関するページをご覧ください。

サポートされているプラグインは、Kubernetes のほとんどのネットワーク ニーズを満たしています。 ただし、高度な AKS ユーザーは、オンプレミスの Kubernetes 環境で同じ CNI プラグインを使用することも、他の CNI プラグインで使用できる高度な機能を使用することもできます。

この記事では、CNI プラグインがプレインストールされていない AKS クラスターをデプロイする方法について説明します。 そこから、Azure で動作するサードパーティ製の CNI プラグインをインストールできます。

サポート

Microsoft サポートでは、Bring Your Own Container Network Interface (BYOCNI) でデプロイされたクラスターでの CNI 関連の問題を支援することはできません。 たとえば、CNI 関連の問題では、ほとんどの東/西 (ポッドからポッド) のトラフィックと kubectl proxy などのコマンドがカバーされます。 CNI 関連のサポートが必要な場合は、サポートされている AKS ネットワーク プラグインを使用するか、BYOCNI プラグインのサードパーティ ベンダーにサポートを依頼してください。

CNI に関連しない問題については、引き続きサポートが提供されます。

前提条件

  • Azure Resource Manager (ARM) または Bicep の場合は、少なくともテンプレート バージョン 2022-01-02-preview または 2022-06-01 を使用します。
  • Azure CLI の場合は、バージョン 2.39.0 以降を使います。
  • AKS クラスターの仮想ネットワークでは、送信インターネット接続を許可する必要があります。
  • AKS クラスターでは、Kubernetes サービスのアドレス範囲、ポッド アドレス範囲、またはクラスターの仮想ネットワーク アドレス範囲に 169.254.0.0/16172.30.0.0/16172.31.0.0/16192.0.2.0/24 を使用することはできません。
  • AKS クラスターで使用されるクラスター ID には、少なくとも、ご利用の仮想ネットワーク内のサブネットに対するネットワーク共同作成者のアクセス許可が必要です。 組み込みのネットワークの共同作成者ロールを使用する代わりに、カスタム ロールを定義する場合は、次のアクセス許可が必要です。
    • 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 eastus -n myResourceGroup
    
  2. az aks create コマンドを使用して、AKS クラスターを作成します。 none のパラメーター値を指定して --network-plugin パラメーターを渡します。

    az aks create -l eastus -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 のネットワークの詳細については、次の記事を参照してください。