Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tutorial orienta você pela implantação de um cluster de AKS (Serviço de Kubernetes do Azure) privado no enclave Azure. Você cria um cluster do AKS totalmente privado com criptografia gerenciada pelo cliente, integração de rede e padrões de acesso seguro.
Neste tutorial, você aprenderá como:
- Habilitar os recursos de Azure necessários para o AKS privado
- Validar os recursos necessários para o AKS
- Implantar cluster privado do AKS
- Configurar a criptografia de chave gerenciada pelo cliente
- Criar endpoints da comunidade para conectividade do AKS
- Associar vários grupos de recursos à carga de trabalho do AKS
- Acessar o cluster do AKS e validar
Pré-requisitos
- Conclusão do Tutorial 2-3: Implantar a carga de trabalho do Área de Trabalho Virtual do Azure
- Enclave do AKS com nó, servidor de API e sub-redes de ponto de extremidade privado
- Dependências comuns (Key Vault, identidade gerenciada, conjunto de criptografia de disco) do Tutorial 2-2: Criar ambiente do Enclave Azure
- Zonas DNS privadas do AKS implantadas
- Função de colaborador no grupo de recursos de carga de trabalho do AKS
- a função Colaborador do Serviço de Kubernetes do Azure na assinatura
- CLI do Azure ou Azure PowerShell instalado para operações avançadas
Importante
Este tutorial se alinha ao comportamento do modelo de cluster do AKS privado e requer os recursos criados pela implantação do Enclave do AKS ave no Tutorial 2-2.
Antes de começar
Noções básicas sobre o AKS no enclave Azure
O AKS no enclave Azure fornece:
- Cluster totalmente privado: servidor de API acessível somente por meio do ponto de extremidade privado
- Isolamento de rede: todo o tráfego permanece dentro dos limites do enclave
- Criptografia gerenciada pelo cliente: plano de controle e plano de dados criptografado com CMK
- Limites de carga de trabalho seguros: recursos do Kubernetes contidos em políticas de segurança de enclave
Convenções de nomenclatura do recurso
Este tutorial usa nomes de exemplo. Use a convenção de nomenclatura da sua organização:
- Enclave:
aks-enclave - Carga de trabalho:
aks-workload - Grupo de recursos:
rg-aks-cluster - Cluster do AKS:
aks-prod-01
Habilitar os recursos de Azure necessários
O AKS no enclave Azure requer recursos Azure específicos para serem habilitados em sua assinatura.
Habilitar o recurso EncryptionAtHost
Este recurso permite a criptografia no nível do host da VM para 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
Habilitar a integração de rede virtual do Servidor de API (versão prévia)
Esse recurso permite que o servidor de API do AKS seja integrado diretamente à 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
Aguarde até que ambas as funcionalidades exibam "state": "Registered" antes de prosseguir. Normalmente, o registro leva de 10 a 15 minutos.
Preparar chave SSH (opcional)
Note
A autenticação por chave SSH para acesso aos nós do AKS está sendo descontinuada. No momento, essa etapa é necessária, mas será opcional em versões futuras do modelo. Se você não precisar de acesso direto ao nó, ignore esta seçã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 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 do AKS
Agora, implante o cluster do AKS com criptografia e monitoramento completos.
Usar o modelo de catálogo de serviços
- Na carga de trabalho do AKS, selecione + Adicionar um Serviço de Azure.
- Pesquise e selecione o Cluster privado do AKS.
- Configurar a implantação:
Aba Básico
-
Nome do cluster do AKS:
aks-prod-01 -
Versão do Kubernetes: selecione a versão estável mais recente (por exemplo,
1.32)
Monitoramento
- Nome do workspace do Log Analytics: selecione seu enclave ou destino de logs da comunidade.
Encryption
- Nome do conjunto de criptografia de disco: insira o nome usado no Tutorial 2-2.
- Nome da chave de criptografia: insira o nome da chave do cofre de chaves.
- Key Vault: Selecione o cofre de chaves com esse nome de chave.
Acesso
- Nome da identidade do AKS: insira o nome usado no Tutorial 2-2.
- Nome do grupo de recursos de identidade do AKS: atualize o nome do grupo de recursos para corresponder onde sua identidade está localizada.
Rede
- Nome da sub-rede do AKS: insira o nome da sub-rede do AKS
- Nome da sub-rede do pool de agentes: Digite o nome da sub-rede do pool de agentes
-
CIDR para Tráfego de Serviço:
172.16.0.0/16 -
Endereço IP do serviço DNS do Kubernetes:
172.16.0.10
Configuração da sub-rede:
-
Sub-rede de nó: selecione
aksSubnetdo seu enclave -
Sub-rede do Servidor de API: selecione
agentSubnetem seu enclave -
Sub-rede de endpoint privado: Selecione
AzureVirtualEnclaveSubnetdo seu enclave
Pool de nós
Selecione Next para pular esta aba neste tutorial.
Tags
-
Ambiente:
Production -
Carga de trabalho:
AKS -
Gerenciado por:
Azure Enclave
- Selecione Examinar + Criar.
- Examine todas as configurações com cuidado.
- Selecione Criar.
Note
O cluster do AKS cria um grupo de recursos gerenciados automaticamente.
Criar endpoints da comunidade para conectividade do AKS
O AKS requer conectividade de saída para vários serviços de Azure. Crie endpoints comunitários para esses requisitos.
Note
Se você criou endpoints da comunidade do AKS no Tutorial 2-1, verifique se eles incluem todos os FQDNs necessários.
Configurar o ponto de extremidade da comunidade
Vá para sua comunidade (por exemplo,
cmt-fabrikam).Selecione Endpoints> da comunidade+ Criar ou edite um existente
ce-aks-services.Verifique se essas regras existem:
Regra 1: Microsoft Container Registry
-
Nome:
mcr -
Destino:
mcr.microsoft.com,*.data.mcr.microsoft.com -
Protocolo:
HTTPS -
Porta:
443
Regra 2: Gerenciamento do AKS
-
Nome:
aks-management -
Destino:
*.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com -
Protocolo:
HTTPS -
Porta:
443
Regra 3: Gerenciamento de Azure
-
Nome:
azure-management -
Destino:
management.azure.com,login.microsoftonline.com -
Protocolo:
HTTPS -
Porta:
443
Regra 4: Repositório de Pacotes
-
Nome:
packages -
Destino:
packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com -
Protocolo:
HTTPS -
Porta:
443
Regra 5: Azure Monitor (se habilitado)
-
Nome:
monitoring -
Destino:
*.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com -
Protocolo:
HTTPS -
Porta:
443
-
Nome:
Selecione Revisar + criar e depois Criar ou Salvar.
Configurar regras de saída do NSG
Adicione regras de segurança de saída ao NSG para permitir o tráfego do AKS.
- Navegue até grupos de segurança de rede>
nsg-aks-nodes. - Selecione Regras de segurança de saída>+ Adicionar.
- Adicionar regra para saída HTTPS:
-
Origem:
VirtualNetwork -
Destino:
Internet -
Porta de destino:
443 -
Protocolo:
TCP -
Ação:
Allow -
Prioridade:
1000 -
Nome:
Allow_HTTPS_Outbound
-
Origem:
Associar grupos de recursos do AKS à carga de trabalho
O AKS cria um MRG (grupo de recursos gerenciado) para infraestrutura de cluster. Associe o grupo de recursos do usuário e o MRG à sua carga de trabalho.
Usando o portal do Azure
- Navegue até o serviço Azure Enclave no portal do Azure.
- Selecione sua Comunidade (por exemplo,
cmt-fabrikam). - Selecione Enclaves e abra o enclave do AKS (por exemplo,
ve-aks). - Selecione Cargas de Trabalho e abra sua carga de trabalho do AKS (por exemplo,
wl-aks). - Na visão geral da carga de trabalho, selecione Propriedades ou Grupos de Recursos Vinculados.
- Selecione + Adicionar grupo de recursos.
- Adicione o grupo de recursos do usuário:
- Selecionar Assinatura: Sua assinatura
- Selecione Grupo de recursos:
rg-aks-cluster - Selecione Adicionar.
- Selecione + Adicionar grupo de recursos novamente.
- Adicione o grupo de recursos gerenciados do AKS:
- O nome RG gerenciado segue o padrão:
MC_rg-aks-cluster_aks-prod-01_<region> - Selecionar Assinatura: Sua assinatura
- Selecionar grupo de recursos: o grupo de recursos gerenciados do AKS
- Selecione Adicionar.
- O nome RG gerenciado segue o padrão:
- Verifique se ambos os grupos de recursos aparecem na lista de grupos de recursos vinculados da carga de trabalho.
Tip
Para encontrar o nome do grupo de recursos gerenciado do AKS, navegue até o cluster do AKS no portal e verifique a propriedade Node resource group na página de Visão geral.
Acessar o cluster do AKS
Acesse o cluster privado do AKS por meio de uma VM de administrador ou Azure Bastion dentro do enclave.
Conectar-se à VM do administrador
- Conecte-se à VM do administrador por meio de Azure Bastion ou RDP.
- Verifique se a VM do administrador tem o CLI do Azure instalado.
- Entre no Azure:
az login
Obter credenciais do 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 nós com status 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
Implantar carga de trabalho de teste
Implante um aplicativo de exemplo para validar o cluster.
Criar um namespace
kubectl create namespace test-app
Implantar um aplicativo 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 implantação
Execute uma validação abrangente do cluster do AKS.
Verificar 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 criptografia
# 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"
Validar 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 o monitoramento e os logs
# 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 com o 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 usuários
Conceda a outros usuários acesso ao cluster do AKS.
Usando 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"
Usando o RBAC do Kubernetes
# 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
Falha na criação do cluster
Sintoma: falha na implantação do cluster do AKS
Soluções:
- Verifique se os sinalizadores de recursos estão registrados:
EncryptionAtHost,EnableAPIServerVnetIntegrationPreview - Verificar se os tamanhos das sub-redes são adequados para o número de nós e a densidade de pods
- Verificar se o conjunto de criptografia de disco e a identidade gerenciada têm permissões adequadas
- Examinar o log de atividades em busca de mensagens de erro específicas
O nó não está pronto
Sintoma: Os nós exibem status NotReady
Soluções:
- Verifique se a sub-rede do nó tem conectividade de saída com os endpoints necessários
- Verificar se os pontos de extremidade da comunidade incluem todos os FQDNs do AKS necessários
- Verificar se as regras do NSG permitem o tráfego de saída na porta 443
- Examine os logs de nós:
kubectl describe node <node-name>
Pods não conseguem baixar imagens
Sintoma: pods presos em ImagePullBackOff
Soluções:
- Verificar se o endpoint da comunidade inclui
mcr.microsoft.come*.data.mcr.microsoft.com - Verificar se o NSG permite HTTPS de saída (porta 443)
- Verifique se a resolução de DNS funciona:
nslookup mcr.microsoft.coma partir do pod - Revise os segredos de pull de imagens se estiver usando registries privados
Não é possível se conectar ao servidor de API
Sintoma: kubectl os comandos falham por tempo limite de conexão
Soluções:
- Verifique se você está em uma VM administrativa ou em um recurso com conectividade ao enclave
- Verificar se a zona DNS privada está vinculada à rede virtual
- Verificar a configuração da sub-rede do servidor de API
- Testar a resolução do DNS:
nslookup <cluster-fqdn>
Monitoramento não funcionando
Sintoma: não há logs ou métricas no Azure Monitor
Soluções:
- Verificar se o complemento do Container Insights está habilitado
- Verifique se os endpoints comunitários incluem FQDNs de monitoramento
- Verifique se Log Analytics workspace está acessível no cluster
- Verifique se os pods
omsagentestão em execução:kubectl get pods -n kube-system | grep omsagent
Limpar os recursos
Para evitar encargos contínuos, exclua recursos quando não for mais necessário.
Excluir cluster do 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
Excluir o cluster do AKS remove permanentemente todas as cargas de trabalho e dados. Verifique se você tem backups, se necessário.
Próximas Etapas
Você concluiu a série de tutoriais para implantar cargas de trabalho de Área de Trabalho Virtual do Azure e AKS no enclave Azure!
Próximas etapas recomendadas
- Configurar o dimensionamento automático para o AKS
- Implantar aplicativos com o Helm
- Implementar o GitOps com o Flux
- Configurar o controlador de entrada
- Habilitar a identidade da carga de trabalho