Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tutorial orienta-o na implementação de um cluster privado do Azure Kubernetes Service (AKS) no Azure Enclave. Cria-se um cluster AKS totalmente privado com encriptação gerida pelo cliente, integração de rede e padrões de acesso seguro.
Neste tutorial, aprenderás como:
- Ativar as funcionalidades necessárias do Azure para o AKS privado
- Validar os recursos necessários para o AKS
- Implantar Cluster Privado AKS
- Configurar a encriptação de chaves gerida pelo cliente
- Criar endpoints comunitários para conectividade AKS
- Associe múltiplos grupos de recursos à carga de trabalho do AKS
- Acede ao cluster AKS e valide
Pré-requisitos
- Conclusão do Tutorial 2-3: Implementação da carga de trabalho do Azure Virtual Desktop
- enclave do AKS com sub-redes para nó, servidor da API e ponto final privado
- Dependências comuns (Key Vault, identidade gerida, conjunto de encriptação de disco) do Tutorial 2-2: Criar ambiente Azure Enclave
- Zonas de DNS privado para o AKS implementadas
- Papel de colaborador no grupo de recursos de carga de trabalho do AKS
- função Azure Kubernetes Service Contributor na subscrição
- CLI do Azure ou Azure PowerShell instalado para operações avançadas
Importante
Este tutorial está alinhado com o comportamento do modelo Private AKS Cluster e requer os recursos criados pela implementação do AVE AKS Enclave no Tutorial 2-2.
Antes de começares
Compreender o AKS no Azure Enclave
O AKS no Azure Enclave fornece:
- Cluster totalmente privado: servidor API acessível apenas através de endpoint privado
- Isolamento de rede: Todo o tráfego mantém-se dentro dos limites do enclave
- Encriptação gerida pelo cliente: Tanto o plano de controlo como o plano de dados encriptados com CMK
- Limites de carga de trabalho seguros: recursos Kubernetes contidos nas políticas de segurança do enclave
Convenções de nomenclatura de recursos
Este tutorial usa nomes de exemplo. Use a convenção de nomes da sua organização:
- Enclave:
aks-enclave - Carga de trabalho:
aks-workload - Grupo de recursos:
rg-aks-cluster - Cluster do AKS:
aks-prod-01
Ativar as funcionalidades necessárias do Azure
O AKS no Azure Enclave exige que funcionalidades específicas do Azure estejam ativadas na sua subscrição.
Ativar a funcionalidade EncryptionAtHost
Esta funcionalidade permite a encriptação ao nível do anfitrião da máquina virtual para os nós do AKS.
# Register the feature
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
# Check registration status (may take 10-15 minutes)
az feature show --namespace Microsoft.Compute --name EncryptionAtHost
# Once registered, refresh the provider
az provider register --namespace Microsoft.Compute
Ativar Integração de Rede Virtual do API Server (Pré-visualização)
Esta funcionalidade permite que o servidor API do AKS seja integrado diretamente na sua rede virtual.
# Register the feature
az feature register --namespace Microsoft.ContainerService --name EnableAPIServerVnetIntegrationPreview
# Check registration status
az feature show --namespace Microsoft.ContainerService --name EnableAPIServerVnetIntegrationPreview
# Once registered, refresh the provider
az provider register --namespace Microsoft.ContainerService
Importante
Espere que ambas as funcionalidades apareçam "state": "Registered" antes de prosseguir. O registo normalmente demora entre 10 a 15 minutos.
Preparar a chave SSH (Opcional)
Note
A autenticação por chave SSH para acesso aos nós do AKS está a ser descontinuada. Este passo é atualmente obrigatório, mas será opcional em futuras versões de modelos. Se não precisares de acesso direto ao nó, podes saltar esta secção quando o modelo for atualizado.
Gerar par de chaves SSH
# Create .ssh directory if it doesn't exist
$sshDir = "$env:USERPROFILE\.ssh"
if (-not (Test-Path $sshDir)) {
New-Item -ItemType Directory -Path $sshDir
}
# Generate SSH key pair
ssh-keygen -t rsa -b 4096 -f "$sshDir\aks-nodes" -N '""'
# Display the public key
Get-Content "$sshDir\aks-nodes.pub"
Armazenar a chave SSH no Key Vault
# Read the SSH public key
$sshPublicKey = Get-Content "$env:USERPROFILE\.ssh\aks-nodes.pub" -Raw
# Store in Key Vault as a secret
az keyvault secret set `
--vault-name "kv-ave-shared-<uniqueid>" `
--name "aks-ssh-public-key" `
--value $sshPublicKey
Implantar cluster privado AKS
Agora implemente o cluster AKS com encriptação e monitorização completas.
Utilizar o modelo de catálogo de serviço
- Na sua carga de trabalho AKS, selecione + Adicionar um Serviço Azure.
- Procure e selecione Cluster AKS Privado.
- Configurar a implementação:
Aba Básico
-
Nome do Cluster AKS:
aks-prod-01 -
Versão Kubernetes: Selecionar a versão estável mais recente (por exemplo,
1.32)
Monitorização
- Nome da Área de Trabalho do Log Analytics: Selecione o destino dos registos do seu enclave ou comunidade.
Encryption
- Nome do Conjunto de Encriptação de Disco: Introduza o nome que usou no Tutorial 2-2.
- Nome da Chave de Encriptação: Insira o nome da chave do seu cofre de chaves.
- Key Vault: Selecione o seu key vault com esse nome de chave.
Acesso
- Nome de Identidade do AKS: Introduza o nome que usou no Tutorial 2-2.
- Nome do Grupo de Recursos de Identidade AKS: Atualize o nome do grupo de recursos para corresponder à localização da sua identidade.
Rede
- Nome da Sub-rede AKS: Introduza o nome da sua sub-rede AKS
- Nome da Sub-rede do Pool de Agentes: Introduza o nome da sub-rede do seu pool de agentes
-
CIDR para Tráfego de Serviço:
172.16.0.0/16 -
Endereço IP do serviço DNS Kubernetes:
172.16.0.10
Configuração da Sub-rede:
-
Sub-rede de nós: Selecione
aksSubnetno seu enclave -
Subrede do Servidor API: Selecione
agentSubnetdo seu enclave -
Sub-rede do ponto final privado: Selecione
AzureVirtualEnclaveSubnetno seu enclave
Conjunto de nós
Selecione Next para ignorar este separador neste tutorial.
Etiquetas
-
Ambiente:
Production -
Carga de trabalho:
AKS -
Gerido por:
Azure Enclave
- Selecione Avaliar + Criar.
- Revise todas as definições cuidadosamente.
- Selecione Criar.
Note
O cluster AKS cria automaticamente um grupo de recursos geridos.
Criar endpoints comunitários para conectividade AKS
O AKS requer conectividade de saída a vários serviços Azure. Crie endpoints comunitários para estes requisitos.
Note
Se criaste endpoints comunitários do AKS no Tutorial 2-1, verifica se estes incluem todos os FQDNs necessários.
Configurar o endpoint da comunidade
Vai à tua comunidade (por exemplo,
cmt-fabrikam).Selecione Endpoints da comunidade>+ Criar ou edite os existentes
ce-aks-services.Certifique-se de que estas regras existem:
Regra 1: Registo de Contentores da Microsoft
-
Nome:
mcr -
Destino:
mcr.microsoft.com,*.data.mcr.microsoft.com -
Protocolo:
HTTPS -
Porto:
443
Regra 2: Gestão do AKS
-
Nome:
aks-management -
Destino:
*.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com -
Protocolo:
HTTPS -
Porto:
443
Regra 3: Azure Management
-
Nome:
azure-management -
Destino:
management.azure.com,login.microsoftonline.com -
Protocolo:
HTTPS -
Porto:
443
Regra 4: Repositório de Pacotes
-
Nome:
packages -
Destino:
packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com -
Protocolo:
HTTPS -
Porto:
443
Regra 5: Azure Monitor (se ativado)
-
Nome:
monitoring -
Destino:
*.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com -
Protocolo:
HTTPS -
Porto:
443
-
Nome:
Selecione Rever + criar e depois Criar ou Guardar.
Configurar as regras de saída do NSG
Adicione regras de segurança de saída ao seu NSG para permitir tráfego AKS.
- Navegue para grupos >
nsg-aks-nodes. - Selecione regras de segurança de saída>+ Adicionar.
- Adicionar regra para tráfego de saída HTTPS:
-
Fonte:
VirtualNetwork -
Destino:
Internet -
Porto de destino:
443 -
Protocolo:
TCP -
Ação:
Allow -
Prioridade:
1000 -
Nome:
Allow_HTTPS_Outbound
-
Fonte:
Associar grupos de recursos do AKS à carga de trabalho
O AKS cria um grupo de recursos geridos (MRG) para a infraestrutura do cluster. Associe tanto o grupo de recursos de utilizadores como o MRG à sua carga de trabalho.
Utilização do portal Azure
- Navegue até ao seu serviço Azure Enclave no portal Azure.
- Selecione a sua Comunidade (por exemplo,
cmt-fabrikam). - Selecione Enclaves e abra o seu enclave AKS (por exemplo,
ve-aks). - Selecione Cargas de Trabalho e abra a sua carga de trabalho do AKS (por exemplo,
wl-aks). - Na visão geral da carga de trabalho, selecione Propriedades ou Grupos de Recursos Ligados.
- Selecionar + Adicionar grupo de recursos.
- Adicionar o grupo de recursos de utilizadores:
- Selecionar Subscrição: A sua subscrição
-
Selecionar grupo de recursos:
rg-aks-cluster - Selecione Adicionar
- Selecionar + Adicionar grupo de recursos novamente.
- Adicione o grupo de recursos geridos do AKS:
- O nome RG gerido segue o padrão:
MC_rg-aks-cluster_aks-prod-01_<region> - Selecionar Subscrição: A sua subscrição
- Grupo de Recursos Selecionados: O grupo de recursos geridos pelo AKS
- Selecione Adicionar
- O nome RG gerido segue o padrão:
- Verifique se ambos os grupos de recursos aparecem na lista de grupos de recursos ligados da carga de trabalho.
Dica
Para encontrar o nome do grupo de recursos geridos do AKS, navegue até ao seu cluster AKS no portal e verifique a propriedade do grupo de recursos Node na página de Visão Geral.
Aceder ao cluster AKS
Acede ao cluster privado AKS através de uma VM de administração ou Azure Bastion dentro do enclave.
Liga-te à VM de administração
- Liga-te à tua VM de administração via Azure Bastion ou RDP.
- Certifique-se de que a VM de administração tem a CLI do Azure instalada.
- Iniciar sessão no Azure:
az login
Obter credenciais AKS
# Get cluster credentials
az aks get-credentials `
--resource-group rg-aks-cluster `
--name aks-prod-01 `
--admin
# Verify connection
kubectl get nodes
A saída esperada mostra os nós no estado Ready:
NAME STATUS ROLES AGE VERSION
aks-systempool-12345678-vmss000000 Ready agent 5m v1.29.5
aks-systempool-12345678-vmss000001 Ready agent 5m v1.29.5
aks-systempool-12345678-vmss000002 Ready agent 5m v1.29.5
Implementar carga de trabalho de teste
Implemente uma aplicação de exemplo para validar o cluster.
Criar namespace
kubectl create namespace test-app
Implementar aplicação de exemplo
# Save as test-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: test-app
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: mcr.microsoft.com/oss/nginx/nginx:1.25.3
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: test-app
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
targetPort: 80
# Apply the deployment
kubectl apply -f test-deployment.yaml
# Check deployment status
kubectl get deployments -n test-app
kubectl get pods -n test-app
kubectl get services -n test-app
Validar a implementação
Realize uma validação abrangente do seu cluster AKS.
Verificar a integridade do cluster
# Check node status
kubectl get nodes -o wide
# Check system pods
kubectl get pods -n kube-system
# Check node conditions
kubectl describe nodes | grep -A 5 Conditions
Verificar a encriptação
# Check if encryption at host is enabled
az aks show --resource-group rg-aks-cluster --name aks-prod-01 --query "securityProfile.enableEncryptionAtHost"
# Check disk encryption set
az aks show --resource-group rg-aks-cluster --name aks-prod-01 --query "diskEncryptionSetId"
Valide a conectividade de rede
# Test DNS resolution
kubectl run -it --rm debug --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 --restart=Never -- nslookup kubernetes.default
# Test internet connectivity through community endpoints
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- curl -I https://mcr.microsoft.com
# Check service connectivity
kubectl get services -A
Verifique a monitorização e os registos
# Check if Container Insights is enabled
az aks show --resource-group rg-aks-cluster --name aks-prod-01 --query "addonProfiles.omsagent.enabled"
# Query logs in Log Analytics
az monitor log-analytics query `
--workspace <workspace-id> `
--analytics-query "ContainerLog | where TimeGenerated > ago(1h) | limit 10"
Verificar a conformidade do Azure Policy
# Check Azure Policy add-on status
kubectl get pods -n kube-system | grep azure-policy
# View policy violations (if any)
kubectl get constrainttemplates
kubectl get constraints
Configurar o acesso kubectl para outros utilizadores
Conceda a outros utilizadores acesso ao cluster AKS.
Utilização do Azure RBAC
# Assign Azure Kubernetes Service Cluster User Role
az role assignment create `
--assignee user@contoso.com `
--role "Azure Kubernetes Service Cluster User Role" `
--scope "/subscriptions/<subscription-id>/resourceGroups/rg-aks-cluster/providers/Microsoft.ContainerService/managedClusters/aks-prod-01"
# For admin access
az role assignment create `
--assignee user@contoso.com `
--role "Azure Kubernetes Service Cluster Admin Role" `
--scope "/subscriptions/<subscription-id>/resourceGroups/rg-aks-cluster/providers/Microsoft.ContainerService/managedClusters/aks-prod-01"
Utilização do Kubernetes RBAC
# Create role binding for namespace access
kubectl create rolebinding user-viewer `
--clusterrole=view `
--user=user@contoso.com `
--namespace=test-app
Solução de problemas comuns
Falhas na criação de clusters
Sintoma: Falha na implementação do cluster AKS
Soluções:
- Verificar se as feature flags estão registadas:
EncryptionAtHost,EnableAPIServerVnetIntegrationPreview - Verifique se os tamanhos das sub-redes são adequados ao número de nós e à densidade de pods
- Verificar que o conjunto de encriptação do disco e a identidade gerida têm as permissões adequadas
- Consulte o registo de atividade para mensagens de erro específicas
Nós não estão prontos
Sintoma: Os nós apresentam o estado NotReady
Soluções:
- Verifique se a subrede do nó tem conectividade de saída para os pontos finais necessários
- Verifique se os endpoints da comunidade incluem todos os FQDNs obrigatórios do AKS
- Verifique se as regras NSG permitem tráfego de saída na porta 443
- Reveja os registos do nó:
kubectl describe node <node-name>
Os pods não conseguem obter imagens
Sintoma: Pods bloqueados em ImagePullBackOff
Soluções:
- Verifique se o endpoint da comunidade inclui
mcr.microsoft.come*.data.mcr.microsoft.com - Check NSG permite HTTPS de saída (porta 443)
- Certifique-se de que a resolução DNS funciona:
nslookup mcr.microsoft.comno pod - Reveja os segredos para obter imagens se estiver a usar registos privados
Não consigo ligar-me ao servidor API
Sintoma: kubectl os comandos falham devido a tempo limite de ligação
Soluções:
- Verifica se estás numa VM de administração ou recurso com conectividade ao enclave
- Verifique se a zona DNS privada está ligada à rede virtual
- Verificar configuração da sub-rede do servidor API
- Teste a resolução de DNS:
nslookup <cluster-fqdn>
Monitorização não funciona
Sintoma: Sem logs ou métricas no Azure Monitor
Soluções:
- O addon Verify Container Insights está ativado
- Confirmar que os endpoints da comunidade incluem monitorização de FQDNs
- O espaço de trabalho do Verify Log Analytics está acessível a partir do cluster
- Verifique se os pods
omsagentestão em execução:kubectl get pods -n kube-system | grep omsagent
Limpeza de recursos
Para evitar cobranças contínuas, apague os recursos quando já não forem necessários.
Excluir cluster AKS
# Delete AKS cluster (also deletes managed resource group)
az aks delete --resource-group rg-aks-cluster --name aks-prod-01 --yes --no-wait
# Delete user resource group
az group delete --name rg-aks-cluster --yes --no-wait
# Delete infrastructure resource group
az group delete --name rg-aks-infrastructure --yes --no-wait
Warning
Eliminar o cluster AKS remove permanentemente todas as cargas de trabalho e dados. Certifica-te de que tens backups se necessário.
Passos seguintes
Completaste a série de tutoriais para implementar cargas de trabalho do Azure Virtual Desktop e AKS no Azure Enclave!
Passos seguintes recomendados
- Configurar o dimensionamento automático para AKS
- Implementar aplicações com o Helm
- Implementar GitOps com Flux
- Configurar controlador de entrada
- Ativar identidade da carga de trabalho