この記事は、Azure CLIまたは Terraform を使用してプライベート リンクベースの AKS クラスターをデプロイする際に役立ちます。 必要なプライベート リンクやトンネルを使用せずに AKS クラスターを作成する場合は、「 API Server VNet 統合を使用してAzure Kubernetes Service (AKS) クラスターを作成するを参照してください。
AKS のプライベート クラスターの概要
プライベート クラスターでは、コントロール プレーンまたは API サーバーに、「RFC1918 - Address Allocation for Private Internet」 (RFC1918 - プライベート インターネットでのアドレス割り当て) で定義されている内部 IP アドレスがあります。 プライベート クラスターを使用することにより、API サーバーとノード プールの間のネットワーク トラフィックがプライベート ネットワークにのみ保持されるようにすることができます。
コントロール プレーンまたは API サーバーは AKS マネージド Azure リソース グループ内にあり、クラスターまたはノード プールはリソース グループ内にあります。 サーバーとクラスターまたはノード プールは、API サーバー仮想ネットワーク内の Azure Private Link サービスと、AKS クラスターのサブネットに公開されているプライベート エンドポイントを介して相互に通信できます。
プライベート AKS クラスターを作成すると、AKS は既定で、対応する DNS ゾーンを持つプライベートとパブリックの両方の完全修飾ドメイン名 (FQDN) を作成します。 DNS 構成オプションの詳細については、「 プライベート DNS ゾーン、プライベート DNS サブゾーン、またはカスタム サブドメインの構成」を参照してください。
利用可能なリージョン
プライベート クラスターは、AKS がサポートされている 21Vianet リージョンによって運用されるパブリック リージョン、Azure Government、Microsoft Azureで利用できます。
重要
すべてのMicrosoft Defender for Cloud機能は、2026 年 8 月 18 日に中国リージョンのAzureで正式に廃止されます。 この今後の提供終了により、中国のお客様のAzureは、新しいサブスクリプションをサービスにオンボードできなくなります。 新しいサブスクリプションとは、提供終了の発表日である 2025 年 8 月 18 日より前に、Microsoft Defender for Cloud サービスにまだオンボードされていないサブスクリプションです。 提供終了に関する詳細は、21Vianet運営のMicrosoft AzureにおけるMicrosoft Defender for Cloudの廃止に関するお知らせをご覧ください。
お客様は、21Vianet が運営するMicrosoft Azureのアカウント担当者と協力して、この提供終了が自身の業務に与える影響を評価する必要があります。
プライベート AKS クラスターの前提条件
アクティブなAzure サブスクリプション。 Azure サブスクリプションがない場合は、開始する前に free アカウントを作成します。
az account setコマンドを使用してサブスクリプション コンテキストを設定します。 例えば次が挙げられます。az account set --subscription "00000000-0000-0000-0000-000000000000"Azure CLI のバージョン 2.28.0 以上。
az --versionコマンドを使用してバージョンを検索します。 インストールまたはアップグレードする必要がある場合は、「Install Azure CLIを参照してください。Azure Resource Manager (ARM) または Azure REST API を使用する場合、AKS API のバージョンは 2021-05-01 以降である必要があります。
カスタム DNS サーバーを使用するには、カスタム DNS サーバーのアップストリーム DNS サーバーとして Azure パブリック IP アドレス 168.63.129.16 を追加し、このパブリック IP アドレスを first DNS サーバーとして追加します。 Azure IP アドレスの詳細については、「
IP アドレス 168.63.129.16? - クラスターの DNS ゾーンは、 168.63.129.16 に転送する必要があります。 ゾーン名の詳細については、Azure サービスの DNS ゾーン構成を参照してください。
API Server VNet 統合で有効になっている既存の AKS クラスターでは、プライベート クラスター モードを有効にすることができます。 詳細については、「 API Server VNet 統合を使用して既存のクラスターでプライベート クラスター モードを有効または無効にする」を参照してください。
プライベート AKS クラスターでAzure Container Registryを有効にする必要がある場合は、クラスター仮想ネットワーク (VNet)内のコンテナー レジストリのプライベート リンクを設定するか>コンテナー レジストリの VNet とプライベート クラスターの VNet の間のピアリングを設定します。
kubectl がインストールされています。
az aks install-cliコマンドを使用してローカルにインストールできます。
- Terraform がローカルにインストールされている。 インストール手順については、「 Terraform のインストール」を参照してください。
重要
制限事項
- IP 承認範囲は、パブリック API サーバーにのみ適用されます。 これらの範囲をプライベート API サーバー エンドポイントに適用することはできません。
- Azure Private Link サービスの制限プライベート クラスターに適用されます。
- プライベート クラスターを使用したAzure DevOps Microsoftホストされるエージェントはサポートされていません。 セルフホステッド エージェントを使用することを検討してください。
- 顧客サブネット内のプライベート エンドポイントを削除または変更すると、クラスターが機能しなくなります。
- Azure Private Link サービスは Standard Azure Load Balancer でのみサポートされます。 基本Azure Load Balancerはサポートされていません。
プライベート AKS クラスター用のカスタム DNS を使用したハブとスポーク
Hub とスポークのアーキテクチャは、Azureにネットワークをデプロイするためによく使用されます。 これらのデプロイの多くでは、スポーク VNet の DNS 設定は、オンプレミスおよびAzureベースの DNS 解決を可能にするために中央 DNS フォワーダーを参照するように構成されています。
次の図は、カスタム DNS を使用するプライベート AKS クラスターのハブ アンド スポーク アーキテクチャを示しています。
- プライベート クラスターが作成されると、既定では、プライベート エンドポイント (1) とプライベート DNS ゾーン (2) がクラスターマネージド リソース グループに作成されます。 クラスターによりプライベート ゾーンの
Aレコードが使用され、API サーバーとの通信のためにプライベート エンドポイントの IP が解決されます。 - プライベート DNS ゾーンは、クラスター ノードが接続されている VNet にのみリンクされます (3)。つまり、プライベート エンドポイントは、そのリンクされた VNet 内のホストによってのみ解決できます。 VNet でカスタム DNS が構成されていない (既定) シナリオでは、リンクのためにプライベート DNS ゾーンのレコードを解決できる DNS の ホスト ポイントが 168.63.129.16 であるため、問題なく動作します。
- 既定のプライベート DNS ゾーンの動作を保持している場合、AKS は、ゾーンがハブ VNet に既にリンクされている場合でも、クラスターをホストするスポーク VNet にゾーンを直接リンクしようとします。
- カスタム DNS サーバーを使用するスポーク VNet では、クラスターのマネージド ID にスポーク VNet の ネットワーク共同作成者 がない場合、このアクションは失敗する可能性があります。 エラーを回避するには、次のサポートされている構成 のいずれかを 選択します。
-
カスタム プライベート DNS ゾーン: 既存のプライベート ゾーンを指定し、そのリソース ID に
privateDNSZone/--private-dns-zoneを設定します。 そのゾーンを適切な VNet (ハブ VNet など) にリンクし、publicDNSをfalse/use--disable-public-fqdnに設定します。 -
パブリック DNS のみ:
privateDNSZone/--private-dns-zoneをnoneに設定してプライベート ゾーンの作成を無効にし、publicDNSを既定値 (true) のままにします。--disable-public-fqdnは使用しないでください。
-
カスタム プライベート DNS ゾーン: 既存のプライベート ゾーンを指定し、そのリソース ID に
- カスタム DNS サーバーを使用するスポーク VNet では、クラスターのマネージド ID にスポーク VNet の ネットワーク共同作成者 がない場合、このアクションは失敗する可能性があります。 エラーを回避するには、次のサポートされている構成 のいずれかを 選択します。
- プライベート クラスターで kubenet と BYO DNS で Bring Your Own (BYO) ルート テーブル を使用している場合、クラスターの作成は失敗します。 作成を成功させるためには、クラスターの作成に失敗した後、ノード リソース グループの
RouteTableをサブネットに関連付ける必要があります。
カスタム DNS を使用したプライベート AKS クラスターの制限事項
-
privateDNSZone/--private-dns-zoneをnoneandpublicDNS: false/--disable-public-fqdnに同時に設定することはできません。 - 条件付き転送では、サブドメインはサポートされていません。
リソース グループを作成します
az group create コマンドを使用して、リソース グループを作成します。 AKS クラスターに既存のリソース グループを使用することもできます。
az group create \
--name <private-cluster-resource-group> \
--location <location>
既定の基本ネットワークを使用してプライベート AKS クラスターを作成する
az aks create フラグを指定した --enable-private-cluster コマンドを使用して、既定の基本ネットワークでプライベート クラスターを作成します。
このコマンドの主なパラメーター:
-
--enable-private-cluster: プライベート クラスター モードを有効にします。
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--generate-ssh-keys
main.tfという名前のファイルを作成し、次のコードを追加して Terraform バージョンを定義し、Azure プロバイダーを指定します。terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }main.tfに次のコードを追加して、Azure サブスクリプション ID、リソース グループ名、場所、および AKS クラスター名の入力変数を作成します。 必要に応じて既定値を変更できます。variable "subscription_id" { description = "The Azure subscription ID." type = string } variable "resource_group_name" { description = "The name of the resource group for the AKS cluster." type = string default = "rg-private-aks-basic" } variable "location" { description = "The Azure region where the resources will be created." type = string default = "eastus" } variable "aks_cluster_name" { description = "The name of the AKS cluster." type = string default = "aks-private-basic" }次のコードを
main.tfに追加して、Azure リソース グループを作成します。resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location }次のコードを
main.tfに追加して、基本的なネットワークを使用してプライベート AKS クラスターを作成します。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privatebasicaks" private_cluster_enabled = true default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" } identity { type = "SystemAssigned" } network_profile { load_balancer_sku = "standard" network_plugin = "kubenet" } }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
高度なネットワークを使用してプライベート AKS クラスターを作成する
az aks create コマンドを使用して、高度なネットワークを使用してプライベート クラスターを作成します。
このコマンドの主なパラメーター:
-
--enable-private-cluster: プライベート クラスター モードを有効にします。 -
--network-plugin azure: Azure CNI ネットワーク プラグインを指定します。 -
--vnet-subnet-id <subnet-id>: VNet 内の既存のサブネットのリソース ID。 -
--dns-service-ip <dns-service-ip>: クラスター DNS サービスに使用する Kubernetes サービス アドレス範囲内で使用可能な IP アドレス。 たとえば、「10.2.0.10」のように入力します。 -
--service-cidr <service-cidr>: サービス クラスター IP を割り当てる CIDR 表記 IP 範囲。 たとえば、「10.2.0.0/24」のように入力します。
az aks create \
--resource-group <private-cluster-resource-group> \
--name <private-cluster-name> \
--load-balancer-sku standard \
--enable-private-cluster \
--network-plugin azure \
--vnet-subnet-id <subnet-id> \
--dns-service-ip <dns-service-ip> \
--service-cidr <service-cidr> \
--generate-ssh-keys
main.tfという名前のファイルを作成し、次のコードを追加して Terraform バージョンを定義し、Azure プロバイダーを指定します。terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }次のコードを
main.tfに追加して、Azure サブスクリプション ID、リソース グループ名、場所、AKS クラスター名、仮想ネットワーク (VNet) 名、サブネット名の入力変数を作成します。 必要に応じて既定値を変更できます。variable "subscription_id" { description = "The Azure subscription ID." type = string } variable "resource_group_name" { description = "The name of the resource group for the AKS cluster." type = string default = "rg-private-aks-advanced" } variable "location" { description = "The Azure region where the resources will be created." type = string default = "eastus" } variable "aks_cluster_name" { description = "The name of the AKS cluster." type = string default = "aks-private-advanced" } variable "vnet_name" { description = "The name of the virtual network." type = string default = "vnet-private-aks" } variable "subnet_name" { description = "The name of the subnet used by AKS." type = string default = "snet-aks" }main.tfに次のコードを追加して、Azure リソース グループ、VNet、サブネットを作成します。resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location } resource "azurerm_virtual_network" "this" { name = var.vnet_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name address_space = ["10.0.0.0/8"] } resource "azurerm_subnet" "aks" { name = var.subnet_name resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name address_prefixes = ["10.240.0.0/16"] }次のコードを
main.tfに追加して、高度なネットワークを使用して AKS クラスターを作成します。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateadvancedaks" private_cluster_enabled = true default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
プライベート AKS クラスターでカスタム ドメインを使用する
内部でのみ解決できるカスタム ドメインを構成する場合は、「カスタム ドメインを使用する」を参照してください。
プライベート AKS クラスターでパブリック FQDN を無効にする
新しいクラスターでパブリック FQDN を無効にする
az aks create を指定した --disable-public-fqdn コマンドを使用してプライベート AKS クラスターを作成するときに、パブリック FQDN を無効にします。
このコマンドの主なパラメーター:
-
--disable-public-fqdn: API サーバーのパブリック完全修飾ドメイン名 (FQDN) を無効にします。 -
--assign-identity <resource-id>: クラスターに使用するマネージド ID を指定します。 -
--private-dns-zone [system|none]: クラスターに使用するプライベート DNS ゾーンを指定します。systemは、プライベート DNS ゾーンを構成するときの既定値です。--private-dns-zoneを省略すると、AKS によってノード リソース グループにプライベート DNS ゾーンが作成されます。noneでは、プライベート DNS ゾーンの作成が無効になります。
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone [system|none] \
--disable-public-fqdn \
--generate-ssh-keys
「高度なネットワークを使用してプライベート AKS クラスターを作成する」または「既定の基本ネットワークを使用してプライベート AKS クラスターを作成する」の手順 1 から 3 に従って Terraform 構成を設定し、シナリオに応じて必要なリソースを作成します。 この例では、高度なネットワークを使用します。
次のコードを
main.tfに追加して、ユーザー割り当て ID とパブリック FQDN が無効になっているプライベート AKS クラスターを作成します。resource "azurerm_user_assigned_identity" "aks" { name = "id-private-aks-public-fqdn-off" location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name } resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateaks" private_cluster_enabled = true private_cluster_public_fqdn_enabled = false private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
既存のクラスターでパブリック FQDN を無効にする
az aks update フラグを指定した --disable-public-fqdn コマンドを使用して、既存の AKS クラスターでパブリック FQDN を無効にします。
このコマンドの主なパラメーター:
-
--disable-public-fqdn: API サーバーのパブリック完全修飾ドメイン名 (FQDN) を無効にします。
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--disable-public-fqdn
既存の AKS クラスターでパブリック FQDN を無効にするには、次のコードを既存の
main.tfに追加します。 この例では、高度なネットワークを使用します。 関連する Terraform リソースとパラメーターを変更することで、既定の基本的なネットワークを使用するように変更できます。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateaks" private_cluster_enabled = true private_cluster_public_fqdn_enabled = false private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }terraform planコマンドとterraform applyコマンドを使用して、更新された Terraform 構成を適用します。terraform plan terraform apply
プライベート DNS の構成オプション
プライベート AKS クラスターのプライベート DNS 設定は、Azure CLI (--private-dns-zone パラメーター) または Azure Resource Manager (ARM) テンプレート (privateDNSZone プロパティを使用) を使用して構成できます。 次の表は、 --private-dns-zone パラメーター/ privateDNSZone プロパティで使用できるオプションの概要を示しています。
| Setting | Description |
|---|---|
system |
プライベート DNS ゾーンを構成するときの既定値。
--private-dns-zone
/
privateDNSZoneを省略すると、AKS によってノード リソース グループにプライベート DNS ゾーンが作成されます。 |
none |
--private-dns-zone
/
privateDNSZoneを none に設定した場合、AKS はプライベート DNS ゾーンを作成しません。 |
<custom-private-dns-zone-resource-id> |
このパラメーターを使用するには、Azure グローバル クラウドのプライベート DNS ゾーン (privatelink.<region>.azmk8s.io または <subzone>.privatelink.<region>.azmk8s.io) の形式で作成する必要があります。 今後使用するために、プライベート DNS ゾーンのリソース ID が必要です。 また、プライベート DNS Zone Contributor ロールと Network Contributor ロールを持つユーザー割り当て ID またはサービス プリンシパルも必要です。 API Server VNet 統合を使用するクラスターの場合、プライベート DNS ゾーンでは、 private.<region>.azmk8s.io または <subzone>.private.<region>.azmk8s.ioの名前付け形式がサポートされます。
クラスターの作成後にこれらのリソース リソースを変更または削除することはできません。これは、パフォーマンスの問題やクラスターのアップグレードエラーが発生する可能性があるためです。
--fqdn-subdomain <subdomain> は、<custom-private-dns-zone-resource-id> にサブドメインの機能を提供するためにのみ、privatelink.<region>.azmk8s.io と共に使用できます。 サブゾーンを指定する場合、 <subzone> 名には 32 文字の制限があります。 |
プライベート DNS に関する考慮事項
プライベート AKS クラスターのプライベート DNS を構成する場合は、次の考慮事項に注意してください。
- プライベート DNS ゾーンが AKS クラスターとは異なるサブスクリプションにある場合は、両方のサブスクリプションに
Microsoft.ContainerServiceAzure プロバイダーを登録する必要があります。 - AKS クラスターが Active Directory サービス プリンシパルで構成されている場合、AKS では、カスタム プライベート DNS ゾーンでのシステム割り当てマネージド ID の使用はサポートされません。 クラスターでは、ユーザー割り当てマネージド ID 認証を使用する必要があります。
プライベート DNS ゾーンがあるプライベート AKS クラスターを作成する
az aks create コマンドを使用して、プライベート DNS ゾーンを持つプライベート AKS クラスターを作成します。
このコマンドの主なパラメーター:
-
--enable-private-cluster: プライベート クラスター モードを有効にします。 -
--private-dns-zone [system|none]: クラスターのプライベート DNS ゾーンを構成します。systemは、プライベート DNS ゾーンを構成するときの既定値です。--private-dns-zoneを省略すると、AKS によってノード リソース グループにプライベート DNS ゾーンが作成されます。noneでは、プライベート DNS ゾーンの作成が無効になります。 -
--assign-identity <resource-id>: プライベート DNS Zone Contributor ロールと Network Contributor ロールを持つユーザー割り当てマネージド ID のリソース ID。
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone [system|none] \
--generate-ssh-keys
「高度なネットワークを使用してプライベート AKS クラスターを作成する」または「既定の基本ネットワークを使用してプライベート AKS クラスターを作成する」の手順 1 から 3 に従って Terraform 構成を設定し、シナリオに応じて必要なリソースを作成します。 この例では、高度なネットワークを使用します。
main.tfに次のコードを追加して、AKS マネージド プライベート DNS ゾーンを持つプライベート AKS クラスターを作成します。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-system-dns" private_cluster_enabled = true private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
プライベート DNS ゾーンを使用せずにプライベート AKS クラスターを作成する
「高度なネットワークを使用してプライベート AKS クラスターを作成する」または「既定の基本ネットワークを使用してプライベート AKS クラスターを作成する」の手順 1 から 3 に従って Terraform 構成を設定し、シナリオに応じて必要なリソースを作成します。 この例では、高度なネットワークを使用します。
次のコードを追加して、プライベート DNS ゾーンを使用せずに AKS クラスターを作成
main.tf。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-no-dns" private_cluster_enabled = true private_dns_zone_id = "None" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
カスタム プライベート DNS ゾーンまたはプライベート DNS サブゾーンを持つプライベート AKS クラスターを作成する
az aks create コマンドを使用して、カスタム プライベート DNS ゾーンまたはサブゾーンを使用してプライベート AKS クラスターを作成します。
このコマンドの主なパラメーター:
-
--enable-private-cluster: プライベート クラスター モードを有効にします。 -
--private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: Azure グローバル クラウド用の既存のプライベート DNS ゾーンまたはサブゾーンのリソース ID (privatelink.<region>.azmk8s.ioまたは<subzone>.privatelink.<region>.azmk8s.io). -
--assign-identity <resource-id>: プライベート DNS Zone Contributor ロールと Network Contributor ロールを持つユーザー割り当てマネージド ID のリソース ID。
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>] \
--generate-ssh-keys
カスタム プライベート DNS ゾーンを使用する場合は、Azureマネージド DNS に依存するのではなく、DNS インフラストラクチャの作成と管理を行う必要があります。 これには、DNS ゾーンの作成、VNet へのリンク、AKS がレコードを管理するために必要なアクセス許可の割り当てなどが含まれます。
カスタム DNS 構成の場合は、プライベート DNS ゾーン共同作成者ロールと Network 共同作成者 ロールでユーザー割り当てマネージド ID を使用する必要があります。
「高度なネットワークを使用してプライベート AKS クラスターを作成する」または「既定の基本ネットワークを使用してプライベート AKS クラスターを作成する」の手順 1 から 3 に従って Terraform 構成を設定し、シナリオに応じて必要なリソースを作成します。 この例では、高度なネットワークを使用します。
main.tfするコードを追加して、カスタムプライベート DNS ゾーンまたはサブゾーンを持つプライベート AKS クラスターを作成します。resource "azurerm_user_assigned_identity" "aks" { name = "aks-custom-dns-id" location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name } resource "azurerm_private_dns_zone" "aks" { name = "privatelink.eastus.azmk8s.io" resource_group_name = azurerm_resource_group.this.name } resource "azurerm_private_dns_zone_virtual_network_link" "link" { name = "aks-dns-link" resource_group_name = azurerm_resource_group.this.name private_dns_zone_name = azurerm_private_dns_zone.aks.name virtual_network_id = azurerm_virtual_network.this.id } resource "azurerm_role_assignment" "dns" { scope = azurerm_private_dns_zone.aks.id role_definition_name = "Private DNS Zone Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id } resource "azurerm_role_assignment" "network" { scope = azurerm_virtual_network.this.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id } resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-custom-dns" private_cluster_enabled = true private_dns_zone_id = azurerm_private_dns_zone.aks.id default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } depends_on = [ azurerm_role_assignment.dns, azurerm_role_assignment.network ] }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
カスタム プライベート DNS ゾーンとカスタム サブドメインがあるプライベート AKS クラスターを作成する
az aks create コマンドを使用して、カスタムプライベート DNS ゾーンとサブドメインを含むプライベート AKS クラスターを作成します。
このコマンドの主なパラメーター:
-
--enable-private-cluster: プライベート クラスター モードを有効にします。 -
--private-dns-zone <custom-private-dns-zone-resource-id>: Azure グローバル クラウドの既存のプライベート DNS ゾーンのリソース ID:privatelink.<region>.azmk8s.io。 -
--fqdn-subdomain <subdomain>: カスタム プライベート DNS ゾーン内のクラスター FQDN に使用するサブドメイン。 -
--assign-identity <resource-id>: プライベート DNS Zone Contributor ロールと Network Contributor ロールを持つユーザー割り当てマネージド ID のリソース ID。
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone <custom-private-dns-zone-resource-id> \
--fqdn-subdomain <subdomain> \
--generate-ssh-keys
「高度なネットワークを使用してプライベート AKS クラスターを作成する」または「既定の基本ネットワークを使用してプライベート AKS クラスターを作成する」の手順 1 から 3 に従って Terraform 構成を設定し、シナリオに応じて必要なリソースを作成します。 この例では、高度なネットワークを使用します。
次のコードを
main.tfに追加して、カスタム プライベート DNS ゾーンとサブドメインを含むプライベート AKS クラスターを作成します。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-subdomain" private_cluster_enabled = true private_dns_zone_id = azurerm_private_dns_zone.aks.id fqdn_subdomain = "team1" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }手順に従って 、Terraform の初期化、 Terraform 構成の書式設定と検証、 Terraform 実行プランの作成、 Terraform 構成の適用、 AKS クラスターへの接続を行います。
既存のプライベート AKS クラスターをプライベート DNS ゾーンからパブリックに更新する
byo(持ち込み) または system から、none にのみ更新できます。 それ以外の更新値の組み合わせはサポートされていません。
警告
プライベート クラスターを byo または system から none に更新すると、エージェント ノードはパブリック FQDN を使用するように変更されます。 Azure Virtual Machine Scale Setsを使用する AKS クラスターでは、node イメージのアップグレードが実行され、パブリック FQDN でノードが更新されます。
byo パラメーターを system に設定して、none コマンドを使用して、az aks updateまたは--private-dns-zoneからプライベート クラスターをnoneするように更新します。
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--private-dns-zone none
プライベート AKS クラスターをプライベート DNS ゾーンからパブリックに更新するには、次のコードを既存の
main.tfに追加します。 この例では、高度なネットワークを使用します。 関連する Terraform リソースとパラメーターを変更することで、既定の基本的なネットワークを使用するように変更できます。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-update" private_cluster_enabled = true private_dns_zone_id = "None" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }terraform planコマンドとterraform applyコマンドを使用して、更新された Terraform 構成を適用します。terraform plan terraform apply
Terraform を初期化する
main.tf コマンドを使用して、terraform init ファイルを含むディレクトリで Terraform を初期化します。 このコマンドは、Terraform を使用してAzureリソースを管理するために必要なAzure プロバイダーをダウンロードします。
terraform init
Terraform 構成の書式設定と検証
terraform fmtコマンドとterraform validate コマンドを使用して、Terraform 構成の書式設定と検証を行います。
terraform fmt
terraform validate
Terraform実行計画を作成する
terraform plan コマンドを使用して Terraform 実行プランを作成します。 このコマンドは、Terraform が Azure サブスクリプションで作成または変更するリソースを示します。
terraform plan -var="subscription_id=<your-subscription-id>"
Terraform 構成を適用する
実行プランを確認して確認した後、 terraform apply コマンドを使用して Terraform 構成を適用します。 このコマンドは、Azure サブスクリプションの main.tf ファイルで定義されているリソースを作成または変更します。
terraform apply -var="subscription_id=<your-subscription-id>"
プライベート AKS クラスターに接続するように kubectl を構成する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。 Azure Cloud Shellを使用する場合、kubectl は既にインストールされています。
kubectl をローカルにインストールするには、az aks install-cli コマンドを使用します。
kubectlコマンドを使用して、Kubernetes クラスターに接続するようにaz aks get-credentialsを構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>kubectl getコマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。kubectl get nodesこのコマンドは、次の出力例のような出力を返します。
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-12345678-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-12345678-vmss000002 Ready agent 3h6m v1.15.11