Compartilhar via


Criar um cluster de AKS (Serviço de Kubernetes do Azure) privado

Este artigo ajuda você a implantar um cluster AKS baseado em link privado usando CLI do Azure ou Terraform. Se você estiver interessado em criar um cluster do AKS sem o link ou túnel privado necessário, consulte Criar um cluster AKS (Serviço de Kubernetes do Azure) com integração de VNet do Servidor de API.

Visão geral de clusters privados no AKS

Em um cluster privado, o plano de controle ou o servidor de API tem endereços IP internos definidos no RFC1918 - Alocação de Endereços para Internet Privada. Usando um cluster privado, você pode garantir que o tráfego de rede entre o servidor de API e os pools de nós permaneça apenas na rede privada.

O painel de controle ou o servidor de API estão em um grupo de recursos do Azure gerenciado pelo AKS e o seu cluster ou pool de nós está no seu grupo de recursos. O servidor e o cluster ou pool de nós podem se comunicar entre si por meio do serviço de Link Privado do Azure na rede virtual do servidor da API e um ponto de extremidade privado exposto na sub-rede do seu cluster do AKS.

Quando você cria um cluster privado do AKS, o AKS cria FQDNs (nomes de domínio totalmente qualificados) privados e públicos com zonas DNS correspondentes por padrão. Para obter opções detalhadas de configuração de DNS, consulte Configurar uma zona DNS privada, uma subzone DNS privada ou um subdomínio personalizado.

Disponibilidade de região

Clusters privados estão disponíveis em regiões públicas, Azure Governamental e Microsoft Azure operados por regiões da 21Vianet onde o suporte para AKS está disponível.

Importante

Todos os recursos Microsoft Defender para Nuvem serão oficialmente desativados no Azure na região da China em 18 de agosto de 2026. Devido a essa próxima desativação, Azure na China os clientes não poderão mais integrar novas assinaturas ao serviço. Uma nova assinatura é qualquer assinatura que ainda não foi integrada ao serviço Microsoft Defender para Nuvem antes de 18 de agosto de 2025, a data do anúncio da aposentadoria. Para mais informações sobre a descontinuação, veja Anúncio sobre a Descontinuação do Microsoft Defender para Nuvem no Microsoft Azure Operado pela 21Vianet.

Os clientes devem trabalhar com seus representantes de conta para Microsoft Azure operados pela 21Vianet para avaliar o impacto dessa aposentadoria em suas próprias operações.

Pré-requisitos para clusters privados do AKS

  • Terraform instalado localmente. Para obter instruções de instalação, consulte Instalar o Terraform.

Importante

A partir de 30 de novembro de 2025, AKS (Serviço de Kubernetes do Azure) não dá mais suporte ou fornece atualizações de segurança para Azure Linux 2.0. A imagem do nó Azure Linux 2.0 está congelada na versão 202512.06.0. A partir de 31 de março de 2026, as imagens dos nós serão removidas e você não poderá dimensionar os pools de nós. Migre para uma versão do Linux Azure com suporte atualizando seus pools de nós para uma versão do Kubernetes com suporte ou migrando para osSku AzureLinux3. Para obter mais informações, consulte Problema de desativação do GitHub e o comunicado de desativação das Atualizações do Azure. Para se manter informado sobre anúncios e atualizações, acompanhe as notas de versão do AKS.

Limitações

  • Intervalos autorizados por IP se aplicam somente ao servidor de API público. Não é possível aplicar esses intervalos ao ponto de extremidade do servidor de API privada.
  • As limitações de serviço do Link Privado do Azure aplicam-se a clusters privados.
  • Não há suporte para agentes hospedados em Azure DevOps Microsoft com clusters privados. Considere o uso de agentes auto-hospedados.
  • Excluir ou modificar o ponto de extremidade privado na sub-rede do cliente faz com que o cluster pare de funcionar.
  • Link Privado do Azure serviço tem suporte apenas no Standard Azure Load Balancer. O Azure Load Balancer Básico não é suportado.

Hub e spoke com DNS personalizado para clusters AKS privados

as arquiteturas Hub e spoke geralmente são usadas para implantar redes em Azure. Em muitas dessas implantações, as configurações de DNS nas VNets spoke são definidas para fazer referência a um encaminhador DNS central para permitir a resolução de DNS local e baseada no Azure.

O diagrama a seguir ilustra uma arquitetura hub e spoke para um cluster privado do AKS com DNS personalizado.

Hub e spoke de cluster privado

  • Quando um cluster privado é criado, um ponto de extremidade privado (1) e uma zona DNS privada (2) são criados no grupo de recursos gerenciados por cluster por padrão. O cluster utiliza um registro A na zona privada para resolver o IP do ponto de extremidade privado para comunicação com o servidor da API.
  • A zona DNS privada é vinculada apenas à VNet à qual os nós de cluster estão anexados (3), o que significa que o ponto de extremidade privado só pode ser resolvido por hosts nessa VNet vinculada. Em cenários em que nenhum DNS personalizado está configurado na VNet (padrão), ele funciona sem problemas, pois os hosts apontam para 168.63.129.16 para DNS que podem resolver registros na zona DNS privada devido ao link.
  • Se você mantiver o comportamento de zona DNS privado padrão, o AKS tentará vincular a zona diretamente à VNet spoke que hospeda o cluster mesmo quando a zona já estiver vinculada a uma VNet do hub.
    • Em VNets spoke que utilizam servidores DNS personalizados, esta ação pode falhar se a identidade gerenciada do cluster não tiver o colaborador de rede na VNet do spoke. Para evitar a falha, escolha uma das seguintes configurações com suporte:
      • Zona DNS privada personalizada: forneça uma zona privada existente e defina privateDNSZone / --private-dns-zone como sua ID de recurso. Vincule essa zona à VNet apropriada (por exemplo, a VNet do hub) e defina publicDNS como false /use --disable-public-fqdn.
      • Somente DNS público: desabilite a criação de zona privada definindo privateDNSZone / --private-dns-zonenonee deixando publicDNS em seu valor padrão (true) /não use --disable-public-fqdn.
  • Se estiver usando traga sua própria tabela de rotas (BYO) com o kubenet e BYO DNS com clusters privados, a criação do cluster falha. Você precisa associar o RouteTable no grupo de recursos do nó à sub-rede após a criação do cluster falhar em tornar a criação bem-sucedida.

Limitações para clusters do AKS privados com DNS personalizado

  • Configurar privateDNSZone / --private-dns-zone para noneepublicDNS: false / --disable-public-fqdn ao mesmo tempo não é suportado.
  • O encaminhamento condicional não dá suporte a subdomínios.

Criar um grupo de recursos

Crie um grupo de recursos usando o comando az group create. Você também pode usar um grupo de recursos existente para seu cluster do AKS.

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

Criar um cluster do AKS privado com rede básica padrão

Crie um cluster privado com rede básica padrão usando o comando az aks create com o sinalizador --enable-private-cluster.

Parâmetros de chave neste comando:

  • --enable-private-cluster: habilita o modo de cluster privado.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --generate-ssh-keys
  1. Crie um arquivo chamado main.tf e adicione o seguinte código para definir a versão do Terraform e especificar o provedor de 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. Adicione o código a seguir para main.tf para criar variáveis de entrada para sua ID de assinatura Azure, nome do grupo de recursos, local e nome do cluster do AKS. Você pode modificar os valores padrão conforme necessário.

    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. Adicione o seguinte código a main.tf para criar um grupo de recursos Azure:

    resource "azurerm_resource_group" "this" {
      name     = var.resource_group_name
      location = var.location
    }
    
  4. Adicione o seguinte código a main.tf para criar um cluster privado do AKS com rede básica:

    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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Criar um cluster privado do AKS com rede avançada

Crie um cluster privado com rede avançada usando o az aks create comando.

Parâmetros de chave neste comando:

  • --enable-private-cluster: habilita o modo de cluster privado.
  • --network-plugin azure: especifica o plug-in de rede Azure CNI.
  • --vnet-subnet-id <subnet-id>: o ID de recurso de uma sub-rede existente em uma VNet.
  • --dns-service-ip <dns-service-ip>: um endereço IP disponível dentro do intervalo de endereços de serviço do Kubernetes a ser usado para o serviço DNS do cluster. Por exemplo, 10.2.0.10.
  • --service-cidr <service-cidr>: um intervalo IP com notação CIDR do qual designar serviço de cluster IPs. Por exemplo, 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. Crie um arquivo chamado main.tf e adicione o seguinte código para definir a versão do Terraform e especificar o provedor de 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. Adicione o código a seguir para main.tf para criar variáveis de entrada para sua ID de assinatura Azure, nome do grupo de recursos, local, nome do cluster do AKS, nome da rede virtual (VNet) e nome da sub-rede. Você pode modificar os valores padrão conforme necessário.

    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. Adicione o seguinte código a main.tf para criar um grupo de recursos Azure, VNet e sub-rede:

    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. Adicione o seguinte código em main.tf para criar o cluster do AKS com rede avançada:

    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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Usar domínios personalizados com clusters privados do AKS

Se você quiser configurar domínios personalizados que só podem ser resolvidos internamente, consulte Usar domínios personalizados.

Desabilitar um Nome de Domínio Completo (FQDN) público em um cluster privado do AKS

Desabilitar um FQDN público em um novo cluster

Desabilite um FQDN público ao criar um cluster do AKS privado usando o comando az aks create com o sinalizador --disable-public-fqdn.

Parâmetros de chave neste comando:

  • --disable-public-fqdn: desabilita o FQDN (nome de domínio totalmente qualificado) público para o servidor de API.
  • --assign-identity <resource-id>: especifica a identidade gerenciada a ser usada para o cluster.
  • --private-dns-zone [system|none]: especifica a zona DNS privada a ser usada para o cluster. system é o valor padrão ao configurar uma zona DNS privada. Se você omitir --private-dns-zone, o AKS criará uma zona DNS privada no grupo de recursos do nó. none desabilita a criação de uma zona DNS privada.
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. Siga as etapas 1 a 3 em Criar um cluster do AKS privado com rede avançada ou criar um cluster privado do AKS com rede básica padrão para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo usa rede avançada.

  2. Adicione o seguinte código em main.tf para criar um cluster AKS privado com uma identidade atribuída pelo usuário e o FQDN público desabilitado:

    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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Desabilitar um FQDN público em um cluster existente

Desabilite um FQDN público em um cluster do AKS existente usando o comando az aks update com o sinalizador --disable-public-fqdn.

Parâmetros de chave neste comando:

  • --disable-public-fqdn: desabilita o FQDN (nome de domínio totalmente qualificado) público para o servidor de API.
az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --disable-public-fqdn
  1. Adicione o código a seguir ao existente main.tf para desabilitar o FQDN público em um cluster do AKS existente. Este exemplo usa rede avançada. Você pode modificá-la para usar a rede básica padrão alterando os parâmetros e os recursos do Terraform relevantes.

    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. Aplique a configuração atualizada do Terraform usando os comandos terraform plan e terraform apply.

    terraform plan
    terraform apply
    

Opções de configuração para DNS privado

Você pode definir configurações de DNS privadas para um cluster do AKS privado usando o CLI do Azure (com o parâmetro --private-dns-zone) ou um modelo de Azure Resource Manager (ARM) (com a propriedade privateDNSZone). A tabela a seguir descreve as opções disponíveis para o --private-dns-zone parâmetro/ privateDNSZone propriedade:

Configurações Description
system O valor padrão ao configurar uma zona DNS privada. Se você omitir --private-dns-zone / privateDNSZone, o AKS criará uma zona DNS privada no grupo de recursos do nó.
none Se você definir --private-dns-zone / privateDNSZone para none, o AKS não criará uma zona DNS privada.
<custom-private-dns-zone-resource-id> Para usar esse parâmetro, você precisa criar uma zona DNS privada no seguinte formato para Azure nuvem global: privatelink.<region>.azmk8s.io ou <subzone>.privatelink.<region>.azmk8s.io. Você precisa da ID do recurso da zona DNS privada para uso futuro. Você também precisa de uma identidade ou entidade de serviço atribuída pelo usuário com as funções Colaborador de Zona de DNS privado e Colaborador de Rede. Para clusters que usam a integração de VNet do Servidor de API, uma zona DNS privada dá suporte ao formato de nomenclatura de private.<region>.azmk8s.io ou <subzone>.private.<region>.azmk8s.io. Você não pode alterar ou excluir esses recursos depois de criar o cluster, pois ele pode causar problemas de desempenho e falhas de atualização de cluster. Você pode usar --fqdn-subdomain <subdomain> com <custom-private-dns-zone-resource-id> apenas para fornecer recursos de subdomínio para privatelink.<region>.azmk8s.io. Se você estiver especificando um subzone, haverá um limite de 32 caracteres para o <subzone> nome.

Considerações sobre DNS privado

Tenha as seguintes considerações em mente ao configurar o DNS privado para um cluster privado do AKS:

  • Se a zona DNS privada estiver em uma assinatura diferente do cluster do AKS, você precisará registrar o provedor Microsoft.ContainerService Azure em ambas as assinaturas.
  • Se o cluster do AKS estiver configurado com um principal de serviço do Active Directory, o AKS não oferece suporte para o uso de uma identidade gerenciada atribuída pelo sistema com uma zona DNS privada personalizada. O cluster deve usar a autenticação de identidade gerenciada atribuída pelo usuário.

Crie um cluster do AKS privado com uma zona DNS privada

Crie um cluster do AKS privado com uma zona DNS privada usando o az aks create comando.

Parâmetros de chave neste comando:

  • --enable-private-cluster: habilita o modo de cluster privado.
  • --private-dns-zone [system|none]: configura a zona DNS privada para o cluster. system é o valor padrão ao configurar uma zona DNS privada. Se você omitir --private-dns-zone, o AKS criará uma zona DNS privada no grupo de recursos do nó. none desabilita a criação de uma zona DNS privada.
  • --assign-identity <resource-id>: o ID de recurso de uma identidade gerenciada atribuída pelo usuário com as funções Colaborador de Zona DNS Privada e Colaborador de Rede.
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. Siga as etapas 1 a 3 em Criar um cluster do AKS privado com rede avançada ou criar um cluster privado do AKS com rede básica padrão para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo usa rede avançada.

  2. Adicione o seguinte código para main.tf criar um cluster privado do AKS com uma zona DNS privada gerenciada pelo 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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Criar um cluster do AKS privado sem uma zona DNS privada

  1. Siga as etapas 1 a 3 em Criar um cluster do AKS privado com rede avançada ou criar um cluster privado do AKS com rede básica padrão para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo usa rede avançada.

  2. Adicione o seguinte código para main.tf criar o cluster do AKS sem uma zona DNS privada:

    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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Crie um cluster do AKS privado com uma zona DNS privada personalizada ou uma subzona DNS privada

Crie um cluster do AKS privado com uma zona DNS privada personalizada ou subzone usando o az aks create comando.

Parâmetros de chave neste comando:

  • --enable-private-cluster: habilita o modo de cluster privado.
  • --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: O ID de recurso de uma zona ou subzona DNS privada existente no seguinte formato para nuvem global do Azure: privatelink.<region>.azmk8s.io ou <subzone>.privatelink.<region>.azmk8s.io.
  • --assign-identity <resource-id>: o ID de recurso de uma identidade gerenciada atribuída pelo usuário com as funções Colaborador de Zona DNS Privada e Colaborador de Rede.
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

Ao usar uma zona DNS privada personalizada, você é responsável por criar e gerenciar a infraestrutura DNS em vez de depender do DNS gerenciado por Azure. Isso inclui criar a zona DNS, vinculá-la à sua VNet e atribuir as permissões necessárias para o AKS gerenciar registros.

Para configurações de DNS personalizadas, você deve usar uma identidade gerenciada atribuída pelo usuário com as funções DNS privado Zone Contributor e Network Contributor.

  1. Siga as etapas 1 a 3 em Criar um cluster do AKS privado com rede avançada ou criar um cluster privado do AKS com rede básica padrão para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo usa rede avançada.

  2. Adicione o código em main.tf para criar um cluster AKS privado com uma zona DNS privada personalizada ou subzona:

    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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Crie um cluster do AKS privado com uma zona DNS privada personalizada e um subdomínio personalizado

Crie um cluster do AKS privado com uma zona DNS privada personalizada e um subdomínio usando o az aks create comando.

Parâmetros de chave neste comando:

  • --enable-private-cluster: habilita o modo de cluster privado.
  • --private-dns-zone <custom-private-dns-zone-resource-id>: O ID do recurso de uma zona DNS privada existente no seguinte formato para a nuvem global do Azure: privatelink.<region>.azmk8s.io.
  • --fqdn-subdomain <subdomain>: o subdomínio a ser usado para o FQDN do cluster dentro da zona DNS privada personalizada.
  • --assign-identity <resource-id>: o ID de recurso de uma identidade gerenciada atribuída pelo usuário com as funções Colaborador de Zona DNS Privada e Colaborador de Rede.
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. Siga as etapas 1 a 3 em Criar um cluster do AKS privado com rede avançada ou criar um cluster privado do AKS com rede básica padrão para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo usa rede avançada.

  2. Adicione o seguinte código para main.tf criar um cluster privado do AKS com uma zona DNS privada personalizada e um subdomínio:

    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. Siga as etapas para inicializar o Terraform, formatar e validar a configuração do Terraform, criar um plano de execução do Terraform, aplicar a configuração do Terraform e conectar-se ao cluster do AKS.

Atualizar um cluster do AKS privado existente de uma zona DNS privada para pública

Você apenas pode atualizar de byo (traga seu próprio) ou system para none. Não há suporte para nenhuma outra combinação de valores de atualização.

Aviso

Ao atualiza um cluster privado de byo ou system para none, os nós do agente são alterados para usar um FQDN público. Em um cluster do AKS que usa Conjuntos de Dimensionamento de Máquinas Virtuais do Azure, uma atualização de imagem de nó é executada para atualizar os seus nós com o FQDN público.

Atualize um cluster privado de byo ou system para none usando o comando az aks update com o parâmetro --private-dns-zone definido como none.

az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --private-dns-zone none
  1. Adicione o código a seguir ao existente main.tf para atualizar o cluster do AKS privado de uma zona DNS privada para pública. Este exemplo usa rede avançada. Você pode modificá-la para usar a rede básica padrão alterando os parâmetros e os recursos do Terraform relevantes.

    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. Aplique a configuração atualizada do Terraform usando os comandos terraform plan e terraform apply.

    terraform plan
    terraform apply
    

Inicializar Terraform

Inicialize o Terraform no diretório que contém o main.tf arquivo usando o terraform init comando. Esse comando baixa o provedor de Azure necessário para gerenciar Azure recursos com o Terraform.

terraform init

Formatar e validar a configuração do Terraform

Formate e valide a configuração do Terraform usando os comandos terraform fmt e terraform validate.

terraform fmt
terraform validate

Criar um plano de execução do Terraform

Crie um plano de execução do Terraform usando o comando terraform plan. Este comando mostra os recursos que o Terraform criará ou modificará em sua assinatura Azure.

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

Aplicar a configuração do Terraform

Depois de examinar e confirmar o plano de execução, aplique a configuração do Terraform usando o terraform apply comando. Esse comando cria ou modifica os recursos definidos em seu arquivo de main.tf em sua assinatura de Azure.

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

Configurar o kubectl para se conectar a um cluster privado do AKS

Para gerenciar um cluster kubernetes, use o cliente de linha de comando do Kubernetes, kubectl. kubectl já está instalado se você usar Azure Cloud Shell. Para instalar kubectl localmente, use o comando az aks install-cli.

  1. Configure o kubectl para se conectar ao cluster do Kubernetes usando o comando az aks get-credentials. Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las.

    az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
    
  2. Verifique a conexão com o cluster usando o comando kubectl get. Esse comando retorna uma lista dos nós de cluster.

    kubectl get nodes
    

    O comando retorna uma saída semelhante à seguinte saída de exemplo:

    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