Tworzenie prywatnego klastra Azure Kubernetes Service (AKS)

Ten artykuł ułatwia wdrażanie klastra usługi AKS opartego na łączach prywatnych przy użyciu Azure CLI lub narzędzia Terraform. Jeśli interesuje Cię tworzenie klastra usługi AKS bez wymaganego łącza prywatnego lub tunelu, zobacz Tworzenie klastra Azure Kubernetes Service (AKS) za pomocą integracji z siecią wirtualną serwera API.

Przegląd klastrów prywatnych w usłudze AKS

W prywatnym klastrze warstwa sterująca lub serwer API ma wewnętrzne adresy IP zdefiniowane w dokumencie RFC1918 - Alokacja Adresów dla Prywatnego Internetu. Korzystając z klastra prywatnego, można zapewnić, że ruch sieciowy między serwerem interfejsu API i pulami węzłów pozostaje tylko w sieci prywatnej.

Płaszczyzna sterowania lub serwer interfejsu API znajduje się w grupie zasobów zarządzanej przez Azure dla usługi AKS, a Twój klaster lub pula węzłów znajduje się w Twojej grupie zasobów. Serwer oraz pula węzłów mogą komunikować się ze sobą za pośrednictwem usługi Azure Private Link w sieci wirtualnej serwera interfejsu API oraz prywatnego punktu końcowego, który jest dostępny w podsieci klastra AKS.

Podczas tworzenia prywatnego klastra usługi AKS usługa AKS domyślnie tworzy zarówno prywatne, jak i publiczne w pełni kwalifikowane nazwy domen (FQDN) z odpowiednimi strefami DNS. Aby uzyskać szczegółowe opcje konfiguracji DNS, zobacz Konfigurowanie prywatnej strefy DNS, prywatnej podstrefy DNS lub niestandardowej poddomeny.

Dostępność w regionach

Klastry prywatne są dostępne w regionach publicznych, Azure Government i Microsoft Azure obsługiwanych przez regiony 21Vianet, w których jest obsługiwany AKS.

Ważne

Wszystkie funkcje Microsoft Defender dla Chmury zostaną oficjalnie wycofane w Azure w regionie Chin 18 sierpnia 2026 r. Ze względu na zbliżającą się emeryturę Azure w Chinach klienci nie mogą już dołączać nowych subskrypcji do usługi. Nowa subskrypcja to każda subskrypcja, która nie została jeszcze dołączona do usługi Microsoft Defender dla Chmury przed dniem 18 sierpnia 2025 r., datą ogłoszenia o wycofaniu. Aby uzyskać więcej informacji na temat wycofania, zobacz Ogłoszenie o wycofaniu Microsoft Defender dla Chmury w Microsoft Azure obsługiwanym przez 21Vianet.

Klienci powinni współpracować ze swoimi przedstawicielami kont dla Microsoft Azure obsługiwanych przez firmę 21Vianet, aby ocenić wpływ tej emerytury na własne operacje.

Wymogi dotyczące prywatnych klastrów AKS

  • Aktywna subskrypcja Azure. Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz konto free.

  • Ustaw kontekst subskrypcji przy użyciu az account set polecenia . Przykład:

    az account set --subscription "00000000-0000-0000-0000-000000000000"
    
  • Azure CLI w wersji 2.28.0 lub nowszej. Znajdź swoją wersję przy użyciu az --version polecenia . Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI.

  • Jeśli używasz Azure Resource Manager (ARM) lub interfejsu API REST Azure, wersja interfejsu API usługi AKS musi być 2021-05-01 lub nowsza.

  • Aby użyć niestandardowego serwera DNS, dodaj publiczny adres IP Azure 168.63.129.16 jako nadrzędny serwer DNS na niestandardowym serwerze DNS i pamiętaj, aby dodać ten publiczny adres IP jako first serwera DNS. Aby uzyskać więcej informacji na temat adresu IP Azure, zobacz Jak jest adres IP 168.63.129.16?

  • Istniejące klastry AKS, które mają włączoną integrację serwera API z siecią VNet, mogą mieć włączony tryb klastra prywatnego. Aby uzyskać więcej informacji, zobacz Włączanie lub wyłączanie trybu klastra prywatnego w istniejącym klastrze z integracją z siecią wirtualną API Server.

  • Jeśli musisz włączyć Azure Container Registry w prywatnym klastrze usługi AKS, skonfiguruj łącze prywatne dla rejestru kontenerów w sieci wirtualnej klastra (VNet) lub skonfiguruj połączenie równorzędne między siecią wirtualną rejestru kontenerów Azure a siecią wirtualną klastra prywatnego.

  • zainstalowano narzędzie kubectl. Możesz zainstalować ją lokalnie przy użyciu az aks install-cli polecenia .

Ważne

Począwszy od November 30, 2025 Azure Kubernetes Service (AKS) nie obsługuje już aktualizacji zabezpieczeń dla systemu Azure Linux 2.0. Obraz węzła systemu Azure Linux 2.0 jest zamrożony w wersji 202512.06.0. Od 31 marca 2026 r. obrazy węzłów zostaną usunięte i nie będzie można skalować pul węzłów. Przeprowadź migrację do obsługiwanej wersji systemu Azure Linux, uaktualniając swoje pule węzłów do obsługiwanej wersji Kubernetes lub przechodząc na osSku AzureLinux3. Aby uzyskać więcej informacji, zobacz problem na GitHub dotyczący zakończenia oraz ogłoszenie o wycofaniu aktualizacji Azure. Aby być na bieżąco z ogłoszeniami i aktualizacjami, obserwuj notatki dotyczące wydań AKS.

Ograniczenia

  • Zakresy autoryzowanych adresów IP dotyczą tylko publicznego serwera interfejsu API. Nie można zastosować tych zakresów do prywatnego punktu końcowego serwera interfejsu API.
  • Ograniczenia usługi Azure Private Link mają zastosowanie do klastrów prywatnych.
  • Nie ma obsługi agentów hostowanych Azure DevOps Microsoft z klastrami prywatnymi. Rozważ użycie samodzielnie hostowanych agentów.
  • Usunięcie lub zmodyfikowanie prywatnego punktu końcowego w podsieci klienta powoduje zatrzymanie działania klastra.
  • Usługa Azure Private Link jest obsługiwana tylko w Standardowym Azure Load Balancerze. Podstawowy Azure Load Balancer nie jest obsługiwany.

Piasta i szprychy z niestandardowym systemem DNS dla prywatnych klastrów usługi AKS

Architektury Hub-and-Spoke są często używane do wdrażania sieci w Azure. W wielu z tych wdrożeń ustawienia DNS w sieciach wirtualnych połączenia są skonfigurowane do korzystania z centralnej usługi przekazywania DNS, w celu umożliwienia rozpoznawania nazw DNS na terenie lokalnym oraz w Azure.

Na poniższym diagramie przedstawiono architekturę piasty i szprych dla prywatnego klastra usługi AKS z niestandardowym systemem DNS:

Prywatny koncentrator klastra i szprycha

  • Po utworzeniu klastra prywatnego prywatny punkt końcowy (1) i prywatna strefa DNS (2) są domyślnie tworzone w grupie zasobów zarządzanych przez klaster. Klaster używa rekordu A w strefie prywatnej, aby rozpoznać adres IP prywatnego punktu końcowego na potrzeby komunikacji z serwerem interfejsu API.
  • Prywatna strefa DNS jest połączona tylko z siecią wirtualną, do której są dołączone węzły klastra (3), co oznacza, że prywatny punkt końcowy można rozpoznać tylko przez hosty w tej połączonej sieci wirtualnej. W scenariuszach, w których nie skonfigurowano niestandardowego systemu DNS w sieci wirtualnej (ustawienie domyślne), działa to bez problemu, gdy hosty wskazują na 168.63.129.16 jako adres DNS, który może rozpoznać rekordy w prywatnej strefie DNS dzięki połączeniu.
  • Jeśli zachowasz domyślne zachowanie prywatnej strefy DNS, usługa AKS próbuje połączyć strefę bezpośrednio z siecią wirtualną będącą szprychową, która hostuje klaster, nawet gdy strefa jest już połączona z siecią wirtualną hub.
    • W sieciach wirtualnych typu spoke, które korzystają z niestandardowych serwerów DNS, ta akcja może zakończyć się niepowodzeniem, jeśli tożsamość zarządzana klastra nie ma roli Network Contributor w danej sieci VNet będącej spoke. Aby zapobiec awarii, wybierz jedną z następujących obsługiwanych konfiguracji:
      • Niestandardowa prywatna strefa DNS: podaj istniejącą strefę prywatną i ustaw privateDNSZone / --private-dns-zone na identyfikator zasobu tej strefy. Połącz strefę z odpowiednią siecią wirtualną (na przykład siecią wirtualną koncentratora) i ustaw publicDNS na false, lub użyj --disable-public-fqdn.
      • Tylko publiczny system DNS: wyłącz tworzenie strefy prywatnej, ustawiając privateDNSZone / --private-dns-zone na none, a i pozostaw publicDNS z wartością domyślną (true) / nie używaj --disable-public-fqdn.
  • Jeśli używasz tabeli tras BYO z kubenet oraz BYO DNS w prywatnych klastrach, tworzenie klastra kończy się niepowodzeniem. Aby doprowadzić do pomyślnego utworzenia, po niepowodzeniu utworzenia klastra należy skojarzyć RouteTable w grupie zasobów węzła z podsiecią.

Ograniczenia dotyczące prywatnych klastrów usługi AKS z niestandardowym systemem DNS

  • Ustawienie i jednocześnie nie jest obsługiwane.
  • Warunkowe przekazywanie nie obsługuje poddomen.

Tworzenie grupy zasobów

Utwórz grupę zasobów przy użyciu az group create polecenia . Możesz również użyć istniejącej grupy zasobów dla klastra AKS.

az group create \
    --name <private-cluster-resource-group> \
    --location <location>

Utwórz prywatny klaster AKS z domyślną podstawową siecią

Utwórz klaster prywatny z domyślną siecią podstawową przy użyciu az aks create polecenia z flagą --enable-private-cluster .

Kluczowe parametry w tym poleceniu:

  • --enable-private-cluster: włącza tryb klastra prywatnego.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --generate-ssh-keys
  1. Utwórz plik o nazwie main.tf i dodaj następujący kod, aby zdefiniować wersję programu Terraform i określić dostawcę Azure:

    terraform {
      required_version = ">= 1.3.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = var.subscription_id
    }
    
  2. Dodaj następujący kod do main.tf, aby utworzyć zmienne wejściowe dla ID subskrypcji Azure, nazwy grupy zasobów, lokalizacji i nazwy klastra AKS. W razie potrzeby można modyfikować wartości domyślne.

    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. Dodaj następujący kod do main.tf, aby utworzyć grupę zasobów Azure:

    resource "azurerm_resource_group" "this" {
      name     = var.resource_group_name
      location = var.location
    }
    
  4. Dodaj następujący kod, aby utworzyć prywatny klaster usługi AKS z podstawowymi sieciami w 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          = "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. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Tworzenie prywatnego klastra AKS z zaawansowaną siecią

Utwórz klaster prywatny z zaawansowaną siecią az aks create przy użyciu polecenia .

Kluczowe parametry w tym poleceniu:

  • --enable-private-cluster: włącza tryb klastra prywatnego.
  • --network-plugin azure: określa wtyczkę sieci CNI Azure.
  • --vnet-subnet-id <subnet-id>: identyfikator zasobu istniejącej podsieci w sieci wirtualnej.
  • --dns-service-ip <dns-service-ip>: Dostępny adres IP w zakresie adresów usług Kubernetes do wykorzystania w usłudze DNS klastra. Na przykład 10.2.0.10.
  • --service-cidr <service-cidr>: zakres adresów IP notacji CIDR, z którego mają zostać przypisane adresy IP klastra usług. Na przykład 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. Utwórz plik o nazwie main.tf i dodaj następujący kod, aby zdefiniować wersję programu Terraform i określić dostawcę Azure:

    terraform {
      required_version = ">= 1.3.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = var.subscription_id
    }
    
  2. Dodaj następujący kod do main.tf, aby utworzyć zmienne wejściowe dla identyfikatora subskrypcji Azure, nazwy grupy zasobów, lokalizacji, nazwy klastra AKS, nazwy sieci wirtualnej (VNet) i nazwy podsieci. W razie potrzeby można modyfikować wartości domyślne.

    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. Dodaj następujący kod do main.tf, aby utworzyć grupę zasobów Azure, sieć wirtualną i podsieć:

    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. Dodaj następujący kod do main.tf, aby utworzyć klaster AKS z zaawansowaną siecią.

    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. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Używanie domen niestandardowych z prywatnymi klastrami AKS

Jeśli chcesz skonfigurować domeny niestandardowe, które można rozpoznać tylko wewnętrznie, zobacz Używanie domen niestandardowych.

Wyłączanie publicznej pełnej kwalifikowanej nazwy domeny (FQDN) w prywatnym klastrze AKS

Wyłączanie publicznej nazwy FQDN w nowym klastrze

Wyłącz publiczną nazwę FQDN podczas tworzenia prywatnego klastra usługi AKS przy użyciu az aks create polecenia z flagą --disable-public-fqdn .

Kluczowe parametry w tym poleceniu:

  • --disable-public-fqdn: wyłącza publiczną w pełni kwalifikowaną nazwę domeny (FQDN) dla serwera API.
  • --assign-identity <resource-id>: określa tożsamość zarządzaną do użycia dla klastra.
  • --private-dns-zone [system|none]: określa prywatną strefę DNS do użycia dla klastra. system jest wartością domyślną podczas konfigurowania prywatnej strefy DNS. Jeśli pominięto --private-dns-zone, usługa AKS tworzy prywatną strefę DNS w grupie zasobów węzła. none wyłącza tworzenie prywatnej strefy 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
  1. Wykonaj kroki 1–3 w temacie Tworzenie prywatnego klastra AKS z zaawansowaną siecią lub Utwórz prywatny klaster AKS z domyślną siecią podstawową , aby skonfigurować konfigurację narzędzia Terraform i utworzyć niezbędne zasoby w zależności od scenariusza. W tym przykładzie użyto zaawansowanej sieci.

  2. Dodaj następujący kod do main.tf aby utworzyć prywatny klaster AKS z przypisaną przez użytkownika tożsamością i wyłączonym publicznym FQDN:

    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. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Wyłączanie publicznej nazwy FQDN w istniejącym klastrze

Wyłącz publiczną nazwę FQDN w istniejącym klastrze usługi AKS przy użyciu az aks update polecenia z flagą --disable-public-fqdn .

Kluczowe parametry w tym poleceniu:

  • --disable-public-fqdn: wyłącza publiczną w pełni kwalifikowaną nazwę domeny (FQDN) dla serwera API.
az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --disable-public-fqdn
  1. Dodaj następujący kod do istniejącej main.tf, aby wyłączyć publiczną nazwę FQDN w istniejącym klastrze AKS. W tym przykładzie użyto zaawansowanej sieci. Możesz zmodyfikować ją tak, aby korzystała z domyślnej sieci podstawowej, zmieniając odpowiednie zasoby i parametry programu 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"
      }
    }
    
  2. Zastosuj zaktualizowaną konfigurację programu Terraform przy użyciu poleceń terraform plan i terraform apply.

    terraform plan
    terraform apply
    

Opcje konfiguracji dla prywatnej usługi DNS

Prywatne ustawienia DNS dla prywatnego klastra usługi AKS można skonfigurować przy użyciu Azure CLI (z parametrem --private-dns-zone) lub szablonem Azure Resource Manager (ARM) (z właściwością privateDNSZone). W poniższej tabeli przedstawiono opcje dostępne dla parametru --private-dns-zone oraz właściwości privateDNSZone.

Setting Description
system Wartość domyślna podczas konfigurowania prywatnej strefy DNS. Jeśli pominiesz --private-dns-zone / privateDNSZone, usługa AKS utworzy prywatną strefę DNS w grupie zasobów węzła.
none Jeśli ustawisz --private-dns-zone / privateDNSZone na none, AKS nie utworzy prywatnej strefy DNS.
<custom-private-dns-zone-resource-id> Aby użyć tego parametru, należy utworzyć prywatną strefę DNS w następującym formacie dla chmury globalnej Azure: privatelink.<region>.azmk8s.io lub <subzone>.privatelink.<region>.azmk8s.io. Do użycia w przyszłości potrzebny jest identyfikator zasobu prywatnej strefy DNS. Potrzebna jest również tożsamość przypisana przez użytkownika lub zasada usługi z rolami Współautor strefy prywatnej DNS i Współautor sieci. W przypadku klastrów korzystających z integracji usługi API Server z siecią wirtualną, prywatna strefa DNS obsługuje format nazewnictwa private.<region>.azmk8s.io lub <subzone>.private.<region>.azmk8s.io. Nie można zmienić ani usunąć tych zasobów po utworzeniu klastra, ponieważ może to spowodować problemy z wydajnością i niepowodzenia uaktualniania klastra. Możesz używać --fqdn-subdomain <subdomain> z <custom-private-dns-zone-resource-id> tylko w celu zapewnienia możliwości poddomeny dla privatelink.<region>.azmk8s.io. Jeśli określasz podstrefę, istnieje limit 32 znaków dla <subzone> nazwy.

Zagadnienia dotyczące prywatnego systemu DNS

Podczas konfigurowania prywatnej usługi DNS dla prywatnego klastra usługi AKS należy pamiętać o następujących kwestiach:

  • Jeśli prywatna strefa DNS znajduje się w innej subskrypcji niż klaster usługi AKS, musisz zarejestrować dostawcę Microsoft.ContainerService Azure w obu subskrypcjach.
  • Jeśli klaster usługi AKS jest skonfigurowany przy użyciu jednostki usługi Active Directory, usługa AKS nie obsługuje używania przypisanej przez system tożsamości zarządzanej z niestandardową prywatną strefą DNS. Klaster musi używać uwierzytelniania za pomocą przypisanej przez użytkownika tożsamości zarządzanej.

Tworzenie prywatnego klastra usługi AKS z prywatną strefą DNS

Utwórz prywatny klaster usługi AKS z prywatną strefą DNS przy użyciu az aks create polecenia .

Kluczowe parametry w tym poleceniu:

  • --enable-private-cluster: włącza tryb klastra prywatnego.
  • --private-dns-zone [system|none]: konfiguruje prywatną strefę DNS dla klastra. system jest wartością domyślną podczas konfigurowania prywatnej strefy DNS. Jeśli pominięto --private-dns-zone, usługa AKS tworzy prywatną strefę DNS w grupie zasobów węzła. none wyłącza tworzenie prywatnej strefy DNS.
  • --assign-identity <resource-id>: Identyfikator zasobu zarządzanej przez użytkownika tożsamości o rolach Współautor strefy prywatnej DNS i Współautor sieci.
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. Wykonaj kroki 1–3 w temacie Tworzenie prywatnego klastra AKS z zaawansowaną siecią lub Utwórz prywatny klaster AKS z domyślną siecią podstawową , aby skonfigurować konfigurację narzędzia Terraform i utworzyć niezbędne zasoby w zależności od scenariusza. W tym przykładzie użyto zaawansowanej sieci.

  2. Dodaj następujący kod do main.tf, aby utworzyć prywatny klaster usługi AKS z prywatną strefą DNS zarządzaną przez 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"
     }
    }
    
  3. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Tworzenie prywatnego klastra usługi AKS bez prywatnej strefy DNS

  1. Wykonaj kroki 1–3 w temacie Tworzenie prywatnego klastra AKS z zaawansowaną siecią lub Utwórz prywatny klaster AKS z domyślną siecią podstawową , aby skonfigurować konfigurację narzędzia Terraform i utworzyć niezbędne zasoby w zależności od scenariusza. W tym przykładzie użyto zaawansowanej sieci.

  2. Dodaj następujący kod do main.tf, aby utworzyć klaster AKS bez prywatnej strefy DNS.

    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. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Tworzenie prywatnego klastra usługi AKS z niestandardową prywatną strefą DNS lub prywatną strefą DNS

Utwórz prywatny klaster AKS z niestandardową prywatną strefą DNS lub podstrefą przy użyciu polecenia az aks create.

Kluczowe parametry w tym poleceniu:

  • --enable-private-cluster: włącza tryb klastra prywatnego.
  • --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: identyfikator zasobu istniejącej prywatnej strefy DNS lub podstrefy w następującym formacie dla chmury globalnej Azure: privatelink.<region>.azmk8s.io lub <subzone>.privatelink.<region>.azmk8s.io.
  • --assign-identity <resource-id>: Identyfikator zasobu zarządzanej przez użytkownika tożsamości o rolach Współautor strefy prywatnej DNS i Współautor sieci.
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

W przypadku korzystania z niestandardowej prywatnej strefy DNS odpowiadasz za tworzenie infrastruktury DNS i zarządzanie nią zamiast polegać na Azure zarządzanym systemie DNS. Obejmuje to tworzenie strefy DNS, łączenie jej z siecią wirtualną i przypisywanie niezbędnych uprawnień usługi AKS do zarządzania rekordami.

W przypadku niestandardowych konfiguracji DNS należy użyć tożsamości zarządzanej przypisanej przez użytkownika z rolami Współtwórca strefy DNS prywatnej i Kontrybutor sieci.

  1. Wykonaj kroki 1–3 w temacie Tworzenie prywatnego klastra AKS z zaawansowaną siecią lub Utwórz prywatny klaster AKS z domyślną siecią podstawową , aby skonfigurować konfigurację narzędzia Terraform i utworzyć niezbędne zasoby w zależności od scenariusza. W tym przykładzie użyto zaawansowanej sieci.

  2. Dodaj kod do main.tf, aby utworzyć prywatny klaster usługi AKS z niestandardową prywatną strefą DNS lub podstrefą.

    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. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Tworzenie prywatnego klastra usługi AKS z niestandardową prywatną strefą DNS i niestandardową poddomeną

Utwórz prywatny klaster usługi AKS z niestandardową prywatną strefą DNS i poddomeną az aks create przy użyciu polecenia .

Kluczowe parametry w tym poleceniu:

  • --enable-private-cluster: włącza tryb klastra prywatnego.
  • --private-dns-zone <custom-private-dns-zone-resource-id>: Identyfikator zasobu istniejącej prywatnej strefy DNS w następującym formacie dla chmury globalnej Azure: privatelink.<region>.azmk8s.io.
  • --fqdn-subdomain <subdomain>: Poddomena do użycia dla FQDN klastra w niestandardowej prywatnej strefie DNS.
  • --assign-identity <resource-id>: Identyfikator zasobu zarządzanej przez użytkownika tożsamości o rolach Współautor strefy prywatnej DNS i Współautor sieci.
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. Wykonaj kroki 1–3 w temacie Tworzenie prywatnego klastra AKS z zaawansowaną siecią lub Utwórz prywatny klaster AKS z domyślną siecią podstawową , aby skonfigurować konfigurację narzędzia Terraform i utworzyć niezbędne zasoby w zależności od scenariusza. W tym przykładzie użyto zaawansowanej sieci.

  2. Dodaj następujący kod do main.tf, aby utworzyć prywatny klaster usługi AKS z niestandardową prywatną strefą DNS i poddomeną.

    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. Wykonaj kroki, aby zainicjować program Terraform, sformatować i zweryfikować konfigurację programu Terraform, utworzyć plan wykonywania programu Terraform, zastosować konfigurację narzędzia Terraform i nawiązać połączenie z klastrem usługi AKS.

Aktualizowanie istniejącego prywatnego klastra usługi AKS z prywatnej strefy DNS do publicznej

Możesz zaktualizować tylko z byo (przynieś własne) lub system do none. Nie jest obsługiwana żadna inna kombinacja wartości aktualizacji.

Ostrzeżenie

Podczas aktualizowania klastra prywatnego z byo programu lub system do nonewęzłów agenta zmieniają się w celu używania publicznej nazwy FQDN. W klastrze AKS, który używa Azure Virtual Machine Scale Sets, uaktualnienie obrazu węzła jest wykonywane w celu zaktualizowania węzłów z publiczną nazwą FQDN.

Zaktualizuj klaster prywatny z byo lub system do none używając polecenia az aks update z parametrem --private-dns-zone ustawionym na none.

az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --private-dns-zone none
  1. Dodaj następujący kod do istniejącego main.tf , aby zaktualizować prywatny klaster usługi AKS z prywatnej strefy DNS do publicznej. W tym przykładzie użyto zaawansowanej sieci. Możesz zmodyfikować ją tak, aby korzystała z domyślnej sieci podstawowej, zmieniając odpowiednie zasoby i parametry programu 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"
     }
    }
    
  2. Zastosuj zaktualizowaną konfigurację programu Terraform przy użyciu poleceń terraform plan i terraform apply.

    terraform plan
    terraform apply
    

Inicjowanie narzędzia Terraform

Zainicjuj Terraform w katalogu zawierającym plik main.tf przy użyciu polecenia terraform init. To polecenie pobiera dostawcę Azure wymaganego do zarządzania zasobami Azure za pomocą narzędzia Terraform.

terraform init

Formatuj i zweryfikuj konfigurację narzędzia Terraform

Sformatuj i zweryfikuj konfigurację narzędzia Terraform za pomocą poleceń terraform fmt i terraform validate.

terraform fmt
terraform validate

Tworzenie planu wykonania programu Terraform

Utwórz plan wykonywania narzędzia Terraform przy użyciu terraform plan polecenia . To polecenie pokazuje zasoby, które narzędzie Terraform utworzy lub zmodyfikuje w ramach subskrypcji Azure.

terraform plan -var="subscription_id=<your-subscription-id>"

Stosowanie konfiguracji narzędzia Terraform

Po przejrzeniu i potwierdzeniu planu wykonania zastosuj konfigurację narzędzia Terraform przy użyciu terraform apply polecenia . To polecenie tworzy lub modyfikuje zasoby zdefiniowane w pliku main.tf w subskrypcji Azure.

terraform apply -var="subscription_id=<your-subscription-id>"

Konfigurowanie narzędzia kubectl w celu nawiązania połączenia z prywatnym klastrem usługi AKS

Aby zarządzać klastrem Kubernetes, użyj klienta wiersza polecenia kubernetes kubectl. kubectl jest już zainstalowany, jeśli używasz Azure Cloud Shell. Aby zainstalować kubectl lokalnie, użyj az aks install-cli polecenia .

  1. Skonfiguruj kubectl, aby nawiązać połączenie z klastrem Kubernetes za pomocą polecenia az aks get-credentials. To polecenie pobiera poświadczenia i konfiguruje interfejs wiersza polecenia Kubernetes do ich użycia.

    az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
    
  2. Sprawdź połączenie z klastrem przy użyciu polecenia kubectl get. To polecenie zwraca listę węzłów klastra.

    kubectl get nodes
    

    Polecenie zwraca dane wyjściowe podobne do następujących przykładowych danych wyjściowych:

    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