適用対象: ✔️ AKS 自動 ✔️ AKS Standard
API Server VNet 統合で構成されたAzure Kubernetes Service (AKS) クラスターは、AKS がデプロイされている VNet 内の委任されたサブネットに API サーバー エンドポイントを直接投影します。 API サーバー VNet 統合により、プライベート リンクやトンネルなしで、API サーバーとクラスター ノード間のネットワーク通信が可能になります。 API サーバーは、委任されたサブネット内の内部ロード バランサー VIP の内部で使用できます。ノードは、これを使用するように構成されます。 API サーバー VNet 統合を使用することにより、API サーバーとノード プールの間のネットワーク トラフィックがプライベート ネットワークにのみとどまるようにすることができます。
ほとんどの運用ワークロードでは、AKS Automatic が推奨される既定の AKS エクスペリエンスです。 AKS Automatic は既定で運用の準備が整っており、構成済みのクラスター セキュリティ機能として API Server VNet 統合が含まれています。 AKS Standard では、API Server VNet 統合は省略可能であり、クラスターの作成時または既存のクラスターの更新によって有効にします。
AKS Automatic の詳細については、「Azure Kubernetes Service (AKS) Automatic とは」を参照してください。
AKS 自動および AKS Standard での API Server VNet 統合
API Server VNet 統合は両方の AKS クラスター モードで使用できますが、セットアップは異なります。
- AKS 自動: API Server VNet 統合が事前に構成されています。
- AKS Standard: API Server VNet 統合は省略可能であり、明示的に有効にする必要があります。
ほとんどの運用シナリオでは、AKS Automatic から始めて、運用対応の既定値を使用し、運用オーバーヘッドを削減します。
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コマンドを使用して、バージョンを確認できます。 - 独自の仮想ネットワークを使用する場合は、 仮想ネットワークの前提条件を確認してください。
制限事項
AKS 自動で事前構成されているか、AKS Standard で明示的に有効になっているかにかかわらず、API Server VNet 統合には次の制限事項が適用されます。
- API Server VNet 統合では、Virtual Network暗号化はサポートされていません。 v3 以前の AKS ノード SKU (VNet 暗号化をサポートしていない) にデプロイされたクラスターは許可されますが、トラフィックは暗号化されません。 V4 以降の AKS ノード SKU (VNet 暗号化をサポート) にデプロイされたクラスターは、暗号化された VNet が API Server VNet 統合と互換性がないため、ブロックされます。 詳細については、 AKS でサポートされている VM SKU に関する説明を参照してください。
- デュアルスタック ネットワークを使用するには、クラスターに Kubernetes バージョン 1.26.3 以降、ネットワーク プラグイン
azure、ネットワーク プラグイン モードがoverlay必要です。 詳細については、「Azure デュアルスタック ネットワークを使用する CNI クラスターを参照してください。
可用性
- API Server VNet 統合は、カタールセントラルを除くすべての GA パブリック クラウド リージョンで使用できます。
API Server VNet 統合を使用してクラスターを作成する
AKS 自動(本番環境の推奨される既定値)
AKS 自動では、API Server VNet 統合が事前構成されています。 明示的な --enable-apiserver-vnet-integration フラグは必要ありません。
クイック スタートに従って AKS 自動クラスターを作成します。
AKS Standard: マネージド VNet
マネージド VNet モードの API Server VNet 統合を使用して、パブリック クラスターまたはプライベート クラスターとして AKS Standard クラスターを構成できます。
注
API Server VNet 統合はカタールセントラルでは使用できません。
リソース グループを作成する
az group create コマンドを使用して、リソース グループを作成します。
az group create --location <location> --name <resource-group>
パブリック クラスターをデプロイする
az aks create フラグを指定した --enable-apiserver-vnet-integration コマンドを使用して、マネージド VNet 用の API Server VNet 統合を使用してパブリック AKS Standard クラスターをデプロイします。
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-apiserver-vnet-integration フラグを指定した --enable-private-cluster コマンドを使用して、マネージド VNet 用の API Server VNet 統合を使用してプライベート AKS Standard クラスターをデプロイします。
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
AKS Standard: 独自の VNet を使用する
Bring Your Own VNet を使用する場合は、API サーバー サブネットを作成し、 Microsoft.ContainerService/managedClustersに委任する必要があります。 この委任により、そのサブネットに API サーバー ポッドと内部ロード バランサーを挿入するアクセス許可が AKS サービスに付与されます。 このサブネットは他のワークロードには使用できませんが、同じ仮想ネットワーク内にある複数の AKS クラスターに対して使用できます。 サポートされている API サーバーサブネットの最小サイズは /28。
クラスター ID には、API サーバー サブネットとノード サブネットの両方に対するアクセス許可が必要です。 API サーバー サブネットへのアクセス許可がない場合、プロビジョニング エラーが発生します。
警告
AKS クラスターは、サブネット アドレス空間に少なくとも 9 つの IP を予約します。 IP アドレスが不足すると、API サーバーのスケーリングを防ぎ、API サーバーの停止を引き起こす可能性があります。
注
API Server VNet 統合はカタールセントラルでは使用できません。
リソース グループを作成する
az group create コマンドを使用して、リソース グループを作成します。
az group create --location <location> --name <resource-group>
仮想ネットワークの作成
az network vnet createコマンドを使用して、仮想ネットワークを作成します。az network vnet create --name <vnet-name> \ --resource-group <resource-group> \ --location <location> \ --address-prefixes 172.19.0.0/16az 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/28az 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 を作成し、仮想ネットワークに対するアクセス許可を付与する
az identity createコマンドを使用して、マネージド ID を作成します。az identity create --resource-group <resource-group> --name <managed-identity-name> --location <location>az role assignment createコマンドを使用して、API サーバー サブネットにネットワーク共同作成者ロールを割り当てます。az role assignment create --scope <apiserver-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>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-apiserver-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-apiserver-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 Standard クラスターを API Server VNet 統合に変換する
警告
API Server VNet 統合は、容量に依存する一方向の機能です。 既存の AKS Standard クラスターで API Server VNet 統合を有効にすると、次の制限が適用されます。
-
手動再起動が必要:
az aks update --enable-apiserver-vnet-integrationを使用して API Server VNet 統合を有効にした後、コントロール プレーンリソースの移行により、変更を有効にするにはクラスターを直ちに再起動する必要があります。 この再起動は自動化されていません。 再起動を遅らせると、容量が使用できなくなるリスクが高まり、API サーバーが起動できなくなる可能性があります。 クラスターの再起動により、すべてのノードが新しい API サーバー エンドポイントに確実に再接続されます。 - 容量は検証されますが、予約されていません:AKS は、既存のクラスターで機能を有効にするとリージョンの容量を検証しますが、この検証では容量は予約されません。 再起動を遅らせ、その間に容量が使用できなくなった場合、停止または再起動後にクラスターの起動に失敗する可能性があります。 一般提供 (GA) の前にこの機能を有効にしたクラスター、または有効化後にまだ再起動していないクラスターでは、容量の検証は行われません。
- 機能を無効にすることはできません。有効にすると、機能は永続的になります。 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>[
az aks stop][az-aks-stop] コマンドと [az aks start][az-aks-start] コマンドを使用してクラスターを再起動します。az aks stop --name <cluster-name> --resource-group <resource-group> az aks start --name <cluster-name> --resource-group <resource-group>
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 \
--enable-apiserver-vnet-integration \
--apiserver-subnet-id <apiserver-subnet-resource-id>
プライベート クラスター モードを無効にする
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>
Private Linkを使用して API サーバーを公開する
Azure Private Linkを使用して、API Server VNet 統合を使用してプライベート クラスターの API サーバー エンドポイントを公開できます。 次の手順では、クラスター VNet に Private Link サービス (PLS) を作成し、プライベート エンドポイントを使用して別の VNet またはサブスクリプションから接続する方法を示します。
注
API Server VNet 統合はカタールセントラルでは使用できません。
API Server VNet 統合プライベート クラスターを作成する
az aks createフラグと--enable-apiserver-vnet-integration フラグを指定して --enable-private-cluster コマンドを使用して、API Server VNet 統合を使用してプライベート AKS クラスターを作成します。
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--enable-private-cluster \
--enable-apiserver-vnet-integration
API Server VNet 統合を使用してPrivate Linkを設定する方法の詳細については、「Private Linkと API Server VNet 統合を参照してください。
ネットワーク セキュリティ グループ (NSG) のセキュリティ規則
既定では、VNet 内のすべてのトラフィックが許可されます。 ただし、異なるサブネット間のトラフィックを制限する NSG 規則を追加した場合は、NSG セキュリティ規則で次の種類の通信が許可されていることを確認します。
| 到着地 | source | Protocol | 港 / ポート | 用途 |
|---|---|---|---|---|
| APIServer サブネット CIDR | クラスター サブネット | TCP | 443 と 4443 | ノードと API サーバーの間の通信を有効にするために必要です。 |
| APIServer サブネット CIDR | Azure Load Balancer | TCP | 9988 | Azure Load Balancerと API サーバー間の通信を有効にするために必要です。 Azure Load Balancerと API Server サブネット CIDR の間のすべての通信を有効にすることもできます。 |
関連するコンテンツ
- AKS 自動クラスターを作成する
- 関連付けられているベスト プラクティスについては、AKS でのネットワーク接続とセキュリティに関するベスト プラクティスに関するページを参照してください。
- API Server VNet 統合を使用してprivate linkを設定する方法については、API Server VNet 統合を使用した Private Link を参照してください。