次の方法で共有


API Server VNet 統合を使用して Azure Kubernetes Service クラスターを作成する

API サーバー VNet 統合を使用して構成された Azure Kubernetes Service (AKS) クラスターは、API サーバー エンドポイントを、AKS がデプロイされている VNet 内の委任されたサブネットに直接投影します。 API サーバー VNet 統合により、プライベート リンクやトンネルなしで、API サーバーとクラスター ノード間のネットワーク通信が可能になります。 API サーバーは、委任されたサブネット内の内部ロード バランサー VIP の内部で使用できます。ノードは、これを使用するように構成されます。 API サーバー VNet 統合を使用することにより、API サーバーとノード プールの間のネットワーク トラフィックがプライベート ネットワークにのみとどまるようにすることができます。

API サーバーの接続

コントロール プレーンまたは API サーバーは、AKS で管理された Azure サブスクリプションに含まれています。 クラスターまたはノード プールは Azure サブスクリプションに含まれています。 クラスター ノードを構成するサーバーと仮想マシンは、委任されたサブネットに投影される API サーバー VIP とポッド IP を介して相互に通信できます。

API サーバー VNet 統合はパブリック クラスターとプライベート クラスターでサポートされています。 パブリック アクセスはクラスター プロビジョニング後に追加または削除できます。 VNet 統合でないクラスターとは異なり、エージェント ノードは常に、DNS を使用せずに API サーバー内部ロード バランサー (ILB) IP のプライベート IP アドレスを使用して直接通信します。 ノードから API サーバーへのトラフィックはすべてプライベート ネットワークに保持され、API サーバーからノードへの接続にトンネルは必要ありません。 API サーバーと通信する必要があるクラスター外クライアントは、通常パブリック ネットワーク アクセスが有効になっていればそれを行うことができます。 パブリック ネットワーク アクセスが無効になっている場合は、標準のプライベート クラスターと同じプライベート DNS セットアップ手法に従う必要があります。

前提条件

  • Azure CLI バージョン 2.73.0 以降がインストールされている必要があります。 az --version コマンドを使用して、バージョンを確認できます。

限られた可用性

重要

API Server VNet 統合では、特定のリージョンでの可用性と容量が制限されています。
API Server VNet 統合を有効にしてクラスターを作成または更新すると、次のエラーが表示されることがあります。

API Server VNet Integration is currently unavailable in region (_region_) due to high demand and limited capacity. AKS is actively expanding support for this feature. Check for other available regions at aka.ms/AksVnetIntegration.

このメッセージは、選択したリージョンが API Server VNet 統合の容量に一時的に達したことを示します。

続行するには、次の手順を実行します。

  • 容量が使用可能になる可能性があるため、後で要求を再試行してください。
  • この機能が現在サポートされている代替リージョンを選択します。

注意事項

クラスターで API Server VNet 統合が有効になると、クラスターを停止すると、コントロール プレーンが割り当て解除され、容量が解放されます。 容量の制約が発生しているリージョンでは、お客様は、停止したクラスターを起動できない可能性があります。 このため、ミッション クリティカルなワークロードを停止することはお勧めしません。

API Server VNet 統合は、次のリージョンで利用できます。

australiacentral、australiacentral2、australiaeast、australiasoutheast、brazilsoutheast、canadacentral、canadaeast、centraluseuap、eastus2euap、francecentral、francesouth、germanynorth、indonesiacentral、israelcentral、italynorth、japaneast、japanwest、jioindiacentral、jioindiawest、koreacentral、koreasouth、newzealandnorth、northcentralus、norwayeast、norwaywest、polandcentral、southafricanorth、southafricawest、southcentralus、southeastus、southindia、spaincentral、swedencentral、swedensouth、switzerlandwest、taiwannorth、taiwannorthwest、uaecentral、uaenorth、ukwest、westcentralus、westus、westus3

マネージド VNet を使用する API サーバー VNet 統合を備えた AKS クラスターを作成する

API サーバー VNet 統合を備えた AKS クラスターは、マネージド VNet モードまたは bring-your-own VNet モードで構成できます。 これらはパブリック クラスター (API サーバーにはパブリック IP 経由でアクセス可能) またはプライベート クラスター (API サーバーにはプライベート VNet 接続経由でのみアクセス可能) として作成できます。 クラスターを再デプロイせずに、パブリック状態とプライベート状態を切り替えることもできます。

リソース グループを作成する

  • az group create コマンドを使用して、リソース グループを作成します。

    az group create --location westus2 --name <resource-group>
    

パブリック クラスターをデプロイする

  • az aks create フラグを指定した --enable-api-server-vnet-integration コマンドを使用して、マネージド VNet 用の API サーバー VNet 統合を備えたパブリック AKS クラスターをデプロイします。

    az aks create --name <cluster-name> \
        --resource-group <resource-group> \
        --location <location> \
        --network-plugin azure \
        --enable-apiserver-vnet-integration \
        --generate-ssh-keys
    

プライベート クラスターをデプロイする

  • az aks create--enable-api-server-vnet-integration フラグを指定した --enable-private-cluster コマンドを使用して、マネージド VNet 用の API サーバー VNet 統合を備えたプライベート AKS クラスターをデプロイします。

    az aks create --name <cluster-name> \
        --resource-group <resource-group> \
        --location <location> \
        --network-plugin azure \
        --enable-private-cluster \
        --enable-apiserver-vnet-integration \
        --generate-ssh-keys
    

bring-your-own VNet を使用する API サーバー VNet 統合を備えたプライベート AKS クラスターを作成する

bring-your-own VNet を使用する場合は、API サーバー サブネットを作成して Microsoft.ContainerService/managedClusters に委任する必要があります。これにより、AKS サービスに API サーバー ポッドと内部ロード バランサーをそのサブネットに挿入するアクセス許可が付与されます。 このサブネットは他のワークロードには使用できませんが、同じ仮想ネットワーク内にある複数の AKS クラスターに対して使用できます。 サポートされる API サーバーのサブネットの最小サイズは /28 です。

クラスター ID には、API サーバー サブネットとノード サブネットの両方に対するアクセス許可が必要です。 API サーバー サブネットへのアクセス許可がない場合、プロビジョニング エラーが発生します。

警告

AKS クラスターは、サブネットのアドレス空間に少なくとも 9 つの IP を予約します。 IP アドレスが不足すると、API サーバーのスケーリングが妨げられ、API サーバーが停止する可能性があります。

リソース グループを作成する

  • az group create コマンドを使用して、リソース グループを作成します。
az group create --location <location> --name <resource-group>

仮想ネットワークの作成

  1. az network vnet create コマンドを使用して、仮想ネットワークを作成します。

    az network vnet create --name <vnet-name> \
    --resource-group <resource-group> \
    --location <location> \
    --address-prefixes 172.19.0.0/16
    
  2. az network vnet subnet create コマンドを使用して API サーバー サブネットを作成します。

    az network vnet subnet create --resource-group <resource-group> \
    --vnet-name <vnet-name> \
    --name <apiserver-subnet-name> \
    --delegations Microsoft.ContainerService/managedClusters \
    --address-prefixes 172.19.0.0/28
    
  3. az network vnet subnet create コマンドを使用してクラスター サブネットを作成します。

    az network vnet subnet create --resource-group <resource-group> \
    --vnet-name <vnet-name> \
    --name <cluster-subnet-name> \
    --address-prefixes 172.19.1.0/24
    

マネージド ID を作成し、仮想ネットワークに対するアクセス許可を付与する

  1. az identity create コマンドを使用して、マネージド ID を作成します。

    az identity create --resource-group <resource-group> --name <managed-identity-name> --location <location>
    
  2. az role assignment create コマンドを使用して、API サーバー サブネットにネットワーク共同作成者ロールを割り当てます。

    az role assignment create --scope <apiserver-subnet-resource-id> \
    --role "Network Contributor" \
    --assignee <managed-identity-client-id>
    
  3. az role assignment create コマンドを使用して、クラスター サブネットにネットワーク共同作成者ロールを割り当てます。

    az role assignment create --scope <cluster-subnet-resource-id> \
    --role "Network Contributor" \
    --assignee <managed-identity-client-id>
    

パブリック クラスターをデプロイする

  • az aks create フラグを指定した --enable-api-server-vnet-integration コマンドを使用して、API サーバー VNet 統合を備えたパブリック AKS クラスターをデプロイします。

    az aks create --name <cluster-name> \
        --resource-group <resource-group> \
        --location <location> \
        --network-plugin azure \
        --enable-apiserver-vnet-integration \
        --vnet-subnet-id <cluster-subnet-resource-id> \
        --apiserver-subnet-id <apiserver-subnet-resource-id> \
        --assign-identity <managed-identity-resource-id> \
        --generate-ssh-keys
    

プライベート クラスターをデプロイする

  • az aks create--enable-api-server-vnet-integration フラグを指定した --enable-private-cluster コマンドを使用して、API サーバー VNet 統合を備えたプライベート AKS クラスターをデプロイします。

    az aks create --name <cluster-name> \
    --resource-group <resource-group> \
    --location <location> \
    --network-plugin azure \
    --enable-private-cluster \
    --enable-apiserver-vnet-integration \
    --vnet-subnet-id <cluster-subnet-resource-id> \
    --apiserver-subnet-id <apiserver-subnet-resource-id> \
    --assign-identity <managed-identity-resource-id> \
    --generate-ssh-keys
    

既存の AKS クラスターを API サーバー VNet 統合に変換する

警告

API Server VNet 統合は、容量に依存する一方向の機能です。

API Server VNet 統合を有効にするときに、リージョンの容量の可用性に関する現在の検証はありません。 機能を有効にし、リージョンの容量を使用できない場合は、クラスターを停止した後に起動できない可能性があります。

推奨される方法
作成時に機能が有効になっている新しいクラスターを作成します。 プロビジョニングが成功したことを確認してから、ワークロードを移行します。 この方法により、機能を有効にするためにクラスターが更新されるときに、コントロール プレーンのダウンタイムや停止のリスクが回避されます。

  • 手動で再起動する必要があります。 リスクを受け入れて既存のクラスターを更新する場合は、 az aks update --enable-apiserver-vnet-integrationを使用して API Server VNet 統合を有効にした後、変更を有効にするにはクラスターを手動で再起動する必要があります。 この再起動は自動化されず、再起動と同様に、クラスターは完了するまで一時的に使用できなくなります。

  • 機能を無効にすることはできません。容量は保証されません
    有効にすると、この機能は永続的になります。 無効にしたり、以前の構成に戻したりすることはできません。 つまり、機能を有効にし、容量を使用できない場合は、クラスターを停止した後に起動できない可能性があります。

このアップグレードは、すべてのノード プール上でノードイメージ バージョンのアップグレードを実行し、ローリング イメージ アップグレードが行われている間に、すべてのワークロードを再起動します。

警告

クラスターを API サーバー VNet 統合に変換すると API サーバー IP アドレスが変更されますが、ホスト名は変わりません。 API サーバーの IP アドレスがファイアウォールまたはネットワーク セキュリティ グループ規則で構成されている場合は、それらの規則の更新が必要になる可能性があります。

  • az aks update フラグを指定した --enable-apiserver-vnet-integration コマンドを使用して、クラスターを API サーバー VNet 統合に更新します。

    az aks update --name <cluster-name> \
    --resource-group <resource-group> \
    --enable-apiserver-vnet-integration \
    --apiserver-subnet-id <apiserver-subnet-resource-id>
    

API サーバー VNet 統合を使用して既存のクラスターでプライベート クラスター モードを有効または無効にする

API サーバー VNet 統合を使用して構成された AKS クラスターでは、クラスターを再デプロイせずにパブリック ネットワーク アクセス/プライベート クラスター モードを有効または無効にすることができます。 API サーバーのホスト名は変更されませんが、パブリック DNS エントリは必要に応じて変更または削除されます。

--disable-private-cluster は現在プレビューの段階です。 詳細については、「リファレンス レベルとサポート レベル」を参照してください。

プライベート クラスター モードを有効にする

  • az aks update フラグを指定した --enable-private-cluster コマンドを使用して、プライベート クラスター モードを有効にします。

    az aks update --name <cluster-name> \
    --resource-group <resource-group> \
    --enable-private-cluster
    

プライベート クラスター モードを無効にする

  • az aks update フラグを指定した --disable-private-cluster コマンドを使用して、プライベート クラスター モードを無効にします。

    az aks update --name <cluster-name> \
    --resource-group <resource-group> \
    --disable-private-cluster
    

kubectl を使用したクラスターへの接続

  • kubectl コマンドを使用して、クラスターに接続するように az aks get-credentials を構成します。

    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    

Azure Private Link を使用して、API Server VNet 統合を使用してプライベート クラスターの API サーバー エンドポイントを公開できます。 次の手順では、クラスター VNet に Private Link サービス (PLS) を作成し、プライベート エンドポイントを使用して別の VNet またはサブスクリプションから接続する方法を示します。

API Server VNet 統合プライベート クラスターを作成する

  • --enable-api-server-vnet-integrationフラグと--enable-private-cluster フラグを指定して az aks create コマンドを使用して、API Server VNet 統合を使用してプライベート AKS クラスターを作成します。

    az aks create --name <cluster-name> \
        --resource-group <resource-group> \
        --location <location> \
        --enable-private-cluster \
        --enable-apiserver-vnet-integration
    

NSG のセキュリティ規則

既定では、VNet 内のすべてのトラフィックが許可されます。 ただし、異なるサブネット間のトラフィックを制限する NSG 規則を追加した場合は、NSG セキュリティ規則で次の種類の通信が許可されていることを確認します。

宛先 ソース プロトコル 港 / ポート 用途
APIServer サブネット CIDR クラスター サブネット TCP 443 と 4443 ノードと API サーバーの間の通信を有効にするために必要です。
APIServer サブネット CIDR Azure Load Balancer(アジュールロードバランサー) TCP 9988 Azure Load Balancer と API サーバーの間の通信を有効にするために必要です。 また、Azure Load Balancer と API Server サブネット CIDR の間のすべての通信を有効にすることもできます。

次のステップ

関連付けられているベスト プラクティスについては、AKS でのネットワーク接続とセキュリティに関するベスト プラクティスに関するページを参照してください。