Azure Kubernetes Service (AKS) で Azure CNI ネットワークの概要

既定では、AKS クラスターでは kubenet を使って、仮想ネットワークとサブネットが作成されます。 kubenet を使用すると、ノードでは仮想ネットワーク サブネットから IP アドレスが取得されます。 その後、ノードにネットワーク アドレス変換 (NAT) が構成されて、ポッドはノードの IP の背後に "隠ぺいされた" IP アドレスを受け取ります。 この方法では、ポッド用にネットワーク空間で予約する必要がある IP アドレスの数が減ります。

Azure Container Networking Interface (CNI) では、すべてのポッドにサブネットから IP アドレスが割り当てられ、すべてのポッドに直接アクセスできます。 AKS クラスターと同じ仮想ネットワーク内のシステムでは、ポッドの IP が、ポッドからのすべてのトラフィックの発信元アドレスとして認識されます。 AKS クラスター仮想ネットワークの外部にあるシステムでは、ノードの IP が、ポッドからのすべてのトラフィックの発信元アドレスとして認識されます。 これらの IP アドレスは、ネットワーク空間全体で一意である必要があり、事前に計画する必要があります。 各ノードには、サポートされるポッドの最大数に対する構成パラメーターがあります。 ノードごとにそれと同じ数の IP アドレスが、そのノードに対して事前に予約されます。 この方法では詳細な計画が必要であり、多くの場合、IP アドレスが不足するか、アプリケーション需要の拡大に伴い、より大きなサブネットでのクラスターの再構築が必要になります。

Note

この記事では、従来の Azure CNI のみを紹介しています。 Azure CNI オーバーレイ動的 IP 割り当て用 Azure CNI VNetAzure CNI VNet - 静的ブロック割り当て (プレビュー)。 代わりにそのドキュメントをご覧ください。

前提条件

  • 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

    • Microsoft.Authorization/roleAssignments/write

  • AKS ノード プールに割り当てられたサブネットを委任されたサブネットにすることはできません。

  • AKS では Network Security Groups (NSG) がそのサブネットに適用されず、そのサブネットに関連付けられている NSG が変更されることもありません。 独自のサブネットを指定し、そのサブネットに関連付けられている NSG を追加する場合は、NSG のセキュリティ規則で、ノードの CIDR 範囲内のトラフィックが許可されていることを確認する必要があります。 詳細については、「ネットワーク セキュリティ グループ」を参照してください。

クラスターの IP アドレス指定を計画する

Azure CNI ネットワークを使用して構成されたクラスターには、追加の計画が必要です。 仮想ネットワークとそのサブネットのサイズは、実行する予定のポッドの数とクラスターのノードの数に対応できる必要があります。

ポッドとクラスターのノードの IP アドレスは、仮想ネットワーク内の指定されたサブネットから割り当てられます。 各ノードは、プライマリ IP アドレスで構成されます。 Azure CNI では、既定で 30 個の追加 IP アドレスが事前に構成されています。 これらの IP アドレスは、ノードでスケジュールされたポッドに割り当てられます。 クラスターをスケールアウトすると、サブネットの IP アドレスを使用して各ノードが同様に構成されます。 ノードごとの最大ポッド数も表示できます。

重要

必要な IP アドレス数では、アップグレードとスケーリング操作も考慮する必要があります。 固定数のノードのみをサポートするように IP アドレスを範囲設定した場合、ご使用のクラスターをアップグレードしたり、スケーリングしたりすることはできません。

  • ご使用の AKS クラスターをアップグレードする場合、新しいノードはそのクラスターにデプロイされます。 サービスやワークロードは新しいノードで実行され、古いノードはクラスターから削除されます。 このローリング アップグレードの手順では、IP アドレスが最低で追加で 1 ブロック利用可能になっている必要があります。 その場合、ノードのカウントは n + 1 になります。

    • この考慮事項は、Windows Server ノード プールを使用する場合に特に重要です。 AKS の Windows Server ノードには、Windows 更新プログラムが自動的に適用されません。 代わりに、ノード プール上でアップグレードを実行します。 このアップグレードでは、最新の Window Server 2019 ベース ノード イメージとセキュリティ パッチを使用して新しいノードをデプロイします。 Windows Server ノード プールのアップグレードの詳細については、AKS でのノード プールのアップグレードに関するページを参照してください。
  • AKS クラスターをスケーリングする場合、新しいノードはそのクラスターにデプロイされます。 サービスとワークロードは新しいノードで実行開始されます。 IP アドレス範囲では、クラスターでサポートできるノードとポッドの数をどのようにスケールアップするかを考慮する必要があります。 アップグレード操作用に、ノードを追加で 1 つ含める必要もあります。 その場合、ノードのカウントは n + number-of-additional-scaled-nodes-you-anticipate + 1 になります。

ノードで最大数のポッドを実行し、定期的にポッドを破棄およびデプロイする場合、ノードごとに追加の IP アドレスをいくつか用意することも考慮する必要もあります。 サービスを削除し、その IP アドレスを、デプロイする新しいサービス用に解放し、そのアドレスを取得するまでに、数秒が必要になる場合があります。 これらの追加の IP アドレスでは、この可能性が考慮されています。

AKS クラスターの IP アドレス計画は、仮想ネットワーク、ノードとポッドの 1 つ以上のサブネット、および Kubernetes サービスのアドレス範囲で構成されます。

アドレス範囲/Azure リソース 制限とサイズ変更
仮想ネットワーク Azure の仮想ネットワークは、/8 と同じサイズが可能ですが、構成される IP アドレスの個数は 65,536 に制限されています。 アドレス空間を構成する前に、他の仮想ネットワーク内のサービスとの通信を含め、ネットワークのすべてのニーズを考慮に入れてください。 たとえば、大きすぎるアドレス空間を構成すると、ネットワーク内の他のアドレス空間と重複するという問題が発生する可能性があります。
Subnet クラスターにプロビジョニングされている可能性のあるノード、ポッド、すべての Kubernetes、および Azure のリソースを収容するのに十分な大きさである必要があります。 たとえば、内部に Azure Load Balancer をデプロイする場合は、そのフロントエンド IP は、パブリック IP ではなく、クラスター サブネットから割り当てられています。 アップグレード操作や今後のスケーリングのニーズも、サブネットのサイズで考慮される必要があります。

以下の方程式を使用してアップグレード操作のための追加のノードを含む、最小 サブネット サイズを計算するには: (number of nodes + 1) + ((number of nodes + 1) * maximum pods per node that you configure)

50 ノードのクラスターの例: (51) + (51 * 30 (default)) = 1,581 (/21 以上)

追加の 10 ノードをスケールアップするためのプロビジョニングも含む 50 ノードのクラスターの例: (61) + (61 * 30 (default)) = 1,891 (/21 以上)

クラスターを作成するときにノードごとの最大ポッド数を指定しないと、ノードごとの最大ポッド数は 30 に設定されます。 必要な最小 IP アドレス数はその値に基づきます。 別の最大値に基づいて最小 IP アドレス要件を計算する場合、「ノードごとの最大ポッド数」を参照して、クラスターをデプロイするときにこの値を設定します。

Kubernetes サービスのアドレス範囲 この仮想ネットワーク上またはこの仮想ネットワークに接続されているネットワーク要素では、この範囲を使用しないでください。 サービスのアドレスの CIDR は、/12 より小さくする必要があります。 この範囲は、さまざまな AKS クラスター間で再利用できます。
Kubernetes DNS サービスの IP アドレス クラスター サービス検索で使用される、Kubernetes サービスのアドレス範囲内の IP アドレス。 アドレス範囲内の最初の IP アドレスは使用しないでください。 サブネット範囲の最初のアドレスは、kubernetes.default.svc.cluster.local アドレスに使用されます。

ノードごとの最大ポッド数

AKS クラスターのノードごとの最大ポッド数は 250 です。 ノードごとの "既定" の最大ポッド数は、kubenet ネットワークと Azure CNI ネットワークで、またクラスターのデプロイ方法によって異なります。

デプロイ方法 kubenet の既定値 Azure CNI の既定値 デプロイ時に構成可能
Azure CLI 110 30 はい (最大 250)
Resource Manager テンプレート 110 30 はい (最大 250)
ポータル 110 110 ([ノード プール] タブで構成可能) はい (最大 250)

新しいクラスターのノードごとの最大ポッド数を構成する

ノードごとの最大ポッド数を構成できるのは、クラスターのデプロイ時、または新しいノード プールを追加するときです。 ノードあたりの最大ポッド数の値は 250 まで設定できます。

新しいノード プールを作成するときに maxPods を指定しない場合は、Azure CNI の既定値 30 を受け取ります。

ノードあたりの最大ポッドの最小値は、クラスターの正常性にとって重要なシステム ポッド用の領域を保証するために適用されます。 ノードごとの最大ポッドに対して設定できる最小値は、各ノード プールの構成に最低 30 個のポッド用の領域がある場合に限り、10 です。 たとえば、ノードあたりの最大ポッドを 10 以上に設定するには、個々のノード プールに少なくとも 3 つのノードが必要です。 この要件は、新しく作成された各ノード プールにも適用されます。したがって、ノードあたりの最大ポッドとして 10 が定義されている場合は、追加された以降の各ノード プールには少なくとも 3 つのノードが必要です。

ネットワーク 最小値 最大値
Azure CNI 10 250
Kubenet 10 250

Note

前の表の最小値は、AKS サービスによって厳密に強制されます。 示されている最小値より小さい maxPods 値を設定することはできません。そうすると、クラスターが起動できなくなることがあります。

  • Azure CLI: az aks create コマンドを使用してクラスターをデプロイするときに --max-pods 引数を指定します。 最大値は 250 です。
  • Resource Manager テンプレート:Resource Manager テンプレートを使用してクラスターをデプロイするときに、ManagedClusterAgentPoolProfile オブジェクトに maxPods プロパティを指定します。 最大値は 250 です。
  • Azure portal: クラスターの作成時または新しいノード プールの追加時に、ノード プールの設定の Max pods per node フィールドを変更します。

既存のクラスターのノードごとの最大ポッド数を構成する

新しいノード プールを作成するときに、ノードごとの maxPods 設定を定義することができます。 既存のクラスターで maxPods の設定を増やす必要がある場合は、新しく必要な maxPods カウントで新しいノード プールを追加します。 ポッドを新しいプールに移行した後、古いプールを削除します。 クラスター内の使用していないプールを削除するには、システム ノード プールのドキュメントの定義に従ってノード プール モードを設定していることをご確認ください。

展開のパラメーター

AKS クラスターを作成するときに、Azure CNI ネットワーク用に以下のパラメーターを構成できます。

仮想ネットワーク:Kubernetes クラスターをデプロイする仮想ネットワーク。 クラスターに新しい仮想ネットワークを作成する場合は、 [新規作成] を選択し、 [仮想ネットワークの作成] セクションの手順に従います。 既存の仮想ネットワークを選択する場合は、その場所と Azure サブスクリプションが Kubernetes クラスターと同じであることを確認します。 Azure 仮想ネットワークの制限とクォータについては、「Azure サブスクリプションとサービスの制限、クォータ、制約」を参照してください。

サブネット:クラスターをデプロイする仮想ネットワーク内のサブネット。 クラスターの仮想ネットワークに新しいサブネットを作成する場合は、 [新規作成] を選択し、 [サブネットの作成] セクションの手順に従います。 ハイブリッド接続する場合、ご使用の環境のその他の仮想ネットワークのアドレス範囲と重複しないようにする必要があります。

Azure ネットワーク プラグイン: Azure ネットワーク プラグインが使用されている場合、"externalTrafficPolicy=Local" が指定されている内部 LoadBalancer サービスには、AKS クラスターに属さない clusterCIDR の IP を持つ VM からアクセスすることはできません。

Kubernetes サービスのアドレス範囲: このパラメーターは、Kubernetes によってクラスターの内部サービスに割り当てられる仮想 IP のセットです。 クラスターの作成後は、この範囲を更新することはできません。 次の要件を満たす任意のプライベート アドレス範囲を使用できます。

  • クラスターの仮想ネットワークの IP アドレス範囲に含まれていてはなりません
  • クラスターの仮想ネットワークがピアリングする他の仮想ネットワークと重複していてはなりません
  • オンプレミスのどの IP アドレスとも重複していてはなりません
  • 169.254.0.0/16172.30.0.0/16172.31.0.0/16、または 192.0.2.0/24 の範囲内にあってはなりません

技術的には、クラスターと同じ仮想ネットワーク内のサービス アドレス範囲を指定できますが、お勧めはしません。 重複する IP アドレス範囲を使うと、予期しない動作になる可能性があります。 詳細については、この記事の FAQ のセクションを参照してください。 Kubernetes サービスについて詳しくは、Kubernetes ドキュメントの「Services」(サービス) をご覧ください。

[Kubernetes DNS service IP address](Kubernetes DNS サービスの IP アドレス): クラスターの DNS サービスの IP アドレス。 [Kubernetes service address range](Kubernetes サービス アドレスの範囲) 内に含まれるアドレスを指定する必要があります。 アドレス範囲内の最初の IP アドレスは使用しないでください。 サブネット範囲の最初のアドレスは、kubernetes.default.svc.cluster.local アドレスに使用されます。

よく寄せられる質問

  • クラスター サブネットに VM を展開できますか。

    はい。 ただし、動的 IP 割り当てのための Azure CNI については、ポッドのサブネットには VM をデプロイできません。

  • Azure CNI 対応ポッドで発生したトラフィックに対して、外部システムではどのソース IP が認識されますか。

    AKS クラスターと同じ仮想ネットワーク内のシステムでは、ポッドの IP が、ポッドからのすべてのトラフィックの発信元アドレスとして認識されます。 AKS クラスター仮想ネットワークの外部にあるシステムでは、ノードの IP が、ポッドからのすべてのトラフィックの発信元アドレスとして認識されます。

    ただし、動的 IP 割り当てのための Azure CNI については、接続が同じ仮想ネットワーク内にあっても、仮想ネットワークを超えても関係なく、ポッドの IP は常に、ポッドからのトラフィックのソース アドレスになります。 これは、動的 IP 割り当てのための Azure CNI では、Microsoft Azure Container Networking インフラストラクチャが実装され、このインフラストラクチャからはエンドツーエンド エクスペリエンスが与えられるためです。 そのため、従来の Azure CNI でまだ使用されている ip-masq-agent を使用する必要がなくなります。

  • ポッドごとのネットワーク ポリシーを構成できますか。

    はい、Kubernetes ネットワーク ポリシーは AKS で使用できます。 開始するには、AKS でネットワーク ポリシーを使用してポッド間のトラフィックをセキュリティで保護する方法に関する記事を参照してください。

  • ノードに展開できるポッドの最大数は構成できますか。

    はい。Azure CLI または Resource Manager テンプレートを使用してクラスターをデプロイするときに構成することができます。 「ノードごとの最大ポッド数」を参照してください。

    既存のクラスターでノードごとのポッドの最大数を変更することはできません。

  • AKS クラスターの作成時に作成したサブネットの追加のプロパティを構成するにはどうすればよいですか。 たとえば、サービス エンドポイントなどのプロパティです。

    AKS クラスターの作成中時に作成する仮想ネットワークとサブネットのプロパティの詳細な一覧は、Azure portal の標準の仮想ネットワーク構成ページで構成できます。

  • "Kubernetes サービスのアドレス範囲" のクラスター仮想ネットワーク内で別のサブネットを使用できますか。

    お勧めはしませんが、この構成は可能です。 サービスのアドレス範囲は、Kubernetes によってクラスターの内部サービスに割り当てられる仮想 IP (VIP) のセットです。 Azure のネットワークには、Kubernetes クラスターのサービスの IP 範囲の可視性がありません。 クラスターのサービス アドレス範囲を可視化できないと、問題が発生する可能性があります。 後でクラスターの仮想ネットワークにサービスのアドレス範囲と重複する新しいサブネットが作成される可能性があります。 このような重複が発生した場合、Kubernetes は、サブネット内の他のリソースによって既に使用されている IP をサービスに割り当てる可能性があり、予期しない動作やエラーの原因となります。 クラスターの仮想ネットワークの外部のアドレス範囲を使用することで、この重複のリスクを回避できます。

次のステップ

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