Azure Container Networking Interface (CNI) ポッド サブネット
Azure CNI ポッド サブネットは、クラスター ノードとは別のサブネットからポッドに IP アドレスを割り当てます。 この機能は、動的 IP 割り当てと静的ブロック割り当て (プレビュー) の 2 つのモードで使用できます。
前提条件
Note
CIDR の静的ブロック割り当てを使う場合、Kubernetes Load Balancer サービスを使用してアプリケーションを Private Link サービスとして公開することはサポートされません。
AKS で基本的な Azure CNI ネットワークを構成するための前提条件を確認してください。同じ前提条件がこの記事にも適用されます。
AKS で基本的な Azure CNI ネットワークを構成するためのデプロイ パラメーターを確認してください。同じパラメーターが適用されます。
AKS Engine クラスターと DIY クラスターはサポートされていません。
Azure CLI のバージョン
2.37.0
以降とaks-preview
拡張機能のバージョン2.0.0b2
以降。サブスクリプションのサブスクリプションレベルの機能フラグ 'Microsoft.ContainerService/AzureVnetScalePreview' を登録します。
既存のクラスターがある場合は、IP サブネットの使用状況を監視するためのコンテナー分析情報アドオンを有効にする必要があります。 次の例に示すように、
az aks enable-addons
コマンドを使ってコンテナーの分析情報を有効にできます。az aks enable-addons --addons monitoring --name <cluster-name> --resource-group <resource-group-name>
動的 IP 割り当てモード
動的 IP 割り当ては、AKS クラスターをホストするサブネットとは別のサブネットからポッド IP を割り当てることで、ポッドの IP アドレス枯渇の問題を軽減するのに役立ちます。
動的 IP 割り当てモードには、次の利点があります。
- IP の使用効率の向上: IP は、ポッド サブネットからクラスター ポッドへと動的に割り当てられます。 これにより、すべてのノードで IP が静的に割り当てられる従来の CNI ソリューションと比べて、クラスター内での IP の使用効率が向上します。
- スケーラブルで柔軟: ノードとポッドのサブネットを個別にスケーリングできます。 1 つのポッド サブネットを、クラスターの複数のノード プール間で共有することも、同じ VNet にデプロイされた複数の AKS クラスター間で共有することもできます。 ノード プール用に個別のポッド サブネットを構成することもできます。
- ハイ パフォーマンス: ポッドには VNet IP が割り当てられるため、VNet 内の他のクラスター ポッドとリソースに直接接続できます。 このソリューションでは、パフォーマンスを低下させることなく、非常に大規模なクラスターをサポートできます。
- ポッドに対する個別の VNet ポリシー: ポッドには個別のサブネットがあるので、ノード ポリシーとは異なる VNet ポリシーを構成できます。 このため、ノードではなくポッドに対してのみインターネット接続を許可したり、Azure NAT Gateway を使用してノード プール内のポッドのソース IP を修正したり、ネットワーク セキュリティ グループ (NSG) を使用してノード プール間のトラフィックをフィルター処理したりするなど、多くの便利なシナリオを実現できます。
- Kubernetes ネットワーク ポリシー: Azure ネットワーク ポリシーと Calico は、どちらもこのモードで機能します。
IP アドレス指定を計画する
動的 IP 割り当てでは、ノードとポッドは独立してスケーリングされるため、アドレス空間を個別に計画できます。 ポッド サブネットはノード プールの粒度に合わせて構成できるため、ノード プールを追加するとき、常に新しいサブネットを追加できます。 クラスター/ノード プール内のシステム ポッドはポッド サブネットからも IP を受信するので、この動作については把握をしておく必要があります。
IP は、16 個のバッチ単位でノードに割り当てられます。 ポッド サブネットの IP 割り当ては、クラスター内のノードあたり少なくとも 16 個の IP で計画する必要があります。ノードは起動時に 16 個の IP を要求し、割り当てにおいて未割り当ての IP が 8 個未満になると常に、16 個の別のバッチを要求します。
Kubernetes サービスと Docker ブリッジについては、IP アドレスの計画に変更はありません。
静的ブロック割り当てモード (プレビュー)
静的ブロック割り当ては、個々の IP ではなく CIDR ブロックをノードに割り当てることで、ポッド サブネットのサイズ設定と Azure アドレス マッピングの制限を軽減するのに役立ちます。
静的ブロック割り当てモードには、次の利点があります。
- 優れた IP スケーラビリティ: 従来の CNI による個々の IP の動的割り当てとは対照的に、CIDR ブロックはクラスター ノードに静的に割り当てられ、ノードの有効期間中は存在します。 これにより、CIDR ブロックに基づくルーティングが可能になり、従来のクラスターあたり 65,000 ポッドから最大 100 万ポッドにクラスターの制限をスケールアップすることができます。 Azure 仮想ネットワークは、クラスターの規模に対応できる十分な大きさにする必要があります。
- 柔軟性: ノードとポッドのサブネットは個別にスケーリングできます。 1 つのポッド サブネットを、クラスターの複数のノード プール間で共有することも、同じ VNet にデプロイされた複数の AKS クラスター間で共有することもできます。 ノード プール用に個別のポッド サブネットを構成することもできます。
- ハイ パフォーマンス: ポッドには仮想ネットワークの IP が割り当てられるため、VNet 内の他のクラスター ポッドとリソースに直接接続できます。
- ポッドに対する個別の VNet ポリシー: ポッドには個別のサブネットがあるので、ノード ポリシーとは異なる VNet ポリシーを構成できます。 このため、ノードではなくポッドに対してのみインターネット接続を許可したり、Azure NAT Gateway を使用してノード プール内のポッドのソース IP を修正したり、NSG を使用してノード プール間のトラフィックをフィルター処理したりするなど、多くの便利なシナリオを実現できます。
- Kubernetes ネットワーク ポリシー: Cilium、Azure NPM、Calico は、このソリューションと連携して動作します。
制限事項
Azure CNI 静的ブロック割り当てを使う場合の制限の一部を次に示します。
- Kubernetes の必要最小バージョンは 1.28 です
- サポートされる最大サブネット サイズは x.x.x.x/12 から 100 万 IP です
- サブネットごとに 1 つの動作モードのみを使用できます。 サブネットで静的ブロック割り当てモードを使う場合、サブネットが同じである別のクラスターまたはノード プールで動的 IP 割り当てモードを使うことはできません。またその逆も同様です。
- 新しいクラスター、またはサブネットが異なるノード プールを既存のクラスターに追加する場合にのみサポートされています。 既存のクラスターまたはノード プールの移行または更新はサポートされていません。
- ノード プール内のノードに割り当てられたすべての CIDR ブロックで、ノードのプライマリ IP として 1 つの IP が選ばれます。 そのため、ネットワーク管理者が
--max-pods
値を選ぶ場合は、最適な方法でニーズに応え、サブネット内の IP を最適な方法で使用できるように、次の計算を使ってみてください。
max_pods = (N * 16) - 1
(N
は任意の正の整数であり、N
> 0 です)
利用可能なリージョン
この機能は、次のリージョンでは使用できません。
- 米国南部
- 米国東部 2
- 米国西部
- 米国西部 2
IP アドレス指定を計画する
静的ブロック割り当てでは、ノードとポッドは独立してスケーリングされるため、アドレス空間を個別に計画できます。 ポッド サブネットはノード プールの粒度に合わせて構成できるため、ノード プールを追加するとき、常に新しいサブネットを追加できます。 クラスター/ノード プール内のシステム ポッドはポッド サブネットからも IP を受信するので、この動作については把握をしておく必要があります。
ノードあたりのポッドの最大数を定義するノード プールの --max-pods
構成に基づいて、/28 (16 IP) の CIDR ブロックがノードに割り当てられます。 各ノード上で、そのノード上で使用できるすべての IP のうち 1 つの IP が内部的な目的で予約されています。
IP を計画する際は、--max-pods
次の計算を使用して構成を定義することが重要です: max_pods_per_node = (16 * N) - 1
(N
は 0
より大きい任意の正の整数です)。
IP の無駄がない理想的な値にするには、最大ポッド値が上記の式に準拠している必要があります。
次のサンプル ケースを参照してください。
事例 | max_pods |
ノードごとに割り当てられた CIDR ブロック | ポッドで使用可能な IP の合計 | ノードでの IP の無駄 |
---|---|---|---|---|
無駄が少ない (許容可能) | 30 | 2 | (16 * 2) - 1 = 32 - 1 = 31 | 31 - 30 = 1 |
理想的なケース | 31 | 2 | (16 * 2) - 1 = 32 - 1 = 31 | 31 - 31 = 0 |
無駄が多い (お勧めしません) | 32 | 3 | (16 * 3) - 1 = 48 - 1 = 47 | 47 - 32 = 15 |
Kubernetes サービスについては、IP アドレスの計画に変更はありません。
Note
クラスターのスケールをサポートするのに十分な大きさの連続したアドレス空間を VNet に確保してください。
Azure Kubernetes Service