Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo ajuda-o a implementar um cluster AKS privado baseado em links usando CLI do Azure ou Terraform. Se estiver interessado em criar um cluster AKS sem ligação privada ou túnel obrigatório, veja Criar um cluster Azure Kubernetes Service (AKS) com integração com VNet do API Server.
Visão geral dos clusters privados no AKS
Em um cluster privado, o plano de controle ou servidor de API tem endereços IP internos que são definidos no documento RFC1918 - Address Allocation for Private Internet . 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 plano de controlo ou servidor API está num grupo de recursos Azure gerido 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 comunicar entre si através do serviço Azure Private Link na rede virtual do servidor API e de um endpoint privado exposto na sub-rede do seu cluster AKS.
Quando cria um cluster AKS privado, o AKS cria nomes de domínio totalmente qualificados (FQDNs) privados e públicos com zonas DNS correspondentes por defeito. Para opções detalhadas de configuração DNS, consulte Configurar uma zona DNS privada, subzona DNS privada ou subdomínio personalizado.
Disponibilidade da região
Clusters privados estão disponíveis em regiões públicas, Azure Government e Microsoft Azure operado pela 21Vianet em regiões onde AKS é suportado.
Importante
Todas as funcionalidades do Microsoft Defender para a Cloud serão oficialmente retiradas da região Azure na China a 18 de agosto de 2026. Devido a esta reforma iminente, os clientes da Azure na China já não podem integrar novas subscrições ao serviço. Uma nova subscrição é qualquer subscrição que não estivesse já integrada no serviço Microsoft Defender para a Cloud antes de 18 de agosto de 2025, data do anúncio da reforma. Para mais informações sobre a descontinuação, consulte Anúncio de Depreciação do Microsoft Defender para a Cloud no Microsoft Azure Operado pela 21Vianet.
Os clientes devem trabalhar com os seus representantes de conta do Microsoft Azure operado pela 21Vianet para avaliar o impacto desta reforma nas suas próprias operações.
Pré-requisitos para clusters privados AKS
Uma subscrição ativa do Azure. Se não tiver uma subscrição Azure, crie uma conta gratuita antes de começar.
Defina o seu contexto de subscrição usando o
az account setcomando. Por exemplo:az account set --subscription "00000000-0000-0000-0000-000000000000"CLI do Azure versão 2.28.0 ou superior. Encontre sua versão usando o
az --versioncomando. Se precisares de instalar ou atualizar, vê Install CLI do Azure.Se usar Azure Resource Manager (ARM) ou a API REST Azure, a versão da API AKS deve ser 2021-05-01 ou superior.
Para usar um servidor DNS personalizado, adicione o endereço IP público Azure 168.63.129.16 como servidor DNS a montante no servidor DNS personalizado, e certifique-se de adicionar este endereço IP público como servidor DNS first. Para mais informações sobre o endereço IP Azure, consulte Qual é o endereço IP 168.63.129.16?
- A zona DNS do cluster deve ser a que encaminhas para 168.63.129.16. Pode encontrar mais informações sobre nomes de zonas em configuração de zona DNS dos serviços do Azure.
Clusters AKS existentes habilitados com integração VNet do API Server podem ter o modo cluster privado ativado. Para mais informações, consulte Ativar ou desativar o modo de cluster privado num cluster existente com integração do VNet do API Server.
Se precisar de ativar Azure Container Registry num cluster AKS privado, configure um link privado para o registo de contentores na rede virtual do cluster (VNet) ou configure peering entre o VNet do registo do contentor e o VNet do cluster privado.
Kubectl instalado. Você pode instalá-lo localmente usando o
az aks install-clicomando.
- Terraform instalado localmente. Para instruções de instalação, consulte Instalar Terraform.
Importante
A partir de 30 de novembro de 2025, Azure Kubernetes Service (AKS) já não suporta nem fornece atualizações de segurança para Azure Linux 2.0. A imagem Azure do nó 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 não poderá ajustar o tamanho dos seus pools de nós. Migre para uma versão Azure Linux suportada atualizando os seus pools de nós para uma versão Kubernetes suportada ou migrando para osSku AzureLinux3. Para mais informações, consulte a issue de reforma do GitHub e o anúncio de retirada das atualizações do Azure. Para se manter informado sobre anúncios e atualizações, siga as Notas de Lançamento do AKS.
Limitações
- Os intervalos autorizados por IP aplicam-se apenas ao servidor público da API. Não podes aplicar estes intervalos ao endpoint do servidor privado de API.
- As limitações do serviço Azure Private Link aplicam-se a clusters privados.
- Não há suporte para agentes do Azure DevOps alojados pela Microsoft em clusters privados. Considere o uso de agentes auto-hospedados.
- Eliminar ou modificar o endpoint privado na sub-rede do cliente faz com que o cluster deixe de funcionar.
- O serviço Azure Private Link é suportado apenas no Standard Balanceador de Carga do Azure. O Balanceador de Carga do Azure básico não é suportado.
Modelo hub-and-spoke com DNS personalizado para clusters privados de AKS
Hub e spoke são frequentemente usadas para implementar redes no Azure. Em muitas destas implementações, as definições DNS nos VNets spoke são configuradas para referenciar um encaminhador DNS central para permitir resolução DNS on-premises e baseada em Azure.
O diagrama seguinte ilustra uma arquitetura hub and spoke para um cluster AKS privado com DNS personalizado:
- Quando um cluster privado é criado, um endpoint privado (1) e uma zona DNS privada (2) são criados no grupo de recursos geridos pelo cluster por defeito. O cluster usa um
Aregisto na zona privada para resolver o endereço IP do ponto final privado para comunicação com o servidor de API. - A zona DNS privada está ligada apenas ao VNet ao qual os nós do cluster estão ligados (3), o que significa que o endpoint privado só pode ser resolvido por hosts nesse VNet ligado. Em cenários em que não há DNS personalizado configurado no VNet (por defeito), funciona sem problemas, pois os hosts apontam para 168.63.129.16 para DNS que consegue resolver registos na zona DNS privada devido à ligação.
- Se mantiveres o comportamento predefinido da zona DNS privada, o AKS tenta ligar a zona diretamente ao VNet spoke que aloja o cluster, mesmo quando a zona já está ligada a um VNet hub.
- Em VNet spoke que utilizam servidores DNS personalizados, esta ação pode falhar se a identidade gerida do cluster não tiver Network Contributor no VNet spoke. Para evitar a falha, escolha uma das seguintes configurações suportadas:
-
Zona DNS privada personalizada: Forneça uma zona privada existente e defina
privateDNSZone/--private-dns-zonepara o seu ID de recurso. Liga essa zona ao VNet apropriado (por exemplo, o VNet do hub) e definepublicDNSparafalse/ usa--disable-public-fqdn. -
Apenas DNS público: Desative a criação de zonas privadas definindo
privateDNSZone/--private-dns-zonenonedeixepublicDNSno valor padrão (true) / não use--disable-public-fqdn.
-
Zona DNS privada personalizada: Forneça uma zona privada existente e defina
- Em VNet spoke que utilizam servidores DNS personalizados, esta ação pode falhar se a identidade gerida do cluster não tiver Network Contributor no VNet spoke. Para evitar a falha, escolha uma das seguintes configurações suportadas:
- A criação de clusters falha se estiveres a usar a tua própria tabela de rotas (BYO) com kubenet e DNS BYO com clusters privados. Você precisa associar o
RouteTableno grupo de recursos do nó à sub-rede caso a criação do cluster falhe, para garantir que a criação seja bem-sucedida.
Limitações para clusters privados AKS com DNS personalizado
- Definir
privateDNSZone/--private-dns-zoneparanoneepublicDNS: false/--disable-public-fqdnao mesmo tempo não é suportado. - O encaminhamento condicional não suporta 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 AKS.
az group create \
--name <private-cluster-resource-group> \
--location <location>
Criar um cluster AKS privado com rede padrão básica
Crie um cluster privado com rede básica padrão usando o az aks create comando com o --enable-private-cluster sinalizador.
Parâmetros-chave neste comando:
-
--enable-private-cluster: Ativa 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
Crie um ficheiro chamado
main.tfe adicione o seguinte código para definir a versão do Terraform e especificar o fornecedor Azure:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }Adicione o seguinte código a
main.tfpara criar variáveis de entrada para o seu ID de subscrição Azure, nome do grupo de recursos, localização e nome do cluster AKS. 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" }Adicione o seguinte código a
main.tfpara criar um grupo de recursos Azure:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location }Adicione o seguinte código no
main.tfpara criar um cluster AKS privado 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" } }Siga os passos 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 ligar-se ao cluster AKS.
Crie um cluster AKS privado com redes avançadas
Crie um cluster privado com redes avançadas usando o az aks create comando.
Parâmetros-chave neste comando:
-
--enable-private-cluster: Ativa o modo de cluster privado. -
--network-plugin azure: Especifica o plugin de rede Azure CNI. -
--vnet-subnet-id <subnet-id>: O ID de recurso de uma sub-rede existente num VNet. -
--dns-service-ip <dns-service-ip>: Um endereço IP disponível dentro do intervalo de endereços do serviço Kubernetes para usar no serviço DNS do cluster. Por exemplo,10.2.0.10. -
--service-cidr <service-cidr>: Um intervalo de IPs de notação CIDR a partir do qual atribuir IPs do cluster de serviços. 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
Crie um ficheiro chamado
main.tfe adicione o seguinte código para definir a versão do Terraform e especificar o fornecedor Azure:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }Adicione o seguinte código a
main.tfpara criar variáveis de entrada para o seu ID de subscrição Azure, nome do grupo de recursos, localização, nome do cluster AKS, nome da rede virtual (VNet) e nome da subrede. 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" }Adicione o seguinte código a
main.tfpara criar um grupo de recursos Azure, VNet e subrede: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"] }Adicione o seguinte código a
main.tfpara criar o cluster AKS com redes avançadas.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" } }Siga os passos 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 ligar-se ao cluster AKS.
Use domínios personalizados com clusters AKS privados
Se você quiser configurar domínios personalizados que só podem ser resolvidos internamente, consulte Usar domínios personalizados.
Desativar um FQDN público num cluster AKS privado
Desabilitar um FQDN público em um novo cluster
Desative um FQDN público ao criar um cluster AKS privado usando o az aks create comando com o --disable-public-fqdn sinalizador.
Parâmetros-chave neste comando:
-
--disable-public-fqdn: Desativa o domínio público totalmente qualificado (FQDN) para o servidor API. -
--assign-identity <resource-id>: Especifica a identidade gerida a usar para o cluster. -
--private-dns-zone [system|none]: Especifica a zona DNS privada a usar para o cluster.systemé o valor predeterminado ao configurar uma zona DNS privada. Se omitir--private-dns-zone, AKS criará uma zona DNS privada no grupo de recursos de nós.nonedesativa 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
Siga os passos 1-3 em Criar um cluster AKS privado com redes avançadas ou criar um cluster AKS privado com rede básica por defeito para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo utiliza redes avançadas.
Adicione o seguinte código para
main.tfcriar um cluster AKS privado com uma identidade atribuída pelo utilizador e o FQDN público desativado: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" } }Siga os passos 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 ligar-se ao cluster AKS.
Desabilitar um FQDN público em um cluster existente
Desativar um FQDN público em um cluster AKS existente usando o comando az aks update com a flag --disable-public-fqdn.
Parâmetros-chave neste comando:
-
--disable-public-fqdn: Desativa o domínio público totalmente qualificado (FQDN) para o servidor API.
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--disable-public-fqdn
Adicione o seguinte código ao existente
main.tfpara desativar o FQDN público num cluster AKS existente. Este exemplo utiliza redes avançadas. Podes modificá-lo para usar a rede básica predefinida, alterando os recursos e parâmetros relevantes do 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" } }Aplica a configuração atualizada do Terraform usando os
terraform plancomandos eterraform apply.terraform plan terraform apply
Opções de configuração para DNS privado
Pode configurar definições privadas de DNS para um cluster AKS privado usando o CLI do Azure (com o parâmetro --private-dns-zone) ou um modelo Azure Resource Manager (ARM) (com a propriedade privateDNSZone). A tabela seguinte descreve as opções disponíveis para o --private-dns-zone parâmetro / privateDNSZone propriedade:
| Configuração | Description |
|---|---|
system |
O valor padrão ao configurar uma zona DNS privada. Se omitir --private-dns-zone / privateDNSZone, o AKS cria uma zona DNS privada no grupo de recursos de nós. |
none |
Se definires --private-dns-zone / privateDNSZone para none, o AKS não cria uma zona DNS privada. |
<custom-private-dns-zone-resource-id> |
Para usar este parâmetro, é necessário criar uma zona DNS privada no seguinte formato para Azure cloud global: privatelink.<region>.azmk8s.io ou <subzone>.privatelink.<region>.azmk8s.io. Precisa do ID do recurso da zona DNS privada para uso futuro. Também precisa de uma identidade atribuída pelo utilizador ou de um principal de serviço com os papéis de Contribuidor de Zona de DNS Privada e Contribuidor de Rede. Para clusters que utilizam integração API Server VNet, uma zona DNS privada suporta o formato de nomenclatura de private.<region>.azmk8s.io ou <subzone>.private.<region>.azmk8s.io.
Não podes alterar ou eliminar esses recursos de recursos depois de criares o cluster, pois isso pode causar problemas de desempenho e falhas na atualização do 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 estiveres a especificar uma subzona, há um limite de 32 caracteres para o <subzone> nome. |
Considerações para DNS privado
Tenha em mente as seguintes considerações ao configurar DNS privado para um cluster AKS privado:
- Se a zona DNS privada estiver numa subscrição diferente do cluster AKS, precisa de registar o fornecedor
Microsoft.ContainerServiceAzure em ambas as subscrições. - Se o seu cluster AKS estiver configurado com um principal de serviço Active Directory, o AKS não suporta o uso de uma identidade gerida atribuída pelo sistema com zona DNS privada personalizada. O cluster deve usar a autenticação de identidade gerenciada atribuída pelo usuário.
Criar um cluster AKS privado com uma zona DNS privada
Cria um cluster AKS privado com uma zona DNS privada usando o az aks create comando.
Parâmetros-chave neste comando:
-
--enable-private-cluster: Ativa o modo de cluster privado. -
--private-dns-zone [system|none]: Configura a zona DNS privada para o cluster.systemé o valor predeterminado ao configurar uma zona DNS privada. Se omitir--private-dns-zone, AKS criará uma zona DNS privada no grupo de recursos de nós.nonedesativa a criação de uma zona DNS privada. -
--assign-identity <resource-id>: O ID de recurso de uma identidade gerida atribuída pelo utilizador com os papéis 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
Siga os passos 1-3 em Criar um cluster AKS privado com redes avançadas ou criar um cluster AKS privado com rede básica por defeito para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo utiliza redes avançadas.
Adicione o seguinte código para
main.tfcriar um cluster AKS privado com uma zona DNS privada gerida 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" } }Siga os passos 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 ligar-se ao cluster AKS.
Criar um cluster AKS privado sem uma zona DNS privada
Siga os passos 1-3 em Criar um cluster AKS privado com redes avançadas ou criar um cluster AKS privado com rede básica por defeito para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo utiliza redes avançadas.
Adicione o seguinte código para
main.tfcriar o cluster 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" } }Siga os passos 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 ligar-se ao cluster AKS.
Criar um cluster AKS privado com uma zona DNS privada personalizada ou uma subzona DNS privada
Crie um cluster AKS privado com uma zona ou subzona DNS privada personalizada usando o az aks create comando.
Parâmetros-chave neste comando:
-
--enable-private-cluster: Ativa 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 Azure cloud global:privatelink.<region>.azmk8s.ioou<subzone>.privatelink.<region>.azmk8s.io. -
--assign-identity <resource-id>: O ID de recurso de uma identidade gerida atribuída pelo utilizador com os papéis 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, é responsável por criar e gerir a infraestrutura DNS em vez de depender do DNS gerido pelo Azure. Isto inclui criar a zona DNS, ligá-la ao seu VNet e atribuir as permissões necessárias ao AKS para gerir os registos.
Para configurações DNS personalizadas, deve usar obrigatoriamente uma identidade gerida atribuída pelo utilizador com os papéis DNS Privado Zone Contributor e Network Contributor.
Siga os passos 1-3 em Criar um cluster AKS privado com redes avançadas ou criar um cluster AKS privado com rede básica por defeito para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo utiliza redes avançadas.
Adicione o código para
main.tfcriar um cluster AKS privado com uma zona ou subzona DNS privada personalizada: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 ] }Siga os passos 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 ligar-se ao cluster AKS.
Criar um cluster AKS privado com uma zona DNS privada personalizada e um subdomínio personalizado
Crie um cluster AKS privado com uma zona DNS privada personalizada e subdomínio usando o az aks create comando.
Parâmetros-chave neste comando:
-
--enable-private-cluster: Ativa o modo de cluster privado. -
--private-dns-zone <custom-private-dns-zone-resource-id>: O ID de recurso de uma zona DNS privada existente no seguinte formato para Azure cloud global:privatelink.<region>.azmk8s.io. -
--fqdn-subdomain <subdomain>: O subdomínio a usar para o cluster FQDN dentro da zona DNS privada personalizada. -
--assign-identity <resource-id>: O ID de recurso de uma identidade gerida atribuída pelo utilizador com os papéis 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
Siga os passos 1-3 em Criar um cluster AKS privado com redes avançadas ou criar um cluster AKS privado com rede básica por defeito para configurar a configuração do Terraform e criar os recursos necessários dependendo do seu cenário. Este exemplo utiliza redes avançadas.
Adicione o seguinte código para
main.tfcriar um cluster AKS privado com uma zona DNS privada personalizada e 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" } }Siga os passos 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 ligar-se ao cluster AKS.
Atualize um cluster AKS privado existente de uma zona DNS privada para público
Só podes atualizar a partir de byo (bring your own) ou system para none. Nenhuma outra combinação de valores de atualização é suportada.
Advertência
Quando se atualiza um cluster privado de byo ou system para none, os nós dos agentes passam a usar um FQDN público. Num cluster AKS que utiliza Conjuntos de Dimensionamento de Máquinas Virtuais do Azure, é realizada uma atualização da imagem do nó para atualizar os nós com o FQDN público.
Atualize um cluster privado de byo ou system para none usando o az aks update comando com o --private-dns-zone parâmetro definido para none.
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--private-dns-zone none
Adicione o seguinte código ao existente
main.tfpara atualizar o cluster privado AKS de uma zona DNS privada para o público. Este exemplo utiliza redes avançadas. Podes modificá-lo para usar a rede básica predefinida, alterando os recursos e parâmetros relevantes do 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" } }Aplica a configuração atualizada do Terraform usando os
terraform plancomandos eterraform apply.terraform plan terraform apply
Inicializar Terraform
Inicialize o Terraform no diretório que contém o seu main.tf ficheiro usando o terraform init comando. Este comando descarrega o fornecedor Azure necessário para gerir os recursos do Azure com o Terraform.
terraform init
Formatar e validar a configuração do Terraform
Formate e valide a configuração do Terraform usando os terraform fmt comandos e terraform validate .
terraform fmt
terraform validate
Criar um plano de execução do Terraform
Crie um plano de execução Terraform usando o terraform plan comando. Este comando mostra-te os recursos que o Terraform irá criar ou modificar na tua subscrição do Azure.
terraform plan -var="subscription_id=<your-subscription-id>"
Aplicar a configuração Terraform
Após rever e confirmar o plano de execução, aplique a configuração do Terraform usando o terraform apply comando. Este comando cria ou modifica os recursos definidos no seu ficheiro de main.tf na sua subscrição Azure.
terraform apply -var="subscription_id=<your-subscription-id>"
Configure o kubectl para se ligar a um cluster AKS privado
Para gerenciar um cluster Kubernetes, use o cliente de linha de comando Kubernetes, kubectl.
kubectl já está instalado se usares Azure Cloud Shell. Para instalar kubectl localmente, use o az aks install-cli comando.
Configure
kubectlpara se conectar ao cluster do Kubernetes usando oaz aks get-credentialscomando. Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>Verifique a conexão ao seu cluster utilizando o comando
kubectl get. Este comando devolve uma lista dos nodes do cluster.kubectl get nodesO comando devolve 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