Partilhar via


Criar um cluster isolado de rede do Serviço Kubernetes do Azure (AKS) (Pré-visualização)

As organizações normalmente têm requisitos rigorosos de segurança e conformidade para regular o tráfego de rede de saída (saída) de um cluster para eliminar os riscos de exfiltração de dados. Por padrão, os clusters do Serviço Kubernetes do Azure (AKS) têm acesso irrestrito à Internet de saída. Esse nível de acesso à rede permite que nós e serviços executados acessem recursos externos conforme necessário. Se você deseja restringir o tráfego de saída, um número limitado de portas e endereços deve estar acessível para manter as tarefas de manutenção do cluster íntegras.

Uma solução para proteger endereços de saída é usar um dispositivo de firewall que possa controlar o tráfego de saída com base em nomes de domínio.

Outra solução, um cluster AKS isolado de rede (visualização), simplifica a configuração de restrições de saída para um cluster pronto para uso. Um cluster AKS isolado na rede reduz o risco de exfiltração de dados ou exposição não intencional dos pontos finais públicos do cluster.

Importante

Os recursos de visualização do AKS estão disponíveis em uma base de autosserviço e opt-in. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As visualizações do AKS são parcialmente cobertas pelo suporte ao cliente com base no melhor esforço. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Antes de começar

  • Leia a visão geral conceitual desse recurso, que fornece uma explicação de como os clusters isolados de rede funcionam. O artigo de visão geral também:
    • Explica os dois métodos de acesso, ACR gerenciado pelo AKS ou BYO ACR, que você pode escolher neste artigo.
    • Descreve as limitações atuais.
  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

  • Este artigo requer a versão 2.63.0 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.

  • Instale a aks-preview extensão CLI do Azure versão 9.0.0b2 ou posterior.

    • Se você ainda não tiver a aks-preview extensão, instale-a usando o az extension add comando.

      az extension add --name aks-preview
      
    • Se você já tiver a aks-preview extensão, atualize-a para garantir que você tenha a versão mais recente usando o az extension update comando.

      az extension update --name aks-preview
      
  • Registre o NetworkIsolatedClusterPreview sinalizador de recurso usando o comando az feature register .

    az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Verifique o status do registro usando o comando az feature show . Leva alguns minutos para que o status mostre Registrado:

    az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Nota

    Se você optar por criar cluster isolado de rede com a integração de VNet do Servidor de API configurada para acesso privado do Servidor de API, precisará repetir as etapas acima para registrar EnableAPIServerVnetIntegrationPreview o sinalizador de recurso também. Quando o status refletir Registrado, atualize o Microsoft.ContainerService Microsoft.ContainerRegistry registro dos provedores e de recursos usando o comando az provider register :

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Se você estiver escolhendo a opção Bring your own (BYO) Azure Container Registry (ACR), precisará garantir que o ACR atenda aos seguintes requisitos:

  • (Opcional) Se você quiser usar qualquer recurso ou complemento opcional do AKS que exija acesso à rede de saída, este documento contém os requisitos de saída para cada recurso. Além disso, este documento enumera os recursos ou complementos que oferecem suporte à integração de link privado para conexão segura de dentro da rede virtual do cluster. Se a integração de link privado não estiver disponível para nenhum desses recursos, o cluster poderá ser configurado com uma tabela de roteamento definida pelo usuário e um Firewall do Azure com base nas regras de rede e regras de aplicativo necessárias para esse recurso.

Nota

As seguintes extensões de cluster AKS ainda não são suportadas em clusters isolados de rede:

Implantar um cluster isolado de rede com ACR gerenciado pelo AKS

O AKS cria, gerencia e reconcilia um recurso ACR nessa opção. Você não precisa atribuir permissões ou gerenciar o ACR. O AKS gerencia as regras de cache, o link privado e o ponto de extremidade privado usados no cluster isolado da rede.

Criar um cluster isolado de rede

Ao criar um cluster AKS isolado de rede, você pode escolher um dos seguintes modos de cluster privado - Link privado ou API Server Vnet Integration.

Independentemente do modo selecionado, você define --bootstrap-artifact-source e --outbound-type os parâmetros.

--bootstrap-artifact-source pode ser definido como um Direct ou Cache correspondendo ao uso de MCR direto (NÃO isolado de rede) e ACR privado (rede isolada) para extrações de imagem, respectivamente.

O --outbound-type parameter pode ser definido como um none ou block. Se o tipo de saída estiver definido como none, o AKS não configura nenhuma conexão de saída para o cluster, permitindo que o usuário as configure por conta própria. Se o tipo de saída estiver definido como bloquear, todas as conexões de saída serão bloqueadas.

Crie um cluster AKS isolado de rede baseada em link privado executando o comando az aks create com --bootstrap-artifact-source, --enable-private-clustere --outbound-type parâmetros.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}   --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none  --network-plugin azure --enable-private-cluster

Integração de VNet do Servidor de API

Crie um cluster AKS isolado de rede configurado com a Integração VNet do Servidor de API executando o comando az aks create com --bootstrap-artifact-source, --enable-apiserver-vnet-integration --enable-private-clustere --outbound-type parâmetros.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

Atualizar um cluster AKS existente para o tipo isolado de rede

Se você preferir habilitar o isolamento de rede em um cluster AKS existente em vez de criar um novo cluster, use o comando az aks update .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none

Depois que o recurso é habilitado, todos os nós recém-adicionados podem inicializar com êxito sem saída. Ao habilitar o isolamento de rede em um cluster existente, lembre-se de que você precisa recriar manualmente a imagem de todos os nós existentes.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Lembre-se de criar uma nova imagem dos pools de nós do cluster depois de habilitar o modo de isolamento de rede para um cluster existente. Caso contrário, o recurso não terá efeito para o cluster.

Implante um cluster isolado de rede com traga seu próprio ACR

AKS suporta trazer o seu próprio (BYO) ACR. Para suportar o cenário BYO ACR, tem de configurar um ponto de extremidade privado ACR e uma zona DNS privada antes de criar o cluster AKS.

As etapas a seguir mostram como preparar esses recursos:

  • Rede virtual personalizada e sub-redes para AKS e ACR.
  • ACR, regra de cache ACR, ponto de extremidade privado e zona DNS privada.
  • Identidade do plano de controle personalizado e identidade kubelet.

Etapa 1: Criar a rede virtual e as sub-redes

O acesso de saída padrão para a sub-rede AKS deve ser false.

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24 --default-outbound-access false

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

Etapa 2: Criar o ACR e habilitar o cache de artefatos

  1. Crie o ACR com o link privado e acesso pull anônimo.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Crie uma regra de cache ACR para permitir que os usuários armazenem em cache imagens de contêiner MCR no novo ACR.

    az acr cache create -n acr-cache-rule -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "*"
    

Etapa 3: Criar um ponto de extremidade privado para o ACR

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

Etapa 4: Criar uma zona DNS privada e adicionar registros

Crie uma zona DNS privada chamada privatelink.azurecr.io. Adicione os registos para o ponto de extremidade {REGISTRY_NAME}.azurecr.ioREST do registo e o ponto de extremidade {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.iode dados do registo .

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

Etapa 5: Criar identidades de plano de controle e kubelet

Identidade do plano de controlo

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Identidade Kubelet

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Conceder permissões AcrPull para a identidade Kubelet

az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Depois de configurar esses recursos, você pode continuar a criar o cluster AKS isolado de rede com o BYO ACR.

Etapa 6: Criar cluster isolado de rede usando o BYO ACR

Ao criar um cluster AKS isolado de rede, você pode escolher um dos seguintes modos de cluster privado - Link privado ou API Server Vnet Integration.

Independentemente do modo selecionado, você define --bootstrap-artifact-source e --outbound-type os parâmetros.

--bootstrap-artifact-source pode ser definido como um Direct ou Cache correspondendo ao uso de MCR direto (NÃO isolado de rede) e ACR privado (rede isolada) para extrações de imagem, respectivamente.

O --outbound-type parameter pode ser definido como um none ou block. Se o tipo de saída estiver definido como none, o AKS não configura nenhuma conexão de saída para o cluster, permitindo que o usuário as configure por conta própria. Se o tipo de saída estiver definido como bloquear, todas as conexões de saída serão bloqueadas.

Crie um cluster isolado de rede baseado em link privado que acesse seu ACR executando o comando az aks create com os parâmetros necessários.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

Integração de VNet do Servidor de API

Para um cluster isolado de rede com integração VNet do servidor de API, primeiro crie uma sub-rede e atribua a função correta com os seguintes comandos:

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Crie um cluster AKS isolado de rede configurado com API Server VNet Integration e acesse seu ACR executando o comando az aks create com os parâmetros necessários.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Atualizar um cluster AKS existente

Se você preferir habilitar o isolamento de rede em um cluster AKS existente em vez de criar um novo cluster, use o comando az aks update .

Ao criar o ponto de extremidade privado e a zona DNS privada para o ACR BYO, use a rede virtual e as sub-redes existentes do cluster AKS existente. Ao atribuir a permissão AcrPull à identidade kubelet, use a identidade kubelet existente do cluster AKS existente.

Para habilitar o recurso isolado de rede em um cluster AKS existente, use o seguinte comando:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none

Depois que o recurso de cluster isolado de rede estiver habilitado, os nós no pool de nós recém-adicionado poderão inicializar com êxito sem saída. Você deve criar uma nova imagem dos pools de nós existentes para que o nó recém-dimensionado possa inicializar com êxito. Ao habilitar o recurso em um cluster existente, você precisa recriar manualmente a imagem de todos os nós existentes.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Lembre-se de criar uma nova imagem dos pools de nós do cluster depois de habilitar o recurso de cluster isolado de rede. Caso contrário, o recurso não terá efeito para o cluster.

Atualize o seu ID ACR

É possível atualizar o ACR privado usado com um cluster AKS isolado de rede. Para identificar o ID do recurso ACR, use o az aks show comando.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

A atualização do ID ACR é realizada executando o az aks update comando com os --bootstrap-artifact-source parâmetros e --bootstrap-container-registry-resource-id .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <New BYO ACR resource ID>

Ao atualizar a ID ACR em um cluster existente, você precisa recriar manualmente a imagem de todos os nós existentes.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Lembre-se de criar uma nova imagem dos pools de nós do cluster depois de habilitar o recurso de cluster isolado de rede. Caso contrário, o recurso não terá efeito para o cluster.

Validar se o cluster isolado de rede está habilitado

Para validar que o recurso de cluster isolado de rede está habilitado, use o comando 'az aks show

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

A saída a seguir mostra que o recurso está habilitado, com base nos valores da propriedade (none ou blocked) e artifactSource property outboundType (Cached).

"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
  ...
  "networkProfile": {
    ...
    "outboundType": "none",
    ...
  },
  ...
  "bootstrapProfile": {
    "artifactSource": "Cache",
    "containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
  },
  ...
}

Desativar cluster isolado de rede

Desative o recurso de cluster isolado de rede executando o az aks update comando com os --bootstrap-artifact-source parâmetros e --outbound-type .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

Ao desabilitar o recurso em um cluster existente, você precisa recriar manualmente a imagem de todos os nós existentes.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Lembre-se de criar uma nova imagem dos pools de nós do cluster depois de desabilitar o recurso de cluster isolado de rede. Caso contrário, o recurso não terá efeito para o cluster.

Próximos passos

Neste artigo, você aprendeu quais portas e endereços permitir se quiser restringir o tráfego de saída para o cluster.

Se você quiser configurar a configuração de restrição de saída usando o Firewall do Azure, visite Controlar o tráfego de saída usando o Firewall do Azure no AKS.

Se você quiser restringir a forma como os pods se comunicam entre si e as restrições de tráfego Leste-Oeste dentro do cluster, consulte Proteger o tráfego entre pods usando políticas de rede no AKS.