Azure Kubernetes Service (AKS) での動的 IP 割り当てと拡張サブネットのサポートのために Azure CNI ネットワークを構成する

従来の CNI の欠点は、AKS クラスターが大きくなったときにポッド IP アドレスが枯渇することです。その結果、より大きなサブネットでクラスター全体を再構築する必要が生じます。 Azure CNI の新しい動的 IP 割り当て機能は、AKS クラスターをホストしているサブネットとは別のサブネットから ポッド IP を割り当てることで、この問題を解決します。

次のような利点があります。

  • IP の使用効率の向上: IP は、ポッド サブネットからクラスター ポッドへと動的に割り当てられます。 これにより、すべてのノードで IP が静的に割り当てられる従来の CNI ソリューションと比べて、クラスター内での IP の使用効率が向上します。
  • スケーラブルで柔軟: ノードとポッドのサブネットを個別にスケーリングできます。 1 つのポッド サブネットを、クラスターの複数のノード プール間で共有することも、同じ VNet にデプロイされた複数の AKS クラスター間で共有することもできます。 ノード プール用に個別のポッド サブネットを構成することもできます。
  • ハイ パフォーマンス: ポッドには仮想ネットワークの IP が割り当てられるため、VNet 内の他のクラスター ポッドとリソースに直接接続できます。 このソリューションでは、パフォーマンスを低下させることなく、非常に大規模なクラスターをサポートできます。
  • ポッドに対する個別の VNet ポリシー: ポッドには個別のサブネットがあるので、ノード ポリシーとは異なる VNet ポリシーを構成できます。 このため、ノードではなくポッドに対してのみインターネット接続を許可したり、Azure NAT Gateway を使用してノード プール内のポッドのソース IP を修正したり、NSG を使用してノード プール間のトラフィックをフィルター処理したりするなど、多くの便利なシナリオを実現できます。
  • Kubernetes ネットワーク ポリシー: Azure ネットワーク ポリシーと Calico は、この新しいソリューションと連携して動作します。

この記事では、AKS での動的 IP 割り当てと拡張サブネットのサポートのために Azure CNI ネットワークを使用する方法について説明します。

前提条件

Note

動的 IP 割り当てを使用する場合、Kubernetes Load Balancer サービスを使用してアプリケーションを Private Link サービスとして公開することはサポートされません。

  • AKS で基本的な Azure CNI ネットワークを構成するための前提条件を確認してください。同じ前提条件がこの記事にも適用されます。

  • AKS で基本的な Azure CNI ネットワークを構成するためのデプロイ パラメーターを確認してください。同じパラメーターが適用されます。

  • AKS Engine クラスターと DIY クラスターはサポートされていません。

  • Azure CLI バージョン 2.37.0 以降。

  • 既存のクラスターがある場合は、IP サブネットの使用状況を監視するためにコンテナーの分析情報を有効にする必要があります。 次の例に示すように、az aks enable-addons コマンドを使ってコンテナーの分析情報を有効にできます。

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

IP アドレス指定を計画する

この機能を使用すると、IP アドレス指定の計画が大幅に簡単になります。 ノードとポッドは独立してスケーリングされるため、アドレス空間も個別に計画することができます。 ポッド サブネットはノード プールの粒度に合わせて構成できるため、ノード プールを追加するとき、常に新しいサブネットを追加できます。 クラスター/ノード プール内のシステム ポッドはポッド サブネットからも IP を受信するので、この動作については把握をしておく必要があります。

IP は、16 個のバッチ単位でノードに割り当てられます。 ポッド サブネットの IP 割り当ては、クラスター内のノードあたり少なくとも 16 個の IP で計画する必要があります。ノードは起動時に 16 個の IP を要求し、割り当てに 8 個未満の IP が割り当てられていない場合は常に 16 個の別のバッチを要求します。

Kubernetes サービスと Docker ブリッジの IP の計画に、変更はありません。

クラスター内のノードあたりの最大ポッド数 (動的 IP 割り当てと拡張サブネット サポートを利用する場合)

Azure CNI で動的 IP 割り当てを使用する場合、ノードあたりのポッド数の値が、従来の CNI の動作とは若干異なります。

CNI Default デプロイ時に構成可能
従来の Azure CNI 30 はい (最大 250)
動的 IP 割り当てを使用した Azure CNI 250 はい (最大 250)

ノードあたりの最大ポッド数の構成に関連する他のすべてのガイダンスは、同じままです。

展開のパラメーター

AKS で基本的な Azure CNI ネットワークを構成するためのデプロイ パラメーターはすべて有効ですが、次の 2 つの例外があります。

  • subnet パラメーターで、クラスターのノードに関連するサブネットが参照されるようになりました。
  • 追加のパラメーター pod subnet は、IP アドレスがポッドに動的に割り当てられるサブネットを指定するために使用します。

動的 IP 割り当てと拡張サブネットがサポートされるネットワークを構成する - Azure CLI

クラスターで動的 IP 割り当てと拡張サブネット サポートを使用する方法は、クラスターの Azure CNI を構成する際の既定の方法と同様です。 次の例は、ノードのサブネットとポッドのサブネットを使った新しい仮想ネットワークを作成し、Azure CNI を使ったクラスターを作成して動的 IP 割り当てと拡張サブネット サポートを利用する手順について説明したものです。 $subscription などの変数は、実際の値に置き換えてください。

2 つのサブネットを持つ仮想ネットワークを作成します。

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

クラスターを作成します。その際に、--vnet-subnet-id を使ってノードのサブネットを、--pod-subnet-id を使ってポッドのサブネットを参照し、監視アドオンを有効にします。

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring

ノード プールの追加

ノード プールを追加する場合は、--vnet-subnet-id を使用してノード サブネットを参照し、--pod-subnet-id を使用してポッド サブネットを参照します。 次の例では、新しいノード プールの作成時に参照される、2 つの新しいサブネットを作成しています。

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

IP サブネットの使用状況を監視する

Azure CNI には、IP サブネットの使用状況を監視する機能が用意されています。 IP サブネットの使用状況の監視を有効にするには、次の手順に従います。

YAML ファイルを取得する

  1. GitHub から container-azm-ms-agentconfig.yaml という名前のファイルをダウンロードまたは grep します。

  2. 統合で azure_subnet_ip_usage を見つけます。 enabledtrue に設定します。

  3. ファイルを保存します。

AKS の資格情報の取得

サブスクリプション、リソース グループ、クラスターの変数を設定します。 次の例を考えてみます。

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

構成を適用する

  1. ダウンロードした container-azm-ms-agentconfig.yaml ファイルが保存されているフォルダーでターミナルを開きます。

  2. まず、コマンド kubectl apply -f container-azm-ms-agentconfig.yaml を使用して構成を適用します。

  3. これによりポッドが再起動され、5 分から 10 分後にメトリックが表示されます。

  4. クラスターのメトリックを表示するには、Azure portal のクラスター ページで [ブック] に移動し、"サブネット IP の使用状況" という名前のブックを見つけます。 ビューは次のようになります。

    A diagram of the Azure portal's workbook blade is shown, and metrics for an AKS cluster's subnet IP usage are displayed.

IP アドレスの動的割り当てと拡張サブネット サポートに関する FAQ

  • 1 つのクラスター/ノード プールに複数のポッド サブネットを割り当てることはできますか?

    1 つのクラスターやノード プールに対しては、サブネットを 1 つしか割り当てることができません。 ただし、複数のクラスターやノード プールで、1 つのサブネットを共有することはできます。

  • 別の VNet からのポッド サブネットを一緒に割り当てることはできますか?

    いいえ。ポッド サブネットは、クラスターと同じ VNet からのものである必要があります。

  • クラスター内の一部のノード プールで従来の CNI を使用し、他のノード プールで新しい CNI を使用することはできますか?

    クラスター全体で、1 種類の CNI のみを使用する必要があります。

次のステップ

AKS のネットワークの詳細については、次の記事を参照してください。