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 oaz 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 oaz 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 oMicrosoft.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:
- O acesso pull anônimo deve ser habilitado para o ACR.
- O ACR precisa ser da camada de serviço Premium SKU
(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.
Ligação privada
Crie um cluster AKS isolado de rede baseada em link privado executando o comando az aks create com --bootstrap-artifact-source
, --enable-private-cluster
e --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-cluster
e --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
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)
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.io
REST do registo e o ponto de extremidade {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io
de 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.
Ligação privada
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.
Azure Kubernetes Service