Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel hilft Ihnen, einen privaten linkbasierten AKS-Cluster mithilfe von Azure CLI oder Terraform bereitzustellen. Wenn Sie einen AKS-Cluster ohne erforderlichen privaten Link oder Tunnel erstellen möchten, lesen Sie Create an Azure Kubernetes Service (AKS) Cluster with API Server VNet integration.
Übersicht über private Cluster in AKS
In einem privaten Cluster verfügt die Steuerungsebene oder der API-Server über interne IP-Adressen, die im RFC1918 - Adresszuweisung für privates Internetdokument definiert sind. Durch die Verwendung eines privaten Clusters können Sie sicherstellen, dass der Netzwerkdatenverkehr zwischen Ihrem API-Server und den Knotenpools ausschließlich im privaten Netzwerk verbleibt.
Die Steuerebene oder der API-Server befindet sich in einer AKS-verwalteten Azure Ressourcengruppe, und Ihr Cluster- oder Knotenpool befindet sich in Ihrer Ressourcengruppe. Der Server und der Cluster- oder Knotenpool können über den Azure Private Link-Dienst im virtuellen API-Servernetzwerk und einem privaten Endpunkt kommunizieren, der im Subnetz Ihres AKS-Clusters verfügbar gemacht wird.
Wenn Sie einen privaten AKS-Cluster erstellen, erstellt AKS standardmäßig private und öffentliche vollqualifizierte Domänennamen (FQDNs) mit entsprechenden DNS-Zonen. Ausführliche DNS-Konfigurationsoptionen finden Sie unter Konfigurieren einer privaten DNS-Zone, einer privaten DNS-Unterzone oder einer benutzerdefinierten Unterdomäne.
Regionale Verfügbarkeit
Private Cluster sind in öffentlichen Regionen, Azure Government und Microsoft Azure verfügbar, die von 21Vianet-Regionen betrieben werden, in denen AKS unterstützt wird.
Wichtig
Alle Microsoft Defender for Cloud Funktionen werden am 18. August 2026 in der Azure-Region in China offiziell eingestellt. Aufgrund dieser bevorstehenden Stilllegung können Azure-Kunden in China keine neuen Abonnements mehr für den Dienst anmelden. Ein neues Abonnement ist jedes Abonnement, das noch nicht in den Microsoft Defender for Cloud-Dienst vor dem 18. August 2025 integriert wurde, dem Datum der Einstellungsankündigung. Weitere Informationen zur Einstellung finden Sie unter Microsoft Defender for Cloud Deprecation in Microsoft Azure Operated by 21Vianet Announcement.
Kunden sollten mit ihren Kundenservicemitarbeitern für Microsoft Azure, betrieben von 21Vianet, zusammenarbeiten, um die Auswirkungen dieser Einstellung auf ihren eigenen Betrieb zu bewerten.
Voraussetzungen für private AKS-Cluster
Ein aktives Azure-Abonnement. Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein free-Konto, bevor Sie beginnen.
Legen Sie ihren Abonnementkontext mithilfe des
az account setBefehls fest. Beispiel:az account set --subscription "00000000-0000-0000-0000-000000000000"Azure CLI Version 2.28.0 oder höher. Suchen Sie Ihre Version mithilfe des
az --versionBefehls. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI.Wenn Sie Azure Resource Manager (ARM) oder die Azure REST-API verwenden, muss die AKS-API-Version 2021-05-01 oder höher sein.
Um einen benutzerdefinierten DNS-Server zu verwenden, fügen Sie die Azure öffentliche IP-Adresse 168.63.129.16 als upstream DNS-Server im benutzerdefinierten DNS-Server hinzu, und stellen Sie sicher, dass Sie diese öffentliche IP-Adresse als first DNS-Server hinzufügen. Weitere Informationen zur Azure IP-Adresse finden Sie unter What is IP address 168.63.129.16?
- Die DNS-Zone des Clusters sollte das sein, was Sie an 168.63.129.16 weiterleiten. Weitere Informationen zu Zonennamen finden Sie in Azure Dienst-DNS-Zonenkonfiguration.
Vorhandene AKS-Cluster, die mit der VNet-Integration von API-Servern aktiviert sind, können den privaten Clustermodus aktiviert haben. Weitere Informationen finden Sie unter Aktivieren oder Deaktivieren des privaten Clustermodus für einen vorhandenen Cluster mit API Server-VNet-Integration.
Wenn Sie Azure Container Registry für einen privaten AKS-Cluster aktivieren müssen, stellen Sie einen privaten Link für die Azure Container Registry im virtuellen Clusternetzwerk (VNet) her oder richten Sie Peering zwischen dem VNet der Azure Container Registry und dem VNet des privaten Clusters ein.
kubectl installiert. Sie können es lokal mit dem
az aks install-cliBefehl installieren.
- Terraform lokal installiert. Installationsanweisungen finden Sie unter Install Terraform.
Wichtig
Ab November 30, 2025 unterstützt Azure Kubernetes Service (AKS) keine Sicherheitsupdates mehr für Azure Linux 2.0. Das Azure Linux 2.0-Knoten-Image wurde am Release 202512.06.0 eingefroren. Ab dem 31. März 2026 werden Knotenimages entfernt, und Sie können Ihre Knotenpools nicht skalieren. Migrieren Sie zu einer unterstützten Azure Linux-Version, indem Sie Ihre Knotenpools zu einer unterstützten Kubernetes-Version aktualisieren oder zu osSku AzureLinux3 migrieren. Weitere Informationen finden Sie im GitHub-Problem „Außerbetriebnahme“ und in der Ankündigung zur Außerbetriebnahme von Azure-Updates. Um über Ankündigungen und Updates auf dem Laufenden zu bleiben, folgen Sie den AKS-Versionshinweisen.
Einschränkungen
- IP-autorisierte Bereiche gelten nur für den öffentlichen API-Server. Sie können diese Bereiche nicht auf den Endpunkt des privaten API-Servers anwenden.
- Azure Private Link Dienstbeschränkungen gelten für private Cluster.
- Es gibt keine Unterstützung für Azure DevOps von Microsoft gehostete Agents mit privaten Clustern. Erwägen Sie die Verwendung selbst gehosteter Agents.
- Das Löschen oder Ändern des privaten Endpunkts im Kundensubnetz bewirkt, dass der Cluster nicht mehr funktioniert.
- Azure Private Link Dienst wird nur für Standard-Azure Load Balancer unterstützt. Ein Basis-Azure-Load-Balancer wird nicht unterstützt.
Hub and Spoke mit benutzerdefiniertem DNS für private AKS-Cluster
Hub- und Spoke-Architekturen werden häufig verwendet, um Netzwerke in Azure bereitzustellen. In vielen dieser Bereitstellungen sind die DNS-Einstellungen in den Spoke-VNets so konfiguriert, dass sie auf eine zentrale DNS-Weiterleitung verweisen, um eine lokale und Azure-basierte DNS-Auflösung zu ermöglichen.
Das folgende Diagramm veranschaulicht eine Hub- und Speichenarchitektur für einen privaten AKS-Cluster mit benutzerdefiniertem DNS:
- Wenn ein privater Cluster erstellt wird, werden standardmäßig ein privater Endpunkt (1) und eine private DNS-Zone (2) in der clusterverwalteten Ressourcengruppe erstellt. Der Cluster verwendet einen
A-Eintrag in der privaten Zone, um die IP-Adresse des privaten Endpunkts für die Kommunikation mit dem API-Server aufzulösen. - Die private DNS-Zone ist nur mit dem VNet verknüpft, an das die Clusterknoten angefügt sind (3), was bedeutet, dass der private Endpunkt nur von Hosts in diesem verknüpften VNet aufgelöst werden kann. In Szenarien, in denen kein benutzerdefiniertes DNS im VNet konfiguriert ist (Standard), funktioniert es problemlos, da Hosts auf 168.63.129.16 für DNS zeigen und Einträge in der privaten DNS-Zone aufgrund der Verknüpfung auflösen können.
- Wenn Sie das standardmäßige Verhalten von privaten DNS-Zonen beibehalten, versucht AKS, die Zone direkt mit dem Spoke-VNet zu verbinden, das den Cluster hostet, auch wenn die Zone bereits mit einem Hub-VNet verbunden ist.
- In Spoke-VNets, die benutzerdefinierte DNS-Server verwenden, kann diese Aktion fehlschlagen, wenn die verwaltete Identität des Clusters Netzwerk-Beitragender im Spoke-VNet fehlt. Um den Fehler zu verhindern, wählen Sie eine der folgenden unterstützten Konfigurationen aus:
-
Benutzerdefinierte private DNS-Zone: Stellen Sie eine vorhandene private Zone bereit, und legen Sie sie auf ihre Ressourcen-ID fest
privateDNSZone/--private-dns-zone. Verknüpfen Sie diese Zone mit dem entsprechenden VNet (z. B. dem Hub-VNet), und stellen SiepublicDNSauffalseein / verwenden Sie--disable-public-fqdn. -
Nur öffentliches DNS: Deaktivieren Sie die Erstellung privater Zonen, indem Sie
privateDNSZone/--private-dns-zoneaufnonesetzen undpublicDNSauf dem Standardwert (true) belassen /--disable-public-fqdnnicht verwenden.
-
Benutzerdefinierte private DNS-Zone: Stellen Sie eine vorhandene private Zone bereit, und legen Sie sie auf ihre Ressourcen-ID fest
- In Spoke-VNets, die benutzerdefinierte DNS-Server verwenden, kann diese Aktion fehlschlagen, wenn die verwaltete Identität des Clusters Netzwerk-Beitragender im Spoke-VNet fehlt. Um den Fehler zu verhindern, wählen Sie eine der folgenden unterstützten Konfigurationen aus:
- Wenn Sie BYO-Routingtabelle (Bring Your Own) mit kubenet und BYO DNS mit privaten Clustern verwenden, schlägt die Erstellung von Clustern fehl. Nach dem Fehler bei der Clustererstellung müssen Sie dem Subnetz die
RouteTablein der Knotenressourcengruppe zuordnen, damit die Erstellung erfolgreich ist.
Einschränkungen für private AKS-Cluster mit benutzerdefiniertem DNS
- Die Einstellung
privateDNSZone/--private-dns-zoneaufnoneundpublicDNS: false/--disable-public-fqdngleichzeitig wird nicht unterstützt. - Die bedingte Weiterleitung unterstützt keine Unterdomänen.
Erstellen einer Ressourcengruppe
Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe. Sie können auch eine vorhandene Ressourcengruppe für Ihren AKS-Cluster verwenden.
az group create \
--name <private-cluster-resource-group> \
--location <location>
Erstellen eines privaten AKS-Clusters mit grundlegender Standardnetzwerkkonfiguration.
Erstellen Sie mit dem Befehl „az aks create“ mit dem --enable-private-cluster-Flag einen privaten Cluster mit Standardnetzwerk.
Schlüsselparameter in diesem Befehl:
-
--enable-private-cluster: Aktiviert den privaten Clustermodus.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--generate-ssh-keys
Erstellen Sie eine Datei mit dem Namen
main.tf, und fügen Sie den folgenden Code hinzu, um die Terraform-Version zu definieren und den Azure Anbieter anzugeben:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }Fügen Sie den folgenden Code zu
main.tfhinzu, um Eingabevariablen für Ihre Azure Abonnement-ID, den Ressourcengruppennamen, den Standort und den AKS-Clusternamen zu erstellen. Sie können die Standardwerte nach Bedarf ändern.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" }Fügen Sie dem
main.tfden folgenden Code hinzu, um eine Azure Ressourcengruppe zu erstellen:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location }Fügen Sie den folgenden Code zu
main.tfhinzu, um einen privaten AKS-Cluster mit einfacher Netzwerkkonfiguration zu erstellen.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" } }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Erstellen eines privaten AKS-Clusters mit erweiterten Netzwerken
Erstellen Sie einen privaten Cluster mit erweiterten Netzwerken mithilfe des az aks create Befehls.
Schlüsselparameter in diesem Befehl:
-
--enable-private-cluster: Aktiviert den privaten Clustermodus. -
--network-plugin azure: Gibt das Azure CNI-Netzwerk-Plug-In an. -
--vnet-subnet-id <subnet-id>: Die Ressourcen-ID eines vorhandenen Subnetzes in einem VNet. -
--dns-service-ip <dns-service-ip>: Eine verfügbare IP-Adresse im Kubernetes-Dienstadressenbereich, die für den Cluster-DNS-Dienst verwendet werden soll. Beispiel:10.2.0.10. -
--service-cidr <service-cidr>: Ein CIDR-Notations-IP-Bereich, aus dem Dienstcluster-IPs zugewiesen werden sollen. Beispiel: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
Erstellen Sie eine Datei mit dem Namen
main.tf, und fügen Sie den folgenden Code hinzu, um die Terraform-Version zu definieren und den Azure Anbieter anzugeben:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }Fügen Sie den folgenden Code zu
main.tfhinzu, um Eingabevariablen für Ihre Azure Abonnement-ID, Ressourcengruppenname, Standort, AKS-Clustername, VNet-Namen (Virtual Network) und Subnetznamen zu erstellen. Sie können die Standardwerte nach Bedarf ändern.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" }Fügen Sie den folgenden Code zu
main.tfhinzu, um eine Azure Ressourcengruppe, VNet und Subnetz zu erstellen: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"] }Fügen Sie den folgenden Code zu
main.tfhinzu, um den AKS-Cluster mit erweiterter Netzwerkkonfiguration zu erstellen.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" } }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Verwenden von benutzerdefinierten Domänen mit privaten AKS-Clustern
Wenn Sie benutzerdefinierte Domänen konfigurieren möchten, die nur intern aufgelöst werden können, lesen Sie "Verwenden von benutzerdefinierten Domänen".
Deaktivieren eines öffentlichen FQDNs in einem privaten AKS-Cluster
Deaktivieren eines öffentlichen FQDN in einem neuen Cluster
Deaktivieren Sie einen öffentlichen FQDN beim Erstellen eines privaten AKS-Clusters mit dem Befehl az aks create und dem Flag --disable-public-fqdn.
Schlüsselparameter in diesem Befehl:
-
--disable-public-fqdn: Deaktiviert den vollqualifizierten öffentlichen Domänennamen (FQDN) für den API-Server. -
--assign-identity <resource-id>: Gibt die verwaltete Identität an, die für den Cluster verwendet werden soll. -
--private-dns-zone [system|none]: Gibt die private DNS-Zone an, die für den Cluster verwendet werden soll.systemist der Standardwert beim Konfigurieren einer privaten DNS-Zone. Wenn Sie weglassen--private-dns-zone, erstellt AKS eine private DNS-Zone in der Knotenressourcengruppe.nonedeaktiviert die Erstellung einer privaten DNS-Zone.
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
Führen Sie die Schritte 1 bis 3 im Erstellen eines privaten AKS-Clusters mit erweiterter Netzwerkkonfiguration oder Erstellen eines privaten AKS-Clusters mit Standard-Netzwerkkonfiguration aus, um die Terraform-Konfiguration einzurichten und die erforderlichen Ressourcen je nach Szenario zu erstellen. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet.
Fügen Sie den folgenden Code zu
main.tfhinzu, um einen privaten AKS-Cluster mit einer vom Benutzer zugewiesenen Identität zu erstellen und den öffentlichen FQDN zu deaktivieren.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" } }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Deaktivieren eines öffentlichen FQDN in einem vorhandenen Cluster
Deaktivieren Sie einen öffentlichen FQDN in einem vorhandenen AKS-Cluster mit dem Befehl „az aks update“ mit dem --disable-public-fqdn-Flag.
Schlüsselparameter in diesem Befehl:
-
--disable-public-fqdn: Deaktiviert den vollqualifizierten öffentlichen Domänennamen (FQDN) für den API-Server.
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--disable-public-fqdn
Fügen Sie dem vorhandenen
main.tfCode den folgenden Code hinzu, um den öffentlichen FQDN für einen vorhandenen AKS-Cluster zu deaktivieren. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet. Sie können sie so ändern, dass sie standardmäßig grundlegende Netzwerke verwendet, indem Sie die relevanten Terraform-Ressourcen und -Parameter ändern.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" } }Wenden Sie die aktualisierte Terraform-Konfiguration mit den Befehlen
terraform planundterraform applyan.terraform plan terraform apply
Konfigurationsoptionen für privates DNS
Sie können private DNS-Einstellungen für einen privaten AKS-Cluster mithilfe des Azure CLI (mit dem parameter --private-dns-zone) oder einer AZURE RESOURCE MANAGER-Vorlage (mit der Eigenschaft privateDNSZone) konfigurieren. In der folgenden Tabelle sind die Optionen aufgeführt, die für den --private-dns-zone Parameter oder die privateDNSZone Eigenschaft verfügbar sind.
| Setting | Description |
|---|---|
system |
Der Standardwert beim Konfigurieren einer privaten DNS-Zone. Wenn Sie weglassen --private-dns-zone / privateDNSZone, erstellt AKS eine private DNS-Zone in der Knotenressourcengruppe. |
none |
Wenn Sie --private-dns-zone / privateDNSZone auf none festlegen, erstellt AKS keine private DNS-Zone. |
<custom-private-dns-zone-resource-id> |
Um diesen Parameter zu verwenden, müssen Sie eine private DNS-Zone im folgenden Format für Azure globale Cloud erstellen: privatelink.<region>.azmk8s.io oder <subzone>.privatelink.<region>.azmk8s.io. Sie benötigen die Ressourcen-ID der privaten DNS-Zone für die zukünftige Verwendung. Außerdem benötigen Sie eine benutzerzugewiesene Identität oder einen Dienstprinzipal mit den Rollen Privates DNS Zone Contributor und Network Contributor. Bei Clustern, die die API Server VNet-Integration verwenden, unterstützt eine private DNS-Zone das Benennungsformat von private.<region>.azmk8s.io oder <subzone>.private.<region>.azmk8s.io. Sie können diese Ressourcenressource nach dem Erstellen des Clusters nicht ändern oder löschen, da sie Leistungsprobleme und Clusterupgradefehler verursachen kann. Sie können --fqdn-subdomain <subdomain> nur mit <custom-private-dns-zone-resource-id> verwenden, um Unterdomänenfunktionen für privatelink.<region>.azmk8s.io bereitzustellen. Wenn Sie eine Unterzone angeben, gibt es eine Beschränkung von 32 Zeichen für den <subzone> Namen. |
Überlegungen zu privatem DNS
Beachten Sie beim Konfigurieren von privatem DNS für einen privaten AKS-Cluster die folgenden Überlegungen:
- Wenn sich die private DNS-Zone in einem anderen Abonnement als der AKS-Cluster befindet, müssen Sie den
Microsoft.ContainerServiceAzure-Anbieter in beiden Abonnements registrieren. - Wenn Ihr AKS-Cluster mit einem Active Directory Dienstprinzipal konfiguriert ist, unterstützt AKS nicht die Verwendung einer vom System zugewiesenen verwalteten Identität mit benutzerdefinierter privater DNS-Zone. Der Cluster muss die vom Benutzer zugewiesene verwaltete Identitätsauthentifizierung verwenden.
Erstellen eines privaten AKS-Clusters mit privater DNS-Zone
Erstellen Sie einen privaten AKS-Cluster mit einer privaten DNS-Zone mithilfe des az aks create Befehls.
Schlüsselparameter in diesem Befehl:
-
--enable-private-cluster: Aktiviert den privaten Clustermodus. -
--private-dns-zone [system|none]: Konfiguriert die private DNS-Zone für den Cluster.systemist der Standardwert beim Konfigurieren einer privaten DNS-Zone. Wenn Sie weglassen--private-dns-zone, erstellt AKS eine private DNS-Zone in der Knotenressourcengruppe.nonedeaktiviert die Erstellung einer privaten DNS-Zone. -
--assign-identity <resource-id>: Die Ressourcen-ID einer vom Benutzer zugewiesenen verwalteten Identität mit den Rollen Privates DNS Zone Contributor und Network Contributor.
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
Führen Sie die Schritte 1 bis 3 im Erstellen eines privaten AKS-Clusters mit erweiterter Netzwerkkonfiguration oder Erstellen eines privaten AKS-Clusters mit Standard-Netzwerkkonfiguration aus, um die Terraform-Konfiguration einzurichten und die erforderlichen Ressourcen je nach Szenario zu erstellen. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet.
Fügen Sie den folgenden Code hinzu, um einen privaten AKS-Cluster mit einer AKS-verwalteten privaten DNS-Zone zu
main.tferstellen: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" } }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Erstellen eines privaten AKS-Clusters ohne private DNS-Zone
Führen Sie die Schritte 1 bis 3 im Erstellen eines privaten AKS-Clusters mit erweiterter Netzwerkkonfiguration oder Erstellen eines privaten AKS-Clusters mit Standard-Netzwerkkonfiguration aus, um die Terraform-Konfiguration einzurichten und die erforderlichen Ressourcen je nach Szenario zu erstellen. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet.
Fügen Sie den folgenden Code zu
main.tfhinzu, um den AKS-Cluster ohne private DNS-Zone zu erstellen.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" } }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Erstellen eines privaten AKS-Clusters mit einer benutzerdefinierten privaten DNS-Zone oder einer privaten DNS-Unterzone
Erstellen Sie einen privaten AKS-Cluster mit einer benutzerdefinierten privaten DNS-Zone oder Unterzone mithilfe des az aks create Befehls.
Schlüsselparameter in diesem Befehl:
-
--enable-private-cluster: Aktiviert den privaten Clustermodus. -
--private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: Die Ressourcen-ID einer vorhandenen privaten DNS-Zone oder -Unterzone im folgenden Format für Azure globale Cloud:privatelink.<region>.azmk8s.iooder<subzone>.privatelink.<region>.azmk8s.io. -
--assign-identity <resource-id>: Die Ressourcen-ID einer vom Benutzer zugewiesenen verwalteten Identität mit den Rollen Privates DNS Zone Contributor und Network Contributor.
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
Wenn Sie eine benutzerdefinierte private DNS-Zone verwenden, sind Sie dafür verantwortlich, die DNS-Infrastruktur zu erstellen und zu verwalten, anstatt sich auf Azure verwalteten DNS zu verlassen. Dazu gehört das Erstellen der DNS-Zone, das Verknüpfen mit Ihrem VNet und das Zuweisen der erforderlichen Berechtigungen für AKS zum Verwalten von Datensätzen.
Für benutzerdefinierte DNS-Konfigurationen müssen Sie eine vom Benutzer zugewiesene Managed Identity mit den Rollen Privates DNS Zone Contributor und Netzwerkmitwirkender verwenden.
Führen Sie die Schritte 1 bis 3 im Erstellen eines privaten AKS-Clusters mit erweiterter Netzwerkkonfiguration oder Erstellen eines privaten AKS-Clusters mit Standard-Netzwerkkonfiguration aus, um die Terraform-Konfiguration einzurichten und die erforderlichen Ressourcen je nach Szenario zu erstellen. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet.
Fügen Sie den Code hinzu, um einen privaten AKS-Cluster mit einer benutzerdefinierten privaten DNS-Zone oder -Unterzone zu
main.tferstellen: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 ] }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Erstellen eines privaten AKS-Clusters mit einer benutzerdefinierten privaten DNS-Zone und einer benutzerdefinierten Unterdomäne
Erstellen Sie einen privaten AKS-Cluster mit einer benutzerdefinierten privaten DNS-Zone und Unterdomäne mithilfe des az aks create Befehls.
Schlüsselparameter in diesem Befehl:
-
--enable-private-cluster: Aktiviert den privaten Clustermodus. -
--private-dns-zone <custom-private-dns-zone-resource-id>: Die Ressourcen-ID einer vorhandenen privaten DNS-Zone im folgenden Format für Azure globale Cloud:privatelink.<region>.azmk8s.io. -
--fqdn-subdomain <subdomain>: Die Unterdomäne, die für den Cluster-FQDN innerhalb der benutzerdefinierten privaten DNS-Zone verwendet werden soll. -
--assign-identity <resource-id>: Die Ressourcen-ID einer vom Benutzer zugewiesenen verwalteten Identität mit den Rollen Privates DNS Zone Contributor und Network Contributor.
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
Führen Sie die Schritte 1 bis 3 im Erstellen eines privaten AKS-Clusters mit erweiterter Netzwerkkonfiguration oder Erstellen eines privaten AKS-Clusters mit Standard-Netzwerkkonfiguration aus, um die Terraform-Konfiguration einzurichten und die erforderlichen Ressourcen je nach Szenario zu erstellen. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet.
Fügen Sie den folgenden Code hinzu, um einen privaten AKS-Cluster mit einer benutzerdefinierten privaten DNS-Zone und Unterdomäne zu
main.tferstellen: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" } }Führen Sie die Schritte aus, um Terraform zu initialisieren, die Terraform-Konfiguration zu formatieren und zu validieren, einen Terraform-Ausführungsplan zu erstellen, die Terraform-Konfiguration anzuwenden und eine Verbindung mit dem AKS-Cluster herzustellen.
Aktualisieren eines vorhandenen privaten AKS-Clusters von einer privaten DNS-Zone auf öffentliche
Sie können nur von byo (Bring Your Own) oder system auf none aktualisieren. Es wird keine andere Kombination von Updatewerten unterstützt.
Warnung
Wenn Sie einen privaten Cluster von byo oder system auf none aktualisieren, stellen sich die Agent-Knoten auf die Verwendung eines öffentlichen FQDN um. In einem AKS-Cluster, der Azure Virtual Machine Scale Sets verwendet, wird ein Upgrade der Knotenimages durchgeführt, um Ihre Knoten mit dem öffentlichen FQDN zu aktualisieren.
Aktualisieren Sie einen privaten Cluster von byo oder system auf none, indem Sie den az aks update-Befehl verwenden und den --private-dns-zone-Parameter auf none festlegen.
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--private-dns-zone none
Fügen Sie dem vorhandenen
main.tfCode den folgenden Code hinzu, um den privaten AKS-Cluster von einer privaten DNS-Zone auf öffentlich zu aktualisieren. In diesem Beispiel werden fortgeschrittene Netzwerke verwendet. Sie können sie so ändern, dass sie standardmäßig grundlegende Netzwerke verwendet, indem Sie die relevanten Terraform-Ressourcen und -Parameter ändern.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" } }Wenden Sie die aktualisierte Terraform-Konfiguration mit den Befehlen
terraform planundterraform applyan.terraform plan terraform apply
Initialisieren Sie Terraform
Initialisieren Sie Terraform im Verzeichnis, das Ihre main.tf Datei enthält, mithilfe des terraform init Befehls. Dieser Befehl lädt den Azure Anbieter herunter, der zum Verwalten von Azure Ressourcen mit Terraform erforderlich ist.
terraform init
Formatieren und Überprüfen der Terraform-Konfiguration
Formatieren Sie und validieren Sie die Terraform-Konfiguration mit den terraform fmt und terraform validate Befehle.
terraform fmt
terraform validate
Terraform-Ausführungsplan erstellen
Erstellen Sie mit dem Befehl „terraform plan“ einen Terraform-Ausführungsplan. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellen oder ändern wird.
terraform plan -var="subscription_id=<your-subscription-id>"
Terraform-Konfiguration anwenden
Wenden Sie nach der Überprüfung und Bestätigung des Ausführungsplans die Terraform-Konfiguration mit dem terraform apply Befehl an. Mit diesem Befehl werden die in Ihrer main.tf Datei definierten Ressourcen in Ihrem Azure-Abonnement erstellt oder geändert.
terraform apply -var="subscription_id=<your-subscription-id>"
Konfigurieren von kubectl zum Herstellen einer Verbindung mit einem privaten AKS-Cluster
Um einen Kubernetes-Cluster zu verwalten, verwenden Sie den Kubernetes-Befehlszeilenclient kubectl.
kubectl ist bereits installiert, wenn Sie Azure Cloud Shell verwenden. Um kubectl lokal zu installieren, verwenden Sie den Befehl az aks install-cli.
Mit dem Befehl
kubectlkönnen Sieaz aks get-credentialsfür die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen und die Kubernetes-CLI für ihre Verwendung konfiguriert.az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>Überprüfen Sie die Verbindung mit dem Cluster mithilfe des Befehls
kubectl get. Dieser Befehl gibt eine Liste der Clusterknoten zurück.kubectl get nodesDer Befehl gibt die Ausgabe ähnlich der folgenden Beispielausgabe zurück:
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