Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 padrão do Serviço Kubernetes do Azure (AKS) têm acesso irrestrito à Internet de saída. Esse nível de acesso à rede permite que os nós e serviços que gere acedam a recursos externos conforme necessário. Se desejar restringir o tráfego de saída, um número limitado de portas e endereços deve estar acessível para assegurar a execução saudável das tarefas de manutenção do cluster. O documento conceptual sobre regras de rede de saída e FQDN para clusters AKS fornece uma lista de endpoints necessários para o cluster AKS e seus complementos e funcionalidades opcionais.
Uma solução comum para restringir o tráfego de saída do cluster é usar um dispositivo de firewall para restringir o tráfego com base em regras de firewall. O firewall é aplicável quando seu aplicativo requer acesso de saída, mas quando as solicitações de saída precisam ser inspecionadas e protegidas. Configurar um firewall manualmente com as regras de saída e FQDNs necessários é um processo complicado, especialmente se seu único requisito for criar um cluster AKS isolado sem dependências de saída para a inicialização do cluster.
Para reduzir o risco de exfiltração de dados, o cluster isolado de rede permite inicializar o cluster AKS sem dependências de rede de saída, até mesmo para buscar componentes/imagens de cluster do Microsoft Artifact Registry (MAR). O operador de cluster pode configurar incrementalmente o tráfego de saída permitido para cada cenário que deseja habilitar. Este artigo orienta você pelas etapas de criação de um cluster isolado de rede.
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 introdutório também:
- Explica duas opções para o recurso privado do Azure Container Registry (ACR) usado para a inicialização do cluster - ACR gerido pelo AKS ou ACR próprio.
- Explica dois modos de cluster privado para criar acesso privado ao servidor de API - baseado em link privado ou Integração Vnet do Servidor de API.
- Explica os dois tipos de saída para controle de saída de cluster -
noneoublock(visualização). - Descreve as limitações atuais de clusters isolados de rede.
Observação
O tipo de saída none está geralmente disponível.
O tipoblock de saída está em visualização.
Importante
Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. 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 versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
Utilize o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Introdução ao Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale o CLI do Azure. Se estiver a usar Windows ou macOS, considere executar o Azure CLI num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga os passos exibidos no seu terminal. Para outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão do Azure CLI na primeira utilização. Para obter mais informações sobre extensões, consulte Usar e gerenciar extensões com a CLI do Azure.
Execute az version para descobrir a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
- Este artigo requer a versão 2.71.0 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.
- Você deve instalar a extensão da CLI do Azure versão
aks-previewou posterior, se estiver a usar o tipo de saídablock(pré-visualização).- Se você ainda não tiver a
aks-previewextensão, instale-a usando oaz extension addcomando.az extension add --name aks-preview - Se você já tiver a
aks-previewextensão, atualize-a para garantir que você tenha a versão mais recente usando oaz extension updatecomando.az extension update --name aks-preview
- Se você ainda não tiver a
- Clusters isolados de rede são suportados em clusters AKS usando o Kubernetes versão 1.30 ou superior.
- Se você estiver optando por usar a opção Bring your own (BYO) Azure Container Registry (ACR), precisará garantir que o ACR seja a camada de serviço Premium SKU.
- Se você estiver usando um cluster isolado de rede configurado com a Integração de VNet do Servidor de API, deverá seguir os pré-requisitos e as orientações deste documento.
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, pode escolher um dos seguintes modos de cluster privado - baseado em link privado ou integração Vnet do Servidor de API.
Independentemente do modo selecionado, você deve definir --bootstrap-artifact-source e --outbound-type parâmetros.
O --bootstrap-artifact-source pode ser definido como Direct ou Cache, correspondendo ao uso de MAR direto (NÃO rede isolada) e ACR privado (rede isolada) para obtenção de imagens, respectivamente.
O --outbound-type parameter pode ser definido como none ou block (visualização). 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 block, todas as conexões de saída serão bloqueadas.
Baseado em link privado
Crie um cluster isolado de rede baseado 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 isolado de rede configurado com a Integração VNet do API Server 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 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 .
Para habilitar o recurso isolado de rede em um cluster AKS existente, primeiro execute o seguinte comando para atualizar bootstrap-artifact-source:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache
Em seguida, você precisa recriar manualmente a imagem de todos os nodepools existentes:
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Observação
Você precisa garantir que a saída esteja disponível até que a primeira reatualização de imagem seja concluída. Para verificar se a reimagem foi concluída, execute:
NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done
Aguarde e verifique se a reimagem foi concluída e, em seguida, execute o seguinte comando para atualizar outbound-type:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none
Importante
Lembre-se de reimaginar instantaneamente os pools de nós do cluster após atualizar a fonte de artefatos para Cache. Caso contrário, o recurso não terá efeito para o cluster.
Implante um cluster isolado de rede utilizando o seu próprio ACR
AKS suporta trazer o seu próprio (BYO) ACR. Para suportar o cenário BYO ACR, deverá 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 final privado e zona de DNS privada.
- A identidade do plano de controlo personalizado e a identidade do kubelet.
Etapa 1: Criar a rede virtual e as sub-redes
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
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: Desabilitar a conectividade de saída de rede virtual (opcional)
Há várias maneiras de desabilitar a conectividade de saída da rede virtual.
Etapa 3: Criar o ACR e habilitar o cache de artefatos
Crie o ACR com o link privado.
az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --query 'id' --output tsv)Crie uma regra de cache ACR seguindo o comando abaixo para permitir que os usuários armazenem em cache imagens de contêiner MAR e binários no novo ACR, observe que o nome da regra de cache e os nomes de repositório devem estar estritamente alinhados com as diretrizes abaixo.
az acr cache create -n aks-managed-mcr -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "aks-managed-repository/*"
Observação
Com o BYO ACR, é sua responsabilidade garantir que a regra de cache ACR seja criada e mantida corretamente como acima. Esta etapa é fundamental para a criação, o funcionamento e a atualização do cluster. Esta regra de cache NÃO deve ser modificada.
Etapa 4: 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 5: 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 REST do registo {REGISTRY_NAME}.azurecr.io e o ponto de extremidade de dados do registo {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io.
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 6: Criar plano de controle e identidades 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)
Conceda permissões AcrPull à 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 7: Criar cluster isolado de rede usando BYO ACR
Ao criar um cluster isolado de rede, você pode escolher um dos seguintes modos de cluster privado - baseado em link privado ou Integração Vnet do Servidor de API.
Independentemente do modo selecionado, você deve definir --bootstrap-artifact-source e --outbound-type parâmetros.
O --bootstrap-artifact-source pode ser definido para Direct ou Cache correspondendo ao uso direto do Microsoft Artifact Registry (MAR) (NÃO isolado de rede) e ao ACR privado (rede isolada) para transferências de imagens, respectivamente.
O --outbound-type parameter pode ser definido como none ou block (visualização). 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 block, todas as conexões de saída serão bloqueadas.
Baseado em link privado
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 configurado 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 isolado de rede configurado com a integração VNet do API Server 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 endereço privado e a zona DNS privada para o ACR BYO, utilize a rede virtual e as sub-redes do cluster AKS já existentes. 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, primeiro execute o seguinte comando para atualizar bootstrap-artifact-source:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID}
Em seguida, você precisa recriar manualmente a imagem de todos os nodepools existentes:
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Observação
Você precisa garantir que a saída esteja disponível até que a primeira reatualização de imagem seja concluída. Para verificar se a reimagem foi concluída, execute:
NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done
Aguarde e verifique se a reimagem foi concluída e, em seguida, execute o seguinte comando para atualizar outbound-type:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none
Importante
Lembre-se de reimaginar instantaneamente os pools de nós do cluster após atualizar a fonte de artefatos para Cache. 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 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á ativado, com base nos valores da propriedade outboundType (nenhum ou bloqueado) e da propriedade artifactSource (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"
},
...
}
Desativar cluster isolado de rede
Desative o recurso de cluster isolado de 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
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.
Solução de problemas
Se estiver a enfrentar problemas, como falhas ao extrair imagens, consulte Solucionar problemas de clusters isolados na rede do Serviço Azure Kubernetes (AKS).
Próximos passos
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 quiser restringir como os pods se comunicam entre eles e as restrições de tráfego East-West dentro do cluster, veja Proteger o tráfego entre pods usando políticas de rede no AKS.