Compartilhar via


Criar um cluster do Serviço de Kubernetes do Azure (AKS) isolados da rede (Versão Prévia)

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

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

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

Importante

As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

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.
  • 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-previewversão da Extensão da CLI do Azure9.0.0b2 ou posterior.

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

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

      az extension update --name aks-preview
      
  • Registre o sinalizador de recurso NetworkIsolatedClusterPreview 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. Levará alguns minutos para que o status mostre Registrado:

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

    Observação

    Se você optar por criar um cluster isolado de rede com a Integração VNet do Servidor de API configurada para acesso privado do Servidor de API, será necessário repetir as etapas acima para registrar EnableAPIServerVnetIntegrationPreview sinalizador de recursos também. Quando o status mostrar Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService e Microsoft.ContainerRegistry 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 Traga seu próprio (BYO) ACR (Registro de Contêiner do Azure), 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 dão 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.

Observação

Ainda não há suporte para as seguintes extensões de cluster do AKS em clusters isolados de rede:

Implantar um cluster isolado de rede com o 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 de rede.

Criar um cluster isolado da rede

Ao criar um cluster do AKS isolado da rede, você pode escolher um dos seguintes modos de cluster privado: link privado ou integração de Vnet do Servidor de API.

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

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

O --outbound-type parameter pode ser definido como none ou block. Se o tipo de saída estiver definido como none, o AKS não configurará 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 os parâmetros --bootstrap-artifact-source, --enable-private-cluster e --outbound-type.

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

Usar a Integração VNet do servidor de API

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

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 do AKS existente para o tipo isolado de rede

Se você preferir habilitar o isolamento de rede em um cluster do 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 estiver habilitado, todos os nós recém-adicionados poderão inicializar com êxito sem saída. Ao habilitar o isolamento de rede em um cluster existente, tenha em mente que você precisa refazer a imagem manual de todos os nós existentes.

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

Importante

Lembre-se de refazer a 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.

Implantar um cluster isolado da rede com o seu próprio ACR

O AKS dá suporte à criação de seu próprio ACR (BYO). Para dar suporte ao cenário do BYO ACR, você precisa configurar um ponto de extremidade privado do ACR e uma zona DNS privada antes de criar o cluster do AKS.

As etapas a seguir mostram como preparar esses recursos:

  • Rede virtual personalizada e sub-redes para AKS e ACR.
  • ACR, regra de cache do 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 do AKS deve ser falso.

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 o acesso de 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 do ACR para permitir que os usuários armazenem imagens de contêiner MCR em cache 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

Criar uma zona de DNS privado chamada privatelink.azurecr.io. Adicione os registros para o ponto de extremidade REST {REGISTRY_NAME}.azurecr.io do registro e o ponto de extremidade de dados {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io do registro.

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 controle

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 do 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 do AcrPull para a identidade do 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 do AKS isolado de rede com o BYO ACR.

Etapa 6: Criar um cluster isolado da rede usando o BYO ACR

Ao criar um cluster do AKS isolado da rede, você pode escolher um dos seguintes modos de cluster privado: link privado ou integração de Vnet do Servidor de API.

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

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

O --outbound-type parameter pode ser definido como none ou block. Se o tipo de saída estiver definido como none, o AKS não configurará 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 o 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

Usar a Integração VNet do servidor de API

Para um cluster isolado de rede com integração de 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 do AKS isolado da rede configurado com a Integração VNet do Servidor de API e acesse o 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 de AKS existente

Se você preferir habilitar o isolamento de rede em um cluster do 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 BYO ACR, use a rede virtual e as sub-redes existentes do cluster do AKS existente. Quando você atribuir a permissão AcrPull à identidade do kubelet, use a identidade kubelet existente do cluster do AKS existente.

Para habilitar o recurso isolado de rede em um cluster do 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 ser inicializados com êxito sem saída. Você deve refazer a 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 refazer a imagem manual de todos os nós existentes.

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

Importante

Lembre-se de refazer a 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.

Atualizar sua ID do ACR

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

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

A atualização da ID do ACR é executada executando o comando az aks update com os parâmetros --bootstrap-artifact-source 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 do ACR em um cluster existente, você precisará refazer a imagem manual de todos os nós existentes.

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

Importante

Lembre-se de refazer a 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 da rede está habilitado

Para validar se 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 outboundType (nenhum ou bloqueado) e da propriedade artifactSource (Armazenado em cache).

"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"
  },
  ...
}

Desabilitar um cluster isolado da rede

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

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

Quando você desabilitar o recurso em um cluster existente, precisará refazer a imagem manual de todos os nós existentes.

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

Importante

Lembre-se de refazer a 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óximas etapas

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 Como controlar o tráfego de saída usando o Firewall do Azure no AKS.

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