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.
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute 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
versã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 comandoaz 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 comandoaz 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 recursosMicrosoft.ContainerService
eMicrosoft.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:
- O acesso de pull anônimo deve ser habilitado para o ACR.
- O ACR precisa ser da Camada de serviço do SKU Premium
(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.
Link privado
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
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)
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.
Link privado
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.
Azure Kubernetes Service