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

Em um cluster privado, o painel de controle ou o servidor de API tem endereços IP internos que são definidos no documento RFC1918 – Alocação de endereço para Internet privada. Ao usar um cluster privado, é possível garantir que o tráfego de rede entre o servidor de API e os seus pools de nós permaneça somente na rede privada.

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

Quando você provisiona um cluster do AKS privado, o AKS, por padrão, cria um FQDN privado com uma zona DNS privada e um FQDN público adicional com um registro A correspondente no DNS público do Azure. Os nós do agente continuam usando o registro A na zona de DNS privado para resolver o endereço IP privado do ponto de extremidade privado para comunicação com o servidor de API.

A finalidade deste artigo é ajudar você a implantar um cluster do AKS baseado em link privado. Se você estiver interessado em criar um cluster AKS sem a necessidade de um link privado ou túnel, consulte criar um cluster de Serviço do Azure Kubernetes com Integração da VNet do Servidor de API (versão prévia).

Disponibilidade de região

O cluster privado está disponível em regiões públicas, nas regiões do Azure Government e do Microsoft Azure operado pela 21Vianet em que há suporte para AKS.

Pré-requisitos

  • A CLI do Azure versão 2.28.0 e superior. Execute az --version para localizar a versão e az upgrade para atualizar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
  • A extensão aks-preview 0.5.29 ou posterior.
  • Se você estiver usando o ARM (Azure Resource Manager) ou a API REST do Azure, a versão da API do AKS precisará ser 2021-05-01 ou superior.
  • Há suporte para o serviço Link Privado do Azure apenas no Azure Load Balancer Standard. Não há suporte para Azure Load Balancer básico.
  • Para usar um servidor DNS personalizado, adicione o endereço IP público do Azure 168.63.129.16 como o servidor DNS upstream no servidor DNS personalizado e adicione esse endereço IP público como o primeiro servidor DNS. Para obter mais informações sobre o endereço IP do Azure, consulte O que é o endereço IP 168.63.129.16?

Observação

O pool de nós do Linux do Azure agora está disponível em geral (GA). Para saber mais sobre os benefícios e as etapas de implantação, consulte a Introdução ao Host de Contêiner Linux do Azure para AKS.

Limitações

  • Os intervalos de IP autorizados não podem ser aplicados ao ponto de extremidade do servidor de API privada. Eles se aplicam somente ao servidor de API pública
  • As limitações do serviço de Link Privado do Azure se aplicam a clusters privados.
  • Não há suporte para Agentes do Azure DevOps hospedados pela Microsoft com clusters privados. Considere o uso de agentes auto-hospedados.
  • Se você precisar habilitar o registro de contêiner do Azure para trabalhar com um cluster AKS privado, configure um link privado para o registro de contêiner na rede virtual do cluster ou configure o emparelhamento entre a rede virtual do Registro de Contêiner e a rede virtual do cluster privado.
  • Não há suporte para converter os clusters do AKS existentes em clusters privados.
  • Excluir ou modificar o ponto de extremidade privado na sub-rede do cliente fará com que o cluster pare de funcionar.

Criar um cluster de AKS privado

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 -l eastus -n myResourceGroup

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.

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster  

Rede avançada

Crie um cluster privado com rede avançada usando o comando az aks create com os sinalizadores a seguir:

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> \
    --docker-bridge-address 172.17.0.1/16 \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 

Observação

Se o endereço da ponte Docker CIDR 172.17.0.1/16 entrar em conflito com a sub-rede CIDR, altere o endereço da ponte Docker.

Usar domínios personalizados

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

Desabilitar um FQDN público

Desativar um FQDN público em um novo cluster do AKS

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

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <private-dns-zone-mode> --disable-public-fqdn

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.

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --disable-public-fqdn

Configurar uma zona DNS privada

É possível configurar zonas DNS privadas usando os parâmetros a seguir:

  • sistema: esse é o valor padrão. Se o argumento --private-dns-zone for omitido, o AKS criará uma zona DNS privada no grupo de recursos do nó.
  • nenhum: o padrão é DNS público. O AKS não criará uma zona DNS privada.
  • CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID: isso requer que você crie uma zona DNS privada no seguinte formato para a nuvem global do Azure: privatelink.<region>.azmk8s.io ou <subzone>.privatelink.<region>.azmk8s.io. Você precisará 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 DNS Privada e Colaborador de Rede. Ao implantar usando a integração VNet do servidor de API, uma zona DNS privada suporta o formato de nomenclatura private.<region>.azmk8s.io ou <subzone>.private.<region>.azmk8s.io.
    • Se a zona DNS privada estiver em uma assinatura diferente daquela do cluster do AKS, você precisará registrar o provedor do Azure Microsoft.ContainerServices nas duas assinaturas.
    • "fqdn-subdomain" pode ser utilizado com "CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID" apenas para fornecer funcionalidades de subdomínio para privatelink.<region>.azmk8s.io.
    • Se o cluster do AKS estiver configurado com uma entidade de serviço do Active Directory, o AKS não dará suporte ao uso de uma identidade gerenciada atribuída pelo sistema com uma zona DNS privada personalizada.
    • Se você estiver especificando uma <subzone>, há um limite de 32 caracteres para o nome da <subzone>.

Observação

CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID pode ser configurado usando um modelo do ARM, além da CLI do Azure. privateDNSZone aceita o resourceID da zona DNZ privada, conforme mostrado no exemplo a seguir:

properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}

Importante

A CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID não pode ser alterada depois que o cluster foi criado e não pode ser excluída. Caso contrário, o cluster terá problemas ao executar operações de atualização.

Crie um cluster do AKS privado com uma zona DNS privada

Crie um cluster do AKS privado com uma zona DNS privada usando o comando az aks create com os sinalizadores a seguir:

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone [system|none]

Crie um cluster do 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 comando az aks create com os seguintes sinalizadores:

# The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone or custom private dns subzone resourceID>

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 utilizando o comando az aks create com os seguintes sinalizadores:

# The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone resourceID> --fqdn-subdomain <subdomain>

Atualizar um cluster privado de uma zona DNS privada para público

Observação

Este recurso requer a versão da extensão aks-preview>= 0.5.97

Atualize um cluster privado de byo ou system para none usando o comando az aks update com os seguintes sinalizadores:

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --private-dns-zone none

Observação

Você só pode atualizar de byo ou system para none. Não há suporte para nenhuma outra combinação de valores de atualização.

Opções para se conectar ao cluster privado

O ponto de extremidade do servidor de API não tem nenhum endereço IP público. Para gerenciar o servidor de API, será necessário usar uma VM que tenha acesso à VNet (rede virtual) do Azure do cluster AKS. Existem várias opções para estabelecer a conectividade de rede com o cluster privado:

Observação

Crie uma VM na mesma VNET já que o cluster AKS é a opção mais fácil. A rota expressa e as VPNs adicionam custos e exigem complexidade adicional de rede. O emparelhamento de rede virtual exige que você planeje os intervalos de CIDR de rede para garantir que não haja intervalos sobrepostos.

Emparelhamento de rede virtual

O emparelhamento de rede virtual é um modo de acessar seu cluster privado. Para usar o emparelhamento de rede virtual, você precisa configurar um link entre a rede virtual e a zona de DNS privado.

  1. No navegador, acesse o portal do Azure.
  2. No portal do Azure, acesse o grupo de recursos do nó.
  3. Selecione a zona DNS privada.
  4. No painel à esquerda, selecione Rede virtual.
  5. Crie um novo link para adicionar a rede virtual da VM à zona DNS privada. Leva alguns minutos para que o link da zona DNS fique disponível.
  6. No portal do Azure, navegue até o grupo de recursos que contém a rede virtual do cluster.
  7. No painel à direita, selecione a rede virtual. O nome da rede virtual está no formato aks-vnet-*.
  8. No painel esquerdo, selecione Emparelhamentos.
  9. Selecione Adicionar, adicione a rede virtual da VM e crie o emparelhamento. Para obter mais informações, consulte Emparelhamento de rede virtual do Azure.

Hub e spoke com DNS personalizado

As arquiteturas de hub e spoke geralmente são usadas para implantar redes no 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. Ao implantar um cluster do AKS em um ambiente de rede desse tipo, há algumas considerações especiais:

Private cluster hub and spoke

  • Quando um cluster privado é provisionado, um ponto de extremidade privado (1) e uma zona DNS privada (2) são criados no grupo de recursos gerenciados pelo 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 somente à VNet à qual os nós de cluster estão anexados (3). Isso 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), isso funciona sem problemas, pois os hosts apontam para 168.63.129.16 para o DNS que pode resolver os registros na zona DNS privada devido ao link.
  • Em cenários onde a VNet que contém o cluster tem configurações de DNS personalizadas (4), a implantação de cluster falhará, a menos que a zona DNS privada esteja vinculada à VNet que contém os solucionadores de DNS personalizados (5). Esse link pode ser criado manualmente depois da criação da zona privada, durante o provisionamento do cluster ou via automação na detecção da criação da zona usando mecanismos de implantação baseados em eventos (por exemplo, Grade de Eventos do Azure e Azure Functions). Para evitar falhas de cluster durante a implantação inicial, o cluster pode ser implantado com a ID do recurso de zona DNS privada. Isso só funciona com o tipo de recurso Microsoft.ContainerService/managedCluster e a versão da API 2022-07-01. Não há suporte para o uso de uma versão mais antiga com um modelo do ARM ou uma definição de recurso do Bicep.

Observação

O Encaminhamento Condicional não dá suporte a subdomínios.

Observação

Se você estiver usando traga sua própria tabela de rotas com o kubenet e traga seu próprio DNS com clusters privados, a criação do cluster falhará. 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.

Usar uma conexão de ponto de extremidade privado

Um ponto de extremidade privado pode ser configurado para que uma VNet não precise ser emparelhada para se comunicar com o cluster privado. Para usar um ponto de extremidade privado, crie um novo ponto de extremidade privado na sua rede virtual e, em seguida, crie um link entre sua rede virtual e uma nova zona DNS privada.

Importante

Se a rede virtual estiver configurada com servidores DNS personalizados, o DNS privado precisará ser configurado adequadamente para o ambiente. Confira a documentação de resolução de nomes de redes virtuais para obter mais detalhes.

Criar um recurso de ponto de extremidade privado

Crie um recurso de ponto de extremidade privado na sua VNet:

  1. No navegador, acesse o portal do Azure.
  2. No menu do portal do Azure, selecione Criar um recurso.
  3. Pesquise por Ponto de Extremidade Privado e selecione Criar > Ponto de Extremidade Privado.
  4. Selecione Criar.
  5. Na guia Noções Básicas, configure as seguintes opções:
    • Detalhes do projeto:
      • Selecione uma Assinatura do Azure.
      • Selecione o grupo de recursos do Azure onde sua rede virtual está localizada.
    • Detalhes da instância:
      • Insira um Nome para o ponto de extremidade privado, como myPrivateEndpoint.
      • Insira uma Região para o ponto de extremidade privado.

Importante

Verifique se a região selecionada é igual à rede virtual da qual você deseja se conectar. caso contrário, você não verá sua rede virtual na guia Configuração.

  1. Selecione Avançar: Recurso e configure as opções a seguir:
    • Método de conexão: Selecione Conectar-se a um recurso do Azure no meu diretório.
    • Assinatura: selecione a assinatura na qual seu cluster privado está localizado.
    • Tipo de recurso: Selecione Microsoft.ContainerService/managedClusters.
    • Recurso: selecione seu cluster privado.
    • Sub-recurso de destino : Selecione gerenciamento.
  2. Selecione Avançar: Rede Virtual e configure as opções a seguir:
    • Rede:
      • Rede virtual: selecione sua rede virtual.
      • Sub-rede: selecione sua sub-rede.
  3. Selecione Avançar: DNS>Avançar: Marcas e (opcionalmente) configure os valores-chave conforme necessário.
  4. Selecione Avançar: Revisar + criar>Criar.

Depois que o recurso for criado, registre o endereço IP privado do ponto de extremidade privado para uso futuro.

Criar uma zona DNS privada

Depois que o ponto de extremidade privado for criado, crie uma nova zona DNS privada com o mesmo nome da zona DNS privada criada pelo cluster privado:

  1. Vá para o grupo de recursos do nó no portal do Azure.
  2. Selecione o registro e a zona DNS privada:
    • O nome da zona DNS privada, que segue o padrão *.privatelink.<region>.azmk8s.io.
    • O nome do registro A (excluindo o nome DNS privado).
    • A vida útil (TTL).
  3. No portal do Azure, selecione Criar um recurso.
  4. Pesquise por Zona DNS Privada e selecione Criar > Zona DNS Privada.
  5. Na guia Noções Básicas, configure as seguintes opções:
    • Detalhes do projeto:
      • Selecione sua Assinatura.
      • Selecione o grupo de recursos no qual você criou o ponto de extremidade privado.
    • Detalhes da instância:
      • Insira o Nome da zona DNS recuperada das etapas anteriores.
      • A Região usa como padrão a localização do seu grupo de recursos.
  6. Selecione Examinar + criar>Criar.

Criar um registro A

Depois que a zona DNS privada for criada, crie um registro A, que associa o ponto de extremidade privado ao cluster privado:

  1. Vá para a zona de DNS privada que você criou nas etapas anteriores.
  2. Na página Visão geral, selecione Conjunto de registros .
  3. Na guia Adicionar conjunto de registros, configure as seguintes opções:
    • Nome: insira o nome recuperado do registro A na zona DNS do cluster privado.
    • Tipo: selecione A - Registro do endereço .
    • TTL: insira o número do registro A na zona DNS do cluster privado.
    • Unidade TTL: altere o valor do menu suspenso para corresponder ao do registro A da zona DNS do cluster privado.
    • Endereço IP: insira o endereço IP do ponto de extremidade privado criado.

Importante

Ao criar o registro A, use apenas o nome e não o nome de domínio totalmente qualificado (FQDN).

Depois que o registro A for criado, vincule a zona DNS privada à rede virtual que acessará o cluster privado:

  1. Vá para a zona de DNS privada que você criou nas etapas anteriores.
  2. No painel à esquerda, selecione Links de rede virtual.
  3. Selecione Adicionar e configure as opções a seguir:
    • Nome do link: insira um nome para seu link de rede virtual.
    • Assinatura: selecione a assinatura na qual seu cluster privado está localizado.
    • Rede virtual: selecione a rede virtual do seu cluster privado.
  4. Selecione OK para criar o link.

Pode levar alguns minutos para que a operação seja concluída. Depois que o link da rede virtual for criado, você poderá acessá-lo na guia Links de rede virtual usada na etapa 2.

Aviso

Se o cluster privado for interrompido e reiniciado, o serviço de link privado original do cluster privado será removido e recriado, o que interromperá a conexão entre seu ponto de extremidade privado e o cluster privado. Para resolver esse problema, exclua e recrie todos os pontos de extremidade privados criados pelo usuário vinculados ao cluster privado. Se os pontos de extremidade privados recriados tiverem novos endereços IP, você também precisará atualizar os registros DNS.

Próximas etapas

Para as melhores práticas associadas, consulte Melhores práticas conectividade e segurança da rede no AKS.