ネットワーク分離 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 が次の要件を満たしていることを確認する必要があります。
- 匿名プル アクセスを ACR に対して有効にする必要があります。
- ACR は、Premium SKU サービス レベルである必要があります
(省略可能) 送信ネットワーク アクセスを必要とするオプションの 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 を作成し、アーティファクト キャッシュを有効にする
プライベート リンクと匿名プル アクセスを使用して 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)
ユーザーが新しい 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 でネットワーク ポリシーを使用して、ポッド間のトラフィックをセキュリティ保護する」を参照してください。
Azure Kubernetes Service