Tutorial 2-4: Distribuire un carico di lavoro di Servizio Azure Kubernetes (AKS) in Azure Enclave

Questa esercitazione illustra come distribuire un cluster di Servizio Azure Kubernetes (AKS) privato in Azure Enclave. Si crea un cluster del servizio Azure Kubernetes completamente privato con crittografia gestita dal cliente, integrazione di rete e modelli di accesso sicuro.

In questa esercitazione apprenderai a:

  • Abilitare le funzionalità di Azure necessarie per AKS privato
  • Convalida delle risorse necessarie per AKS
  • Distribuisci un cluster AKS privato
  • Configurare la crittografia della chiave gestita dal cliente
  • Creare endpoint della community per la connettività di AKS
  • Associare più gruppi di risorse al carico di lavoro AKS
  • Accedere al cluster AKS e convalidare

Prerequisiti

  • Completamento del Tutorial 2-3: Distribuire il carico di lavoro di Desktop virtuale Azure
  • Enclave di AKS creata con subnet del nodo, del server API e dell'endpoint privato
  • Dipendenze comuni (Key Vault, identità gestita, set di crittografia del disco) da Tutorial 2-2: Creare un ambiente Azure Enclave
  • Zone DNS private per AKS distribuite
  • Ruolo collaboratore nel gruppo di risorse del carico di lavoro del servizio Azure Kubernetes
  • ruolo Collaboratore di servizio Azure Kubernetes nella sottoscrizione
  • interfaccia della riga di comando di Azure o Azure PowerShell installati per operazioni avanzate

Importante

Questa esercitazione si allinea al comportamento del modello Private AKS Cluster e richiede le risorse create dalla distribuzione AVE AKS Enclave in Tutorial 2-2.

Prima di iniziare

Informazioni su AKS in Azure Enclave

AKS in Azure Enclave offre:

  • Cluster completamente privato: server API accessibile solo tramite endpoint privato
  • Isolamento della rete: tutto il traffico rimane entro i limiti dell'enclave
  • Crittografia gestita dal cliente: sia il piano di controllo sia il piano dati sono crittografati con una chiave gestita dal cliente (CMK)
  • Limiti del carico di lavoro sicuri: risorse Kubernetes contenute nei criteri di sicurezza dell'enclave

Convenzioni di denominazione delle risorse

Questa esercitazione usa nomi di esempio. Usa la convenzione di denominazione della tua organizzazione:

  • Enclave: aks-enclave
  • Carico di lavoro: aks-workload
  • Gruppo di risorse: rg-aks-cluster
  • Cluster AKS: aks-prod-01

Abilitare le funzionalità di Azure necessarie

AKS in Azure Enclave richiede che specifiche funzionalità di Azure siano abilitate per la sottoscrizione.

Abilitare la funzionalità EncryptionAtHost

Questa funzionalità abilita la crittografia a livello di host della macchina virtuale per i nodi del servizio Azure Kubernetes.

# 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

Abilitare l'integrazione della rete virtuale del server API (anteprima)

Questa funzionalità consente di integrare il server API del servizio Azure Kubernetes direttamente nella rete virtuale.

# 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

Attendere che entrambe le funzionalità visualizzino "state": "Registered" prima di procedere. La registrazione richiede in genere 10-15 minuti.

Preparare la chiave SSH (facoltativo)

Note

L'autenticazione tramite chiave SSH per l'accesso ai nodi di AKS è in fase di deprecazione. Questo passaggio è attualmente obbligatorio, ma sarà facoltativo nelle versioni future del modello. Se non è necessario l'accesso diretto ai nodi, è possibile ignorare questa sezione quando il modello viene aggiornato.

Generare una coppia di chiavi 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"

Archiviare la chiave SSH in 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

Distribuire un cluster AKS privato

Distribuisci ora il cluster AKS con crittografia completa e monitoraggio.

Usare il modello di catalogo dei servizi

  1. Nel carico di lavoro AKS, seleziona + Aggiungi un servizio Azure.
  2. Cercare e selezionare Cluster AKS privato.
  3. Configurare la distribuzione:

Scheda Informazioni di base

  • Nome del cluster AKS: aks-prod-01
  • Versione di Kubernetes: selezionare la versione stabile più recente (ad esempio, 1.32)

Monitoraggio

  • Nome dell'area di lavoro Log Analytics: Seleziona la destinazione dei log dell'enclave o della comunità.

Encryption

  • Nome del set di crittografia dei dischi: Immettere il nome utilizzato nel Tutorial 2-2.
  • Nome della chiave di crittografia: immettere il nome della chiave dell'insieme di credenziali delle chiavi.
  • Key Vault: seleziona il tuo key vault con quel nome di chiave.

Accesso

  • Nome identità AKS: Immetti il nome che hai utilizzato in Esercitazione 2-2.
  • Nome del gruppo di risorse dell'identità AKS: aggiornare il nome del gruppo di risorse in modo che corrisponda al gruppo di risorse in cui si trova l'identità.

Networking

  • Nome subnet AKS: immetti il nome della subnet AKS
  • Nome subnet del pool di agenti: Immettere il nome della subnet del pool di agenti
  • CIDR per il traffico di servizio: 172.16.0.0/16
  • Indirizzo IP del servizio DNS Kubernetes: 172.16.0.10

Configurazione subnet:

  • Sottorete del nodo: seleziona aksSubnet dalla tua enclave
  • Sottorete del server API: Selezionare agentSubnet dalla tua enclave
  • Subnet dell'endpoint privato: selezionare AzureVirtualEnclaveSubnet dall'enclave

Pool di nodi

Seleziona Next per saltare questa scheda in questo tutorial.

Tag

  • Ambiente: Production
  • Carico di lavoro: AKS
  • Gestito da: Azure Enclave
  1. Selezionare Verifica e crea.
  2. Esaminare attentamente tutte le impostazioni.
  3. Fare clic su Crea.

Note

Il cluster AKS crea automaticamente un gruppo di risorse gestito.

Creare endpoint della community per la connettività di AKS

AKS richiede connettività in uscita verso diversi servizi Azure. Creare endpoint della community per questi requisiti.

Note

Se hai creato endpoint della community di AKS nel tutorial 2-1, verifica che includano tutti gli FQDN necessari.

Configurare l'endpoint della community

  1. Vai nella tua comunità (ad esempio, cmt-fabrikam).

  2. Seleziona endpoint della community>+ Crea o modifica quelli esistentice-aks-services.

  3. Verificare che queste regole esistano:

    Regola 1: Microsoft Container Registry

    • Nome: mcr
    • Destinazione: mcr.microsoft.com,*.data.mcr.microsoft.com
    • Protocollo: HTTPS
    • Porta: 443

    Regola 2: Gestione di AKS

    • Nome: aks-management
    • Destinazione: *.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com
    • Protocollo: HTTPS
    • Porta: 443

    Regola 3: gestione Azure

    • Nome: azure-management
    • Destinazione: management.azure.com,login.microsoftonline.com
    • Protocollo: HTTPS
    • Porta: 443

    Regola 4: Repository di pacchetti

    • Nome: packages
    • Destinazione: packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com
    • Protocollo: HTTPS
    • Porta: 443

    Regola 5: Monitoraggio di Azure (se abilitata)

    • Nome: monitoring
    • Destinazione: *.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com
    • Protocollo: HTTPS
    • Porta: 443
  4. Selezionare Rivedi e crea e quindi Crea o Salva.

Configurare le regole in uscita di NSG

Aggiungi regole di sicurezza in uscita al tuo NSG per consentire il traffico AKS.

  1. Passare a Gruppi di>nsg-aks-nodes sicurezza di rete.
  2. Selezionare Regole >+ Aggiungi.
  3. Aggiungere una regola per HTTPS in uscita:
    • Fonte: VirtualNetwork
    • Destinazione: Internet
    • Porta di destinazione: 443
    • Protocollo: TCP
    • Azione: Allow
    • Priorità: 1000
    • Nome: Allow_HTTPS_Outbound

Associare i gruppi di risorse AKS al workload

AKS crea un gruppo di risorse gestito (MRG) per l'infrastruttura del cluster. Associa sia il gruppo di risorse dell'utente sia MRG al tuo carico di lavoro.

Uso del portale di Azure

  1. Passa al servizio Azure Enclave nel portale di Azure.
  2. Seleziona la Community (ad esempio, cmt-fabrikam).
  3. Selezionare Enclaves e aprire l'enclave AKS (ad esempio, ve-aks).
  4. Seleziona Carichi di lavoro e apri il tuo carico di lavoro AKS (ad esempio, wl-aks).
  5. Nella panoramica del carico di lavoro selezionare Proprietà o Gruppi di risorse collegati.
  6. Selezionare + Aggiungi gruppo di risorse.
  7. Aggiungere il gruppo di risorse utente:
    • Selezionare Sottoscrizione: sottoscrizione
    • Selezionare Gruppo di risorse: rg-aks-cluster
    • Seleziona Aggiungi
  8. Selezionare di nuovo + Aggiungi gruppo di risorse .
  9. Aggiungi il gruppo di risorse gestito di AKS:
    • Il nome RG gestito segue il modello: MC_rg-aks-cluster_aks-prod-01_<region>
    • Selezionare Sottoscrizione: sottoscrizione
    • Selezionare Gruppo di risorse: Il gruppo di risorse gestito di AKS
    • Seleziona Aggiungi
  10. Verificare che entrambi i gruppi di risorse siano visualizzati nell'elenco dei gruppi di risorse collegati del carico di lavoro.

Tip

Per trovare il nome del gruppo di risorse gestite del servizio Azure Kubernetes, passare al cluster del servizio Azure Kubernetes nel portale e controllare la proprietà Gruppo di risorse Node nella pagina Panoramica.

Accedi al cluster AKS

Accedi al cluster AKS privato tramite una VM amministrativa o Azure Bastion all'interno dell'enclave.

Connettersi alla macchina virtuale di amministrazione

  1. Connettersi alla macchina virtuale amministratore tramite Azure Bastion o RDP.
  2. Assicurarsi che la VM di amministrazione abbia installato interfaccia della riga di comando di Azure.
  3. Accedere a Azure:
az login

Ottenere le credenziali di AKS

# Get cluster credentials
az aks get-credentials `
    --resource-group rg-aks-cluster `
    --name aks-prod-01 `
    --admin

# Verify connection
kubectl get nodes

L'output previsto mostra i nodi nello Ready stato:

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

Distribuire il carico di lavoro di test

Distribuire un'applicazione di esempio per convalidare il cluster.

Crea spazio dei nomi

kubectl create namespace test-app

Distribuire l'applicazione di esempio

# 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

Convalidare la distribuzione

Esegui la convalida completa del cluster AKS.

Controllare l'integrità del 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

Verificare la crittografia

# 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"

Convalidare la connettività di rete

# 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

Controllare il monitoraggio e i log

# 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"

Verificare la conformità di Criteri di Azure

# 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

Configurare l'accesso kubectl per altri utenti

Concedi ad altri utenti l'accesso al cluster AKS.

Uso della rete RBAC di Azure

# 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"

Uso di RBAC in Kubernetes

# Create role binding for namespace access
kubectl create rolebinding user-viewer `
    --clusterrole=view `
    --user=user@contoso.com `
    --namespace=test-app

Risoluzione dei problemi comuni

La creazione del cluster non riesce

Sintomo: la distribuzione del cluster AKS non riesce

Soluzioni:

  • Verificare che i flag di funzionalità siano registrati: EncryptionAtHost, EnableAPIServerVnetIntegrationPreview
  • Verificare che le dimensioni delle subnet siano adeguate per il numero di nodi e la densità dei pod
  • Verificare che il set di crittografia del disco e l'identità gestita dispongano delle autorizzazioni appropriate
  • Esaminare il registro attività per specifici messaggi di errore

Nodi non pronti

Sintomo: i nodi mostrano NotReady lo stato

Soluzioni:

  • Verificare che la subnet del nodo abbia connettività in uscita verso gli endpoint richiesti
  • Verifica che gli endpoint della community includano tutti gli FQDN AKS necessari
  • Verificare che le regole NSG consentano il traffico in uscita sulla porta 443
  • Esaminare i log dei nodi: kubectl describe node <node-name>

I pod non riescono a scaricare le immagini

Sintomo: i pod sono bloccati in ImagePullBackOff

Soluzioni:

  • Verificare che l'endpoint della community includa mcr.microsoft.com e *.data.mcr.microsoft.com
  • Verificare che NSG consenta HTTPS in uscita (porta 443)
  • Verificare che la risoluzione DNS funzioni: nslookup mcr.microsoft.com dal pod
  • Controllare i segreti per il download delle immagini se si usano registry privati

Non è possibile connettersi al server API

Sintomo: kubectl i comandi hanno esito negativo con timeout della connessione

Soluzioni:

  • Verificare di essere nella macchina virtuale o nella risorsa di amministrazione con connettività dell'enclave
  • Verificare che la zona DNS privata sia collegata alla rete virtuale
  • Verificare la configurazione della subnet del server API
  • Testare la risoluzione DNS:nslookup <cluster-fqdn>

Monitoraggio non funzionante

Sintomo: nessun log o metrica in Monitoraggio di Azure

Soluzioni:

  • Verificare che il componente aggiuntivo Container Insights sia abilitato
  • Verificare che gli endpoint della community includano gli FQDN di monitoraggio
  • Verificare che l'area di lavoro di Log Analytics sia accessibile dal cluster
  • Verificare che omsagent i pod siano in esecuzione: kubectl get pods -n kube-system | grep omsagent

Pulire le risorse

Per evitare addebiti in corso, eliminare le risorse quando non sono più necessarie.

Eliminare il 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

Avvertimento

L'eliminazione del cluster del servizio Azure Kubernetes rimuove definitivamente tutti i carichi di lavoro e i dati. Assicurarsi di disporre di backup, se necessario.

Passaggi successivi

Hai completato la serie di tutorial per distribuire i carichi di lavoro di Desktop virtuale Azure e AKS in Azure Enclave!