Freigeben über


Erstellen eines privaten Azure Kubernetes Service (AKS)-Clusters

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 set Befehls 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 --version Befehls. 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?

  • 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-cli Befehl 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:

Hub-and-Spoke für privaten Cluster

  • 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 Sie publicDNS auf false ein / verwenden Sie --disable-public-fqdn.
      • Nur öffentliches DNS: Deaktivieren Sie die Erstellung privater Zonen, indem Sie privateDNSZone / --private-dns-zone auf nonesetzen undpublicDNS auf dem Standardwert (true) belassen / --disable-public-fqdn nicht verwenden.
  • 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 RouteTable in der Knotenressourcengruppe zuordnen, damit die Erstellung erfolgreich ist.

Einschränkungen für private AKS-Cluster mit benutzerdefiniertem DNS

  • Die Einstellung privateDNSZone / --private-dns-zone auf noneundpublicDNS: false / --disable-public-fqdn gleichzeitig 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
  1. 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
    }
    
  2. Fügen Sie den folgenden Code zu main.tf hinzu, 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"
    }
    
  3. Fügen Sie dem main.tf den folgenden Code hinzu, um eine Azure Ressourcengruppe zu erstellen:

    resource "azurerm_resource_group" "this" {
      name     = var.resource_group_name
      location = var.location
    }
    
  4. Fügen Sie den folgenden Code zu main.tf hinzu, 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"
      }
    }
    
  5. 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
  1. 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
    }
    
  2. Fügen Sie den folgenden Code zu main.tf hinzu, 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"
    }
    
  3. Fügen Sie den folgenden Code zu main.tf hinzu, 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"]
    }
    
  4. Fügen Sie den folgenden Code zu main.tf hinzu, 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"
      }
    }
    
  5. 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. system ist der Standardwert beim Konfigurieren einer privaten DNS-Zone. Wenn Sie weglassen --private-dns-zone, erstellt AKS eine private DNS-Zone in der Knotenressourcengruppe. none deaktiviert 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
  1. 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.

  2. Fügen Sie den folgenden Code zu main.tf hinzu, 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"
      }
    }
    
  3. 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
  1. Fügen Sie dem vorhandenen main.tf Code 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"
      }
    }
    
  2. Wenden Sie die aktualisierte Terraform-Konfiguration mit den Befehlen terraform plan und terraform apply an.

    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.ContainerService Azure-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. system ist der Standardwert beim Konfigurieren einer privaten DNS-Zone. Wenn Sie weglassen --private-dns-zone, erstellt AKS eine private DNS-Zone in der Knotenressourcengruppe. none deaktiviert 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
  1. 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.

  2. Fügen Sie den folgenden Code hinzu, um einen privaten AKS-Cluster mit einer AKS-verwalteten privaten DNS-Zone zu main.tf 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-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"
     }
    }
    
  3. 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

  1. 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.

  2. Fügen Sie den folgenden Code zu main.tf hinzu, 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"
     }
    }
    
  3. 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.io oder <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.

  1. 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.

  2. Fügen Sie den Code hinzu, um einen privaten AKS-Cluster mit einer benutzerdefinierten privaten DNS-Zone oder -Unterzone zu main.tf erstellen:

    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
     ]
    }
    
  3. 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
  1. 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.

  2. Fügen Sie den folgenden Code hinzu, um einen privaten AKS-Cluster mit einer benutzerdefinierten privaten DNS-Zone und Unterdomäne zu main.tf 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-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"
     }
    }
    
  3. 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
  1. Fügen Sie dem vorhandenen main.tf Code 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"
     }
    }
    
  2. Wenden Sie die aktualisierte Terraform-Konfiguration mit den Befehlen terraform plan und terraform apply an.

    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.

  1. Mit dem Befehl kubectl können Sie az aks get-credentials fü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>
    
  2. Überprüfen Sie die Verbindung mit dem Cluster mithilfe des Befehls kubectl get. Dieser Befehl gibt eine Liste der Clusterknoten zurück.

    kubectl get nodes
    

    Der 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