Partilhar via


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

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

Visão geral

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 de API encontra-se num grupo de recursos do Azure gerido pelo AKS, e o seu cluster ou pool de nós encontra-se no seu grupo de recursos. O servidor e o cluster ou grupo de nós podem comunicar-se mutuamente por meio do serviço de Link Privado do Azure na rede virtual do servidor API e de um endpoint privado exposto na subrede do cluster AKS.

Quando você provisiona um cluster 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 correspondente A no DNS público do Azure. Os nós do agente continuam a usar o A registro na zona DNS privada para resolver o endereço IP privado do ponto de extremidade privado para comunicação com o servidor de API.

Disponibilidade da região

Os clusters privados estão disponíveis em regiões públicas, Azure Government e Microsoft Azure operados por regiões 21Vianet onde o AKS é suportado.

Pré-requisitos

  • A CLI do Azure versão 2.28.0 ou superior. Execute az --version para localizar a versão e execute az upgrade para atualizar a versão. Se precisar de instalar ou atualizar, consulte Install Azure CLI.
  • Se estiver usando o Azure Resource Manager (ARM) ou a API REST do 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 do Azure 168.63.129.16 como o servidor DNS upstream no servidor DNS personalizado e certifique-se de adicionar 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?
  • Os clusters AKS existentes habilitados com a integração de rede virtual do API Server podem ter o modo de cluster privado habilitado. Para obter mais informações, consulte Habilitar ou desabilitar o modo de cluster privado em um cluster existente com a integração de VNet do API Server.

Observação

O pool de nós Linux do Azure agora está disponível de forma 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 autorizados por IP não podem ser aplicados ao ponto de extremidade do servidor de API privado, eles só se aplicam ao servidor de API público.
  • As limitações do serviço Azure Private Link aplicam-se a clusters privados.
  • Não há suporte para Agentes de DevOps hospedados pela Microsoft do Azure 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.
  • Excluir ou modificar o ponto de extremidade privado na sub-rede do cliente fará com que o cluster pare de funcionar.
  • O serviço Azure Private Link é suportado apenas no Balanceador de Carga do Azure Padrão. Não há suporte para o Balanceador de Carga Básico do Azure.

Criar um cluster AKS privado

  1. 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>
    
  2. Crie um cluster privado com rede básica padrão usando o az aks create comando com o --enable-private-cluster sinalizador.

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --generate-ssh-keys
    

Conectar-se ao cluster privado

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

  1. Configure kubectl para se conectar ao cluster do Kubernetes usando o az aks get-credentials comando. 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>
    
  2. Verifique a conexão ao seu cluster utilizando o comando kubectl get. Este comando devolve uma lista dos nodes do cluster.

    kubectl get nodes
    

Usar domínios personalizados

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

Desativar um FQDN público

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.

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone <private-dns-zone-mode> \
        --disable-public-fqdn \
        --generate-ssh-keys
    

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.

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

Configurar uma zona DNS privada

Você pode configurar zonas DNS privadas usando os seguintes parâmetros:

  • system: Este é o valor padrão. Se o --private-dns-zone argumento for omitido, o AKS criará uma zona DNS privada no grupo de recursos do nó.
  • none: 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á do ID de recurso da zona DNS privada para uso futuro. Você também precisa de uma identidade atribuída pelo utilizador ou de um principal de serviço com as funções de Colaborador de Zona DNS Privada e de Colaborador de Rede. Ao utilizar a integração de VNet com o servidor de API durante a implementação, uma zona DNS privada suporta o formato de nomenclatura de private.<region>.azmk8s.io ou <subzone>.private.<region>.azmk8s.io. Não é possível alterar ou excluir esse recurso depois de criar o cluster, pois ele pode causar problemas de desempenho e falhas de atualização do cluster.
    • Se a zona DNS privada estiver em uma assinatura diferente do cluster AKS, você precisará registrar o provedor do Microsoft.ContainerServices Azure em ambas as assinaturas.
    • Você pode usar fqdn-subdomain com CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID apenas para fornecer recursos de subdomínio para privatelink.<region>.azmk8s.io.
    • Se o cluster AKS estiver configurado com uma entidade de serviço do Active Directory, o AKS não suporta o uso de uma identidade gerida 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.
    • Se você estiver especificando um <subzone>, há um limite de 32 caracteres para o <subzone> nome.

Observação

Você pode configurar CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID usando um modelo ARM ou a CLI do Azure. privateDNSZone aceita a zona resourceID DNZ privada como mostrado no exemplo a seguir:

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

Criar um cluster AKS privado com uma zona DNS privada

  • Crie um cluster AKS privado com uma zona DNS privada usando o az aks create comando com os seguintes sinalizadores:

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone [system|none] \
        --generate-ssh-keys
    

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 com os seguintes sinalizadores:

    # The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"
    
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone <custom private dns zone or custom private dns subzone resourceID> \
        --generate-ssh-keys
    

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 um subdomínio usando o az aks create comando 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 \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone <custom private dns zone resourceID> \
        --fqdn-subdomain <subdomain> \
        --generate-ssh-keys
    

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

Você só pode atualizar de byo ou system para none. Nenhuma outra combinação de valores de atualização é suportada. Antes de atualizar, certifique-se de se conectar ao cluster privado.

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. Em um cluster AKS que usa Conjuntos de Escala de Máquina Virtual do Azure, é realizada uma atualização de imagem de nó para atualizar os nós para incluir o FQDN público.

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

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

Opções para se conectar ao cluster privado

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

Criar uma VM na mesma VNet que o cluster AKS é a opção mais fácil. A Rota Expressa e as VPNs adicionam custos e exigem complexidade de rede adicional. O emparelhamento de rede virtual requer que você planeje seus intervalos CIDR de rede para garantir que não haja intervalos sobrepostos.

Conexão de rede virtual

Para usar o emparelhamento de rede virtual, você precisa configurar um link entre a rede virtual e a zona DNS privada.

  1. No portal do Azure, navegue até ao grupo de recursos do nó e selecione o seu recurso de zona DNS privada.
  2. No menu de serviço, em Gerenciamento de DNS, selecione Adicionar Links de Rede Virtual>.
  3. Na página Adicionar Link de Rede Virtual , defina as seguintes configurações:
    • Nome do link: insira um nome para o link de rede virtual.
    • Rede Virtual: Selecione a rede virtual que contém a VM.
  4. Selecione Criar para criar o link de rede virtual.
  5. Navegue até o grupo de recursos que contém a rede virtual do cluster e selecione o recurso de rede virtual.
  6. No menu de serviço, em Configurações, selecione Emparelhamentos>Adicionar.
  7. Na página Adicionar emparelhamento, configure os seguintes parâmetros:
    • Nome do link de peering: Introduza um nome para o link de peering.
    • Rede virtual: selecione a rede virtual da VM.
  8. Selecione Adicionar para criar o link de emparelhamento.

Para obter mais informações, consulte Emparelhamento de rede virtual.

Hub e falou com DNS personalizado

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

Ponto de ligação e distribuição de cluster privado

Ao implantar um cluster AKS em tal ambiente de rede, há algumas considerações especiais:

  • Quando um cluster privado é provisionado, um ponto de extremidade privado (1) e uma zona DNS privada (2) são criados no grupo de recursos gerenciado por cluster por padrão. O cluster usa um A registo 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á vinculada somente à VNet à qual os nós do cluster estão conectados (3). Isso significa que o endpoint privado só pode ser resolvido por hosts naquela VNet associada. Em cenários em que nenhum DNS personalizado está configurado na VNet (padrão), isso funciona corretamente, pois os hosts apontam para 168.63.129.16 para DNS que pode resolver registros na zona DNS privada devido ao link.

  • Se você mantiver o comportamento padrão de zona DNS privada, o AKS tentará vincular a zona diretamente à VNet spoke que hospeda o cluster mesmo quando a zona já estiver vinculada a uma VNet de hub.
    Em VNets spoke que usam servidores DNS personalizados, esta ação pode falhar se a identidade gerida do cluster não tiver o Colaborador de Rede na VNet spoke.
    Para evitar a falha, escolha uma das seguintes configurações suportadas:

    • Zona DNS privada personalizada – Forneça uma zona privada pré-criada e definida privateDNSZone como seu ID de recurso. Vincule essa zona à VNet apropriada (por exemplo, a VNet do hub) e defina publicDNS como false.

    • Somente DNS público – Desative a criação de zona privada definindo privateDNSZonenone deixando publicDNS em seu valor padrão (true).

    Configuração privateDNSZone: noneepublicDNS: false ao mesmo tempo não é suportada;

Observação

O encaminhamento condicional não suporta subdomínios.

Observação

Se você estiver usando traga sua própria tabela de rotas com 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 caso a criação do cluster falhe, para garantir que a criação seja bem-sucedida.

Usar uma conexão de ponto de extremidade privada

Um ponto de extremidade privado pode ser configurado para que uma VNet não precise estar conectada para se comunicar com o cluster privado. Crie um novo ponto de extremidade privado na rede virtual que contém os recursos que consomem e, em seguida, crie um link entre sua rede virtual e uma nova zona DNS privada na mesma rede.

Importante

Se a rede virtual estiver configurada com servidores DNS personalizados, o DNS privado precisará ser configurado adequadamente para o ambiente. Consulte 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 em sua rede virtual:

  1. Na home page do portal do Azure, selecione Criar um recurso.
  2. Procure por Ponto de extremidade privado e selecione Criar>ponto de extremidade privado.
  3. Selecione Criar.
  4. Na guia Noções básicas , defina as seguintes configurações:
    • Detalhes do projeto
      • Assinatura: selecione a assinatura onde o cluster privado está localizado.
      • Grupo de recursos: selecione o grupo de recursos que contém sua rede virtual.
    • Detalhes da instância
      • Nome: insira um nome para seu ponto de extremidade privado, como myPrivateEndpoint.
      • Região: selecione a mesma região da sua rede virtual.
  5. Selecione Next: Resource e defina as seguintes configurações:
    • Método de conexão: selecione Conectar a um recurso do Azure em meu diretório.
    • Assinatura: selecione a assinatura onde o cluster privado está localizado.
    • Tipo de recurso: Selecione Microsoft.ContainerService/managedClusters.
    • Recurso: Selecione seu cluster privado.
    • Subrecurso de destino: Selecione gerenciamento.
  6. Selecione Next: Virtual Network e defina as seguintes configurações:
    • Ligação em rede
      • Rede virtual: Selecione a sua rede virtual.
      • Sub-rede: Selecione sua sub-rede.
  7. Selecione Next: DNS>Next: Tags e (opcionalmente) configure valores-chave conforme necessário.
  8. Selecione Seguinte: Rever + 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 de criar o ponto de extremidade privado, crie uma nova zona DNS privada com o mesmo nome da zona DNS privada criada pelo cluster privado. Lembre-se de criar essa zona DNS na VNet que contém os recursos consumidos.

  1. No portal do Azure, navegue até o grupo de recursos do seu nó e selecione o seu recurso de zona DNS privada.
  2. No menu de serviço, em Gerenciamento de DNS, selecione Conjuntos de registros e observe o seguinte:
    • O nome da zona DNS privada, que segue o padrão *.privatelink.<region>.azmk8s.io.
    • O nome do A registo (excluindo o nome DNS privado).
    • O tempo de vida (TTL).
  3. Na home page do portal do Azure, selecione Criar um recurso.
  4. Procure por zona DNS privada e selecione Criar>zona DNS privada.
  5. Na guia Noções básicas , defina as seguintes configurações:
    • Detalhes do projeto:
      • Selecione a sua Subscrição.
      • Selecione o grupo de recursos onde você criou o ponto de extremidade privado.
    • Detalhes da instância
      • Nome: insira o nome da zona DNS recuperada das etapas anteriores.
      • A região padrão é automaticamente associada ao local do seu grupo de recursos.
  6. Selecione Revisar e criar>Criar.

Criar um A registo

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

  1. Vá para a zona DNS privada que você criou nas etapas anteriores.
  2. No menu de serviço, em Gerenciamento de DNS, selecione Adicionar conjuntos>de registros.
  3. Na página Adicionar conjunto de registros , defina as seguintes configurações:
    • Nome: insira o nome recuperado do A registro na zona DNS do cluster privado.
    • Tipo: Selecione A - Registro de endereço.
    • TTL: Insira o A número do registro na zona DNS do cluster privado.
    • Unidade TTL: altere o valor da lista suspensa para corresponder ao valor no A registo da zona DNS do cluster privado.
    • Endereço IP: insira o endereço IP do ponto de extremidade privado que você criou.
  4. Selecione Adicionar para criar o A registro.

Importante

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

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

  1. Vá para a zona DNS privada que você criou nas etapas anteriores.
  2. No menu de serviço, em Gerenciamento de DNS, selecione Adicionar Links de Rede Virtual>.
  3. Na página Adicionar Link de Rede Virtual , defina as seguintes configurações:
    • Nome do link: insira um nome para o link de rede virtual.
    • Assinatura: selecione a assinatura onde o cluster privado está localizado.
    • Rede Virtual: Selecione a rede virtual do seu cluster privado.
  4. Selecione Criar para criar o link.

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

Advertência

  • Se o cluster privado for interrompido e reiniciado, o serviço de link privado original do cluster privado será removido e recriado, o que interrompe 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.
  • Se você atualizar os registros DNS na zona DNS privada, verifique se o host do qual você está tentando se conectar está usando os registros DNS atualizados. Você pode verificar isso usando o nslookup comando. Se você notar que as atualizações não estão refletidas na saída, talvez seja necessário liberar o cache DNS em sua máquina e tentar novamente.

Próximos passos

Para obter as melhores práticas associadas, consulte Práticas recomendadas para conectividade de rede e segurança no AKS.