Tutorial 2-4: Implantar carga de trabalho AKS (Serviço de Kubernetes do Azure) no enclave Azure

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

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

  1. Na carga de trabalho do AKS, selecione + Adicionar um Serviço de Azure.
  2. Pesquise e selecione o Cluster privado do AKS.
  3. 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 aksSubnet do seu enclave
  • Sub-rede do Servidor de API: selecione agentSubnet em seu enclave
  • Sub-rede de endpoint privado: Selecione AzureVirtualEnclaveSubnet do 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
  1. Selecione Examinar + Criar.
  2. Examine todas as configurações com cuidado.
  3. 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

  1. Vá para sua comunidade (por exemplo, cmt-fabrikam).

  2. Selecione Endpoints> da comunidade+ Criar ou edite um existentece-aks-services.

  3. 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
  4. 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.

  1. Navegue até grupos de segurança de rede>nsg-aks-nodes.
  2. Selecione Regras de segurança de saída>+ Adicionar.
  3. 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

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

  1. Navegue até o serviço Azure Enclave no portal do Azure.
  2. Selecione sua Comunidade (por exemplo, cmt-fabrikam).
  3. Selecione Enclaves e abra o enclave do AKS (por exemplo, ve-aks).
  4. Selecione Cargas de Trabalho e abra sua carga de trabalho do AKS (por exemplo, wl-aks).
  5. Na visão geral da carga de trabalho, selecione Propriedades ou Grupos de Recursos Vinculados.
  6. Selecione + Adicionar grupo de recursos.
  7. Adicione o grupo de recursos do usuário:
    • Selecionar Assinatura: Sua assinatura
    • Selecione Grupo de recursos: rg-aks-cluster
    • Selecione Adicionar.
  8. Selecione + Adicionar grupo de recursos novamente.
  9. 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.
  10. 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

  1. Conecte-se à VM do administrador por meio de Azure Bastion ou RDP.
  2. Verifique se a VM do administrador tem o CLI do Azure instalado.
  3. 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.com e *.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.com a 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 omsagent estã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!