API サーバー 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 セットアップ手法に従う必要があります。

利用可能なリージョン

API サーバー VNet 統合は、すべてのグローバル Azure リージョンで利用できます。

前提条件

  • aks-preview 拡張機能バージョン 0.5.97 以降を備えた Azure CLI。
  • ARM または REST API を使用する場合、AKS API バージョンは 2022-04-02-preview 以降である必要があります。

aksプレビューの Azure CLI 拡張機能をインストールする

重要

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。

  • az extension add コマンドを使用して aks-preview 拡張機能をインストールします。

    az extension add --name aks-preview
    
  • az extension update コマンドを使って拡張機能の最新バージョンに更新します。

    az extension update --name aks-preview
    

"EnableAPIServerVnetIntegrationPreview" 機能フラグを登録する

  1. az feature register コマンドを使用して、EnableAPIServerVnetIntegrationPreview 機能フラグを登録します。

    az feature register --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
    

    状態が [登録済み] と表示されるまでに数分かかります。

  2. 次のように az feature show コマンドを使用して、登録状態を確認します。

    az feature show --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
    
  3. 状態が Registered と表示されたら、az provider register コマンドを使用して Microsoft.ContainerService リソース プロバイダーの登録を最新の情報に更新します。

    az provider register --namespace Microsoft.ContainerService
    

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

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

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

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

    az group create -l westus2 -n <resource-group>
    

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

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

    az aks create -n <cluster-name> \
        -g <resource-group> \
        -l <location> \
        --network-plugin azure \
        --enable-apiserver-vnet-integration
    

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

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

    az aks create -n <cluster-name> \
        -g <resource-group> \
        -l <location> \
        --network-plugin azure \
        --enable-private-cluster \
        --enable-apiserver-vnet-integration
    

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 -l <location> -n <resource-group>

仮想ネットワークの作成

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

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

    az network vnet subnet create -g <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 -g <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 -g <resource-group> -n <managed-identity-name> -l <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>
    

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

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

    az aks create -n <cluster-name> \
    -g <resource-group> \
    -l <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>
    

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

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

    az aks create -n <cluster-name> \
    -g <resource-group> \
    -l <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>
    

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

前述の要件を満たす API サーバー サブネットを指定することで、既存のパブリック/プライベート AKS クラスターを API サーバー VNet 統合クラスターに変換できます。 これらには、次のような要件が含まれます: クラスター ノードと同一の Vnet 内にあること、AKS クラスター ID にアクセス許可が付与されていること、プライベート エンドポイントなどの他リソースに使用されていないこと、サイズが最低 /28 であること。 クラスターの変換は、不可逆的な移行です。 クラスターで API サーバー VNet 統合を有効にしたら無効にすることはできません。

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

警告

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

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

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

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

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

注意

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

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

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

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

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

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

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

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

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

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

次のステップ

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