Självstudie 2–4: Distribuera en Azure Kubernetes Service (AKS)-arbetsbelastning i Azure Enclave

Den här självstudien vägleder dig genom distributionen av ett privat Azure Kubernetes Service-kluster (AKS) i Azure Enclave. Du skapar ett helt privat AKS-kluster med kundhanterad kryptering, nätverksintegrering och säkra åtkomstmönster.

I den här tutorialen lär du dig följande:

  • Aktivera nödvändiga Azure funktioner för privata AKS
  • Verifiera nödvändiga resurser för AKS
  • Distribuera privat AKS-kluster
  • Konfigurera kundhanterad nyckelkryptering
  • Skapa communityslutpunkter för AKS-anslutning
  • Associera flera resursgrupper med AKS-arbetsbelastning
  • Få åtkomst till AKS-klustret och verifiera

Förutsättningar

Important

Den här självstudien följer beteendet för mallen Private AKS Cluster och kräver de resurser som skapades vid distributionen av AVE AKS Enclave i Självstudie 2-2.

Innan du börjar

Förstå AKS i Azure Enclave

AKS i Azure Enclave tillhandahåller:

  • Fullständigt privat kluster: API-servern är endast tillgänglig via privat slutpunkt
  • Nätverksisolering: All trafik ligger inom enklavergränserna
  • Kundhanterad kryptering: Både kontrollplan och dataplan krypterade med CMK
  • Säkra arbetsbelastningsgränser: Kubernetes-resurser som ingår i enklavers säkerhetsprinciper

Namngivningskonventioner för resurser

Den här handledningen använder exempelnamn. Använd organisationens namngivningskonvention:

  • Enklav: aks-enclave
  • Arbetsbelastning: aks-workload
  • Resursgrupp: rg-aks-cluster
  • AKS-kluster: aks-prod-01

Aktivera nödvändiga Azure funktioner

AKS i Azure Enclave kräver att specifika Azure funktioner aktiveras i din prenumeration.

Aktivera funktionen EncryptionAtHost

Den här funktionen aktiverar kryptering på värdnivå för virtuella datorer för AKS-noder.

# 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

Aktivera integrering av virtuella API Server-nätverk (förhandsversion)

Med den här funktionen kan AKS API-servern integreras direkt i ditt virtuella nätverk.

# 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

Important

Vänta tills båda funktionerna visas "state": "Registered" innan du fortsätter. Registreringen tar vanligtvis 10–15 minuter.

Förbereda SSH-nyckel (valfritt)

Note

SSH-nyckelautentisering för AKS-nodåtkomst är inaktuell. Det här steget krävs för närvarande men är valfritt i framtida mallversioner. Om du inte behöver direkt nodåtkomst kan du hoppa över det här avsnittet när mallen uppdateras.

Generera SSH-nyckelpar

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

Lagra SSH-nyckel i 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

Distribuera ett privat AKS-kluster

Distribuera nu AKS-klustret med fullständig kryptering och övervakning.

Använda tjänstkatalogmall

  1. I DIN AKS-arbetsbelastning väljer du + Lägg till en Azure-tjänst.
  2. Sök efter och välj Privat AKS-kluster.
  3. Konfigurera distributionen:

Grundläggande-fliken

  • AKS-klusternamn: aks-prod-01
  • Kubernetes-version: Välj den senaste stabila versionen (till exempel 1.32)

Övervakning

  • Namn på Log Analytics-arbetsyta: Välj ditt loggningsmål för enklav eller community-loggning.

Encryption

  • Namn på diskkrypteringsuppsättning: Ange det namn som du använde i Självstudie 2–2.
  • Namn på krypteringsnyckel: Ange nyckelnamnet för nyckelvalvet.
  • Key Vault: Välj din key vault med det nyckelnamnet.

Åtkomst

  • AKS-identitetsnamn: Ange det namn som du använde i Självstudie 2–2.
  • NAMN på AKS-identitetsresursgrupp: Uppdatera resursgruppens namn så att det matchar var din identitet finns.

Networking

  • AKS-undernätsnamn: Ange ditt AKS-undernätsnamn
  • Undernätsnamn för agentpool: Ange namnet på agentpoolens undernät
  • CIDR för tjänsttrafik: 172.16.0.0/16
  • IP-adressen för Kubernetes DNS-tjänsten: 172.16.0.10

Konfiguration av undernät:

  • Nodundernät: Välj aksSubnet från din enklav
  • API Server-undernät: Välj agentSubnet från din enklaver
  • Privat slutpunktsundernät: Välj AzureVirtualEnclaveSubnet från din enklaver

Nodgrupp

Välj Next om du vill hoppa över den här fliken i den här självstudien.

Tags

  • Miljö: Production
  • Arbetsbelastning: AKS
  • Hanterat av: Azure Enclave
  1. Välj Översikt + skapa.
  2. Granska alla inställningar noggrant.
  3. Välj Skapa.

Note

AKS-klustret skapar automatiskt en hanterad resursgrupp.

Skapa communityslutpunkter för AKS-anslutning

AKS kräver utgående anslutning till flera Azure tjänster. Skapa communityendpoints utifrån dessa krav.

Note

Om du skapade community-slutpunkter för AKS i Självstudie 2-1, kontrollera att de innehåller alla nödvändiga FQDN:er.

Konfigurera community-slutpunkt

  1. Gå till din community (till exempel, cmt-fabrikam).

  2. Välj Community-slutpunkter>+ Skapa eller redigera befintliga slutpunkterce-aks-services

  3. Se till att dessa regler finns:

    Regel 1: Microsoft Container Registry

    • Namn: mcr
    • Mål: mcr.microsoft.com,*.data.mcr.microsoft.com
    • Protokoll: HTTPS
    • Port:443

    Regel 2: AKS-hantering

    • Namn: aks-management
    • Mål: *.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com
    • Protokoll: HTTPS
    • Port:443

    Regel 3: hantering av Azure

    • Namn: azure-management
    • Mål: management.azure.com,login.microsoftonline.com
    • Protokoll: HTTPS
    • Port:443

    Regel 4: Paketlagringsplats

    • Namn: packages
    • Mål: packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com
    • Protokoll: HTTPS
    • Port:443

    Regel 5: Azure Monitor (om aktiverad)

    • Namn: monitoring
    • Mål: *.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com
    • Protokoll: HTTPS
    • Port:443
  4. Välj Granska + skapa och sedan Skapa eller Spara.

Konfigurera utgående regler för NSG

Lägg till utgående säkerhetsregler i din NSG för att tillåta AKS-trafik.

  1. Gå till Nätverkssäkerhetsgrupper>nsg-aks-nodes.
  2. Välj Utgående säkerhetsregler>+ Lägg till.
  3. Lägg till regel för UTgående HTTPS:
    • Källa: VirtualNetwork
    • Mål: Internet
    • Målport: 443
    • Protokoll: TCP
    • Åtgärd: Allow
    • Prioritet: 1000
    • Namn: Allow_HTTPS_Outbound

Associera AKS-resursgrupper med arbetsbelastning

AKS skapar en hanterad resursgrupp (MRG) för klusterinfrastruktur. Associera både användarresursgruppen och MRG med din arbetsbelastning.

Använda Azure-portalen

  1. Gå till din Azure Enclave-tjänst i Azure-portalen.
  2. Välj din community (till exempel cmt-fabrikam).
  3. Välj Enklaver och öppna aks-enklaven (till exempel ve-aks).
  4. Välj Arbetsbelastningar och öppna din AKS-arbetsbelastning (till exempel wl-aks).
  5. I arbetsbelastningsöversikten väljer du Egenskaper eller Länkade resursgrupper.
  6. Välj + Lägg till resursgrupp.
  7. Lägg till användarresursgruppen:
    • Välj prenumeration: Din prenumeration
    • Välj Resursgrupp: rg-aks-cluster
    • Välj Lägg till
  8. Välj + Lägg till resursgrupp igen.
  9. Lägg till den AKS-hanterade resursgruppen:
    • Det hanterade RG-namnet följer mönstret: MC_rg-aks-cluster_aks-prod-01_<region>
    • Välj prenumeration: Din prenumeration
    • Välj Resursgrupp: DEN AKS-hanterade resursgruppen
    • Välj Lägg till
  10. Kontrollera att båda resursgrupperna visas i listan över länkade resursgrupper i arbetsbelastningen.

Tip

Om du vill hitta namnet på den AKS-hanterade resursgruppen går du till AKS-klustret i portalen och kontrollerar egenskapen Node-resursgrupp på sidan Översikt.

Få åtkomst till AKS-kluster

Få åtkomst till det privata AKS-klustret via en virtuell administratörsdator eller Azure Bastion i enklaven.

Ansluta till den virtuella administratörsdatorn

  1. Anslut till den virtuella administratörsdatorn via Azure Bastion eller RDP.
  2. Kontrollera att den virtuella administratörsdatorn har Azure CLI installerat.
  3. Logga in på Azure:
az login

Hämta AKS-autentiseringsuppgifter

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

# Verify connection
kubectl get nodes

Förväntade utdata visar noder i Ready status:

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

Distribuera testarbetsbelastning

Distribuera ett exempelprogram för att verifiera klustret.

Skapa namnområde

kubectl create namespace test-app

Distribuera exempelprogram

# 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

Verifiera utplaceringen

Utför omfattande validering av ditt AKS-kluster.

Kontrollera klusterhälsa

# 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

Verifiera krypteringen

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

Kontrollera nätverksanslutningen

# 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

Kontrollera övervakning och loggar

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

Verifiera efterlevnaden för 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

Konfigurera kubectl-åtkomst för andra användare

Ge andra användare åtkomst till AKS-klustret.

Använda 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"

Använda RBAC i Kubernetes

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

Felsökning av vanliga problem

Det går inte att skapa kluster

Symptom: AKS-klusterdistributionen misslyckas

Lösningar:

  • Kontrollera att funktionsflaggor är registrerade: EncryptionAtHost, EnableAPIServerVnetIntegrationPreview
  • Kontrollera att undernätsstorlekarna är tillräckliga för antal noder och podddensitet
  • Kontrollera att diskkrypteringsuppsättningen och den hanterade identiteten har rätt behörigheter
  • Granska aktivitetsloggen för specifika felmeddelanden

Noder är inte klara

Symptom: Noder visar NotReady status

Lösningar:

  • Kontrollera att nodundernätet har utgående anslutning till nödvändiga slutpunkter
  • Kontrollera att communityns slutpunkter innehåller alla nödvändiga AKS-FQDN:er
  • Kontrollera att NSG-regler tillåter utgående trafik på port 443
  • Granska nodloggar: kubectl describe node <node-name>

Poddar kan inte hämta bilder

Symptom: Poddar fastnade i ImagePullBackOff

Lösningar:

  • Kontrollera att communityslutpunkten innehåller mcr.microsoft.com och *.data.mcr.microsoft.com
  • Kontrollera att NSG tillåter utgående HTTPS (port 443)
  • Se till att DNS-upplösningen fungerar: nslookup mcr.microsoft.com från pod
  • Granska hemligheter för avbildningshämtning om du använder privata register

Det går inte att ansluta till API-servern

Symptom: kubectl kommandon misslyckas på grund av att tidsgränsen för anslutningen överskrids

Lösningar:

  • Kontrollera att du är på administratörs-VM:en eller en resurs med anslutning till enklaven
  • Kontrollera att den privata DNS-zonen är länkad till det virtuella nätverket
  • Verifiera konfiguration av API-serverundernät
  • Testa DNS-upplösning: nslookup <cluster-fqdn>

Övervakningen fungerar inte

Symptom: Inga loggar eller mått i Azure Monitor

Lösningar:

  • Kontrollera att Container Insights-tillägget är aktiverat
  • Kontrollera att communityns slutpunkter omfattar övervakning av FQDN
  • Kontrollera att Log Analytics-arbetsytan är tillgänglig från klustret
  • Kontrollera att omsagent poddar körs: kubectl get pods -n kube-system | grep omsagent

Rensa resurser

Undvik löpande avgifter genom att ta bort resurser när de inte längre behövs.

Ta bort AKS-kluster

# 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

Varning

Om du tar bort AKS-klustret permanent tas alla arbetsbelastningar och data bort. Se till att du har säkerhetskopior om det behövs.

Nästa steg

Du har slutfört självstudieserien om hur du distribuerar Azure Virtual Desktop och AKS-arbetsbelastningar i Azure Enclave!