次の方法で共有


ネットワーク分離 Azure Kubernetes Service (AKS) クラスターを作成する (プレビュー)

通常、組織には、データ流出のリスクを排除するために、クラスターからのエグレス (送信) ネットワーク トラフィックを規制する厳密なセキュリティとコンプライアンスの要件があります。 既定では、Azure Kubernetes Service (AKS) クラスターは、送信インターネット アクセスが無制限です。 このレベルのネットワーク アクセスでは、実行しているノードやサービスから必要に応じて外部リソースにアクセスできます。 エグレス トラフィックを制限する場合は、正常なクラスター メンテナンス タスクを維持するために、アクセスできるポートとアドレスの数を制限する必要があります。

送信アドレスをセキュリティで保護する 1 つのソリューションは、ドメイン名に基づいて送信トラフィックを制御できるファイアウォール デバイスを使用することです。

もう 1 つのソリューションであるネットワーク分離 AKS クラスター (プレビュー) を使用すると、クラスターの送信制限をすぐに設定できます。 ネットワーク分離 AKS クラスターは、データ流出や、クラスターのパブリック エンドポイントの意図しない露出のリスクを軽減します。

重要

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

開始する前に

  • この機能の概念的な概要の記事を参照してください。ネットワーク分離クラスターのしくみについて説明しています。 概要に関する記事では、次のことも説明しています。
    • AKS で管理される ACR または BYO ACR という 2 つのアクセス方法について説明しています。
    • 現在の制限事項について説明しています。
  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この記事では、Azure CLI のバージョン 2.63.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

  • aks-preview Azure CLI 拡張機能バージョン 9.0.0b2 以降をインストールします。

    • aks-preview 拡張機能がまだない場合は、 az extension add コマンドを使ってインストールします。

      az extension add --name aks-preview
      
    • aks-preview 拡張機能が既にある場合は、az extension update コマンドを使って更新し、確実に最新バージョンを使うようにします。

      az extension update --name aks-preview
      
  • az feature register コマンドを使って、NetworkIsolatedClusterPreview 機能フラグを登録します。

    az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    登録の状態は、az feature show コマンドを使って確認します。 状態が "登録済み" と表示されるまでに数分かかります。

    az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Note

    API サーバーのプライベート アクセス用に構成された API サーバー VNet 統合を使用してネットワーク分離クラスターを作成する場合は、上記の手順を繰り返して EnableAPIServerVnetIntegrationPreview 機能フラグも登録する必要があります。 状態が [Registered] と表示されたら、az provider register コマンドを使用して Microsoft.ContainerService および Microsoft.ContainerRegistry リソース プロバイダーの登録を最新の情報に更新します。

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Bring Your Own (BYO) Azure Container Registry (ACR) オプションを選択する場合は、ACR が次の要件を満たしていることを確認する必要があります。

  • (省略可能) 送信ネットワーク アクセスを必要とするオプションの AKS 機能またはアドオンを使用する場合、各機能の送信要件については、こちらのドキュメントを参照してください。 このドキュメントには、クラスターの仮想ネットワーク内から安全に接続するためのプライベート リンク統合をサポートする機能またはアドオンも列挙されています。 これらの機能のいずれにもプライベート リンク統合が利用できない場合は、その機能に必要なネットワーク ルールとアプリケーション ルールに基づいて、ユーザー定義のルーティング テーブルと Azure Firewall を使用してクラスターを設定できます。

Note

次の AKS クラスター拡張機能は、ネットワーク分離クラスターではまだサポートされていません。

AKS で管理される ACR を使用してネットワーク分離クラスターをデプロイする

このオプションでは、AKS が ACR リソースを作成、管理、調整します。 アクセス許可を割り当てたり、ACR を管理したりする必要はありません。 AKS は、ネットワーク分離クラスターで使用されるキャッシュ規則、プライベート リンク、およびプライベート エンドポイントを管理します。

ネットワーク分離クラスターを作成する

ネットワーク分離 AKS クラスターを作成するときは、プライベート リンクまたは API サーバー VNet 統合のいずれかのプライベート クラスター モードを選択できます。

選択したモードに関係なく、--bootstrap-artifact-source および --outbound-type パラメーターを設定します。

--bootstrap-artifact-source は、イメージ プルに対して直接 MCR (ネットワーク分離されていない) とプライベート ACR (ネットワーク分離) をそれぞれ使用する場合に、対応する Direct または Cache に設定できます。

--outbound-type parameter は、none または block に設定できます。 送信の種類が none に設定されている場合、AKS ではクラスターの送信接続は設定されず、ユーザーが独自に構成できます。 送信の種類が block に設定されている場合、すべての送信接続がブロックされます。

--bootstrap-artifact-source--enable-private-cluster--outbound-type パラメーターを指定した az aks create コマンドを実行して、プライベート リンク ベースのネットワーク分離 AKS クラスターを作成します。

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}   --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none  --network-plugin azure --enable-private-cluster

API サーバー VNet 統合を使用する

--bootstrap-artifact-source--enable-private-cluster--enable-apiserver-vnet-integration--outbound-type パラメーターを指定した az aks create コマンドを実行して、API サーバー VNet 統合が構成されたネットワーク分離 AKS クラスターを作成します。

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

既存の AKS クラスターをネットワーク分離型に更新する

新しいクラスターを作成するのではなく、既存の AKS クラスターでネットワーク分離を有効にする場合は、az aks update コマンドを使用します。

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none

この機能が有効になった後、新しく追加されたノードはエグレスなしで正常にブートストラップできます。 既存のクラスターでネットワーク分離を有効にする場合は、既存のすべてのノードを手動で再イメージ化する必要があることに注意してください。

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

重要

既存のクラスターのネットワーク分離モードを有効にした後は、クラスターのノード プールを再イメージ化することを忘れないでください。 そうしないと、この機能はクラスターに対して有効になりません。

Bring Your Own ACR を使用してネットワーク分離クラスターをデプロイする

AKS では、独自の (BYO) ACR の持ち込みがサポートされています。 BYO ACR シナリオをサポートするには、AKS クラスターを作成する前に、ACR プライベート エンドポイントとプライベート DNS ゾーンを構成する必要があります。

次の手順では、これらのリソースを準備する方法を示します。

  • AKS と ACR 用のカスタム仮想ネットワークとサブネット。
  • ACR、ACR キャッシュ ルール、プライベート エンドポイント、プライベート DNS ゾーン。
  • カスタム コントロール プレーン ID と kubelet ID。

手順 1: 仮想ネットワークとサブネットを作成する

AKS サブネットの既定の送信アクセスは false である必要があります。

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24 --default-outbound-access false

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

手順 2: ACR を作成し、アーティファクト キャッシュを有効にする

  1. プライベート リンクと匿名プル アクセスを使用して ACR を作成します。

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. ユーザーが新しい ACR に MCR コンテナー イメージをキャッシュできるように ACR キャッシュ ルールを作成します。

    az acr cache create -n acr-cache-rule -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "*"
    

手順 3: ACR のプライベート エンドポイントを作成する

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

手順 4: プライベート DNS ゾーンを作成し、レコードを追加する

privatelink.azurecr.io という名前のプライベート DNS ゾーンを作成します。 レジストリ REST エンドポイント {REGISTRY_NAME}.azurecr.io と、レジストリ データ エンドポイント {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io のレコードを追加します。

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

手順 5: コントロール プレーンと kubelet ID を作成する

コントロール プレーン ID

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

kubelet ID

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

kubelet ID に対する AcrPull アクセス許可を付与する

az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

これらのリソースを構成したら、BYO ACR を使用したネットワーク分離 AKS クラスターの作成に進むことができます。

手順 6: BYO ACR を使用してネットワーク分離クラスターを作成する

ネットワーク分離 AKS クラスターを作成するときは、プライベート リンクまたは API サーバー VNet 統合のいずれかのプライベート クラスター モードを選択できます。

選択したモードに関係なく、--bootstrap-artifact-source および --outbound-type パラメーターを設定します。

--bootstrap-artifact-source は、イメージ プルに対して直接 MCR (ネットワーク分離されていない) とプライベート ACR (ネットワーク分離) をそれぞれ使用する場合に、対応する Direct または Cache に設定できます。

--outbound-type parameter は、none または block に設定できます。 送信の種類が none に設定されている場合、AKS ではクラスターの送信接続は設定されず、ユーザーが独自に構成できます。 送信の種類が block に設定されている場合、すべての送信接続がブロックされます。

必要なパラメーターを指定した az aks create コマンドを実行して、ACR にアクセスするプライベート リンク ベースのネットワーク分離クラスターを作成します。

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

API サーバー VNet 統合を使用する

API サーバー VNet 統合を使用するネットワーク分離クラスターの場合は、まずサブネットを作成し、次のコマンドを使用して正しいロールを割り当てます。

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

API サーバー VNet 統合が構成されたネットワーク分離 AKS クラスターを作成し、必要なパラメーターを指定した az aks create コマンドを実行して ACR にアクセスします。

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

既存の AKS クラスターを更新する

新しいクラスターを作成するのではなく、既存の AKS クラスターでネットワーク分離を有効にする場合は、az aks update コマンドを使用します。

BYO ACR のプライベート エンドポイントとプライベート DNS ゾーンを作成するときは、既存の仮想ネットワークと既存の AKS クラスターのサブネットを使用します。 kubelet ID に AcrPull アクセス許可を割り当てるときは、既存の AKS クラスターの既存の kubelet ID を使用します。

既存の AKS クラスターでネットワーク分離機能を有効にするには、次のコマンドを使用します。

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none

ネットワーク分離クラスター機能が有効になった後、新しく追加されたノード プール内のノードは、エグレスなしで正常にブートストラップできます。 新しくスケーリングされたノードが正常にブートストラップできるように、既存のノード プールを再イメージ化する必要があります。 既存のクラスターでこの機能を有効にする場合は、既存のすべてのノードを手動で再イメージ化する必要があります。

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

重要

ネットワーク分離クラスター機能を有効にした後は、クラスターのノード プールを再イメージ化することを忘れないでください。 そうしないと、この機能はクラスターに対して有効になりません。

ACR ID を更新する

ネットワーク分離 AKS クラスターで使用するプライベート ACR は、更新することができます。 ACR リソース ID を識別するには、az aks show コマンドを使用します。

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

ACR ID の更新は、--bootstrap-artifact-source および --bootstrap-container-registry-resource-id パラメーターを使用して az aks update コマンドを実行することによって行います。

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <New BYO ACR resource ID>

既存のクラスターで ACR ID を更新する場合は、既存のすべてのノードを手動で再イメージ化する必要があります。

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

重要

ネットワーク分離クラスター機能を有効にした後は、クラスターのノード プールを再イメージ化することを忘れないでください。 そうしないと、この機能はクラスターに対して有効になりません。

ネットワーク分離クラスターが有効になっていることを検証する

ネットワーク分離クラスター機能が有効になっていることを検証するには、az aks show コマンドを使用します

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

次の出力は、outboundType プロパティ (none または block) と artifactSource プロパティ (Cache) の値に基づいて、この機能が有効になっていることを示しています。

"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
  ...
  "networkProfile": {
    ...
    "outboundType": "none",
    ...
  },
  ...
  "bootstrapProfile": {
    "artifactSource": "Cache",
    "containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
  },
  ...
}

ネットワーク分離クラスターを無効にする

--bootstrap-artifact-source および --outbound-type パラメーターを指定した az aks update コマンドを実行して、ネットワーク分離クラスター機能を無効にします。

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

既存のクラスターでこの機能を無効にする場合は、既存のすべてのノードを手動で再イメージ化する必要があります。

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

重要

ネットワーク分離クラスター機能を無効にした後は、クラスターのノード プールを再イメージ化することを忘れないでください。 そうしないと、この機能はクラスターに対して有効になりません。

次のステップ

この記事では、クラスターのエグレス トラフィックを制限する場合に許可するポートとアドレスについて学習しました。

Azure Firewall を使用して送信制限の構成を設定する場合は、「AKS でAzure Firewall を使用してエグレス トラフィックを制御する」を参照してください。

ポッド間の通信方法の制限、およびクラスター内の East-West トラフィックの制限については、「AKS でネットワーク ポリシーを使用して、ポッド間のトラフィックをセキュリティ保護する」を参照してください。