Tutorial 2-4: Bereitstellen einer Azure Kubernetes Service (AKS)-Workload in Azure Enclave

Dieses Lernprogramm führt Sie durch die Bereitstellung eines privaten Azure Kubernetes Service (AKS) Clusters in Azure Enklave. Sie erstellen einen vollständig privaten AKS-Cluster mit vom Kunden verwalteter Verschlüsselung, Netzwerkintegration und sicheren Zugriffsmustern.

In diesem Tutorial erfahren Sie, wie:

  • Aktivieren erforderlicher Azure Features für private AKS
  • Überprüfen der erforderlichen Ressourcen für AKS
  • Bereitstellen eines privaten AKS-Clusters
  • Konfigurieren der vom Kunden verwalteten Schlüsselverschlüsselung
  • Erstellen Sie Community-Endpunkte für die AKS-Konnektivität
  • Zuordnen mehrerer Ressourcengruppen zu AKS-Arbeitsauslastung
  • Zugreifen auf den AKS-Cluster und Überprüfen

Voraussetzungen

Important

Dieses Lernprogramm entspricht dem Verhalten der Vorlage Private AKS Cluster und erfordert die Ressourcen, die durch die Bereitstellung von AVE AKS Enclave in Tutorial 2-2 erstellt wurden.

Bevor Sie anfangen

Grundlegendes zu AKS in Azure Enklave

AKS in Azure Enklave bietet:

  • Vollständig privater Cluster: API-Server, auf den nur über den privaten Endpunkt zugegriffen werden kann
  • Netzwerkisolation: Der gesamte Datenverkehr bleibt innerhalb von Enklavengrenzen
  • Vom Kunden verwaltete Verschlüsselung: Steuerungsebene und Datenebene mit CMK verschlüsselt
  • Grenzen für sichere Workload: Kubernetes-Ressourcen, die in enklaven Sicherheitsrichtlinien enthalten sind

Konventionen für Ressourcennamen

In diesem Lernprogramm werden Beispielnamen verwendet. Verwenden Sie die Benennungskonvention Ihrer Organisation:

  • Enklave: aks-enclave
  • Arbeitslast: aks-workload
  • Ressourcengruppe: rg-aks-cluster
  • AKS-Cluster: aks-prod-01

Aktivieren erforderlicher Azure Features

AKS in Azure Enclave erfordert, dass bestimmte Azure Features für Ihr Abonnement aktiviert werden.

EncryptionAtHost-Feature aktivieren

Dieses Feature ermöglicht die Verschlüsselung auf vm-Hostebene für AKS-Knoten.

# 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

API-Server-Integration in ein virtuelles Netzwerk aktivieren (Vorschau)

Mit diesem Feature kann der AKS-API-Server direkt in Ihr virtuelles Netzwerk integriert werden.

# 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

Warten Sie, bis beide Funktionen "state": "Registered" angezeigt werden, bevor Sie fortfahren. Die Registrierung dauert in der Regel 10-15 Minuten.

Vorbereiten des SSH-Schlüssels (optional)

Note

Die SSH-Schlüsselauthentifizierung für den AKS-Knotenzugriff ist veraltet. Dieser Schritt ist derzeit erforderlich, ist aber in zukünftigen Vorlagenversionen optional. Wenn Sie keinen direkten Knotenzugriff benötigen, können Sie diesen Abschnitt überspringen, wenn die Vorlage aktualisiert wird.

Ssh-Schlüsselpaar generieren

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

Speichern des SSH-Schlüssels 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

Bereitstellen eines privaten AKS-Clusters

Stellen Sie nun den AKS-Cluster mit vollständiger Verschlüsselung und Überwachung bereit.

Verwenden der Dienstkatalogvorlage

  1. Wählen Sie in Ihrer AKS-Workload+ Azure-Dienst hinzufügen aus.
  2. Suchen Sie nach Private AKS Cluster und wählen Sie Private AKS Cluster aus.
  3. Konfigurieren Sie die Bereitstellung:

Grundlagen-Tab

  • AKS-Clustername: aks-prod-01
  • Kubernetes-Version: Wählen Sie die neueste stabile Version aus (z. B 1.32. )

Überwachung

  • Name des Log Analytics-Arbeitsbereichs: Wählen Sie das Protokollierungsziel für Ihren Bereich oder Ihre Community aus.

Encryption

  • Datenträgerverschlüsselungssatzname: Geben Sie den Namen ein, den Sie im Lernprogramm 2-2 verwendet haben.
  • Verschlüsselungsschlüsselname: Geben Sie ihren Schlüsseltresornamen ein.
  • Key Vault: Wählen Sie Ihre key vault mit diesem Schlüsselnamen aus.

Zugriff

  • AKS-Identitätsname: Geben Sie den Namen ein, den Sie in Lernprogramm 2-2 verwendet haben.
  • AKS Identity Resource Group Name: Aktualisieren Sie den Ressourcengruppennamen so, dass er mit dem Speicherort Ihrer Identität übereinstimmt.

Networking

  • AKS-Subnetzname: Geben Sie Ihren AKS-Subnetznamen ein.
  • Name des Agentpoolsubnetz: Geben Sie ihren Agentpool-Subnetznamen ein.
  • CIDR für Dienstverkehr: 172.16.0.0/16
  • IP-Adresse des Kubernetes-DNS-Diensts: 172.16.0.10

Subnetzkonfiguration:

  • Knoten-Subnetz: Wählen Sie aksSubnet aus Ihrer Enklave
  • API-Server-Subnetz: Wählen Sie agentSubnet aus Ihrer Enklave
  • Privates Endpunktsubnetz: Wählen Sie AzureVirtualEnclaveSubnet aus Ihrer Enklave

Knotenpool

Wählen Sie Next aus, um diese Registerkarte in diesem Tutorial zu überspringen.

Stichwörter

  • Umgebung: Production
  • Arbeitsbelastung: AKS
  • Gemanagt von: Azure Enclave
  1. Wählen Sie Überprüfen + Erstellen aus.
  2. Überprüfen Sie alle Einstellungen sorgfältig.
  3. Wählen Sie "Erstellen" aus.

Note

Der AKS-Cluster erstellt automatisch eine verwaltete Ressourcengruppe.

Erstellen Sie Community-Endpunkte für die AKS-Konnektivität

AKS erfordert ausgehende Konnektivität mit mehreren Azure-Diensten. Erstellen Sie Community-Endpunkte für diese Anforderungen.

Note

Wenn Sie im Tutorial 2-1 Community-Endpunkte für AKS erstellt haben, überprüfen Sie, ob sie alle erforderlichen FQDNs enthalten.

Community-Endpunkt konfigurieren

  1. Geh zu deiner Community (zum Beispiel, cmt-fabrikam).

  2. Wählen Sie Community-Endpunkte>+ Erstellen aus oder bearbeiten Sie einen vorhandenen ce-aks-services.

  3. Stellen Sie sicher, dass diese Regeln vorhanden sind:

    Regel 1: Microsoft Containerregistrierung

    • Name: mcr
    • Ziel: mcr.microsoft.com,*.data.mcr.microsoft.com
    • Protokoll: HTTPS.
    • Port:443

    Regel 2: AKS-Verwaltung

    • Name: aks-management
    • Ziel: *.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com
    • Protokoll: HTTPS.
    • Port:443

    Regel 3: verwaltung von Azure

    • Name: azure-management
    • Ziel: management.azure.com,login.microsoftonline.com
    • Protokoll: HTTPS.
    • Port:443

    Regel 4: Paket-Repository

    • Name: packages
    • Ziel: packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com
    • Protokoll: HTTPS.
    • Port:443

    Regel 5: Azure Monitor (sofern aktiviert)

    • Name: monitoring
    • Ziel: *.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com
    • Protokoll: HTTPS.
    • Port:443
  4. Wählen Sie Überprüfen + erstellen und dann Erstellen oder Speichern aus.

Konfigurieren von NSG-Ausgangsregeln

Fügen Sie Ihrer NSG Sicherheitsregeln für ausgehenden Datenverkehr hinzu, um AKS-Datenverkehr zuzulassen.

  1. Navigieren Sie zu Netzwerksicherheitsgruppen>nsg-aks-nodes.
  2. Wählen Sie Ausgehende Sicherheitsregeln>+ Hinzufügen aus.
  3. Regel für HTTPS ausgehend hinzufügen:
    • Quelle: VirtualNetwork
    • Ziel: Internet
    • Zielport: 443
    • Protokoll: TCP.
    • Aktion: Allow
    • Priorität: 1000
    • Name: Allow_HTTPS_Outbound

AKS-Ressourcengruppen einem Workload zuordnen

AKS erstellt eine verwaltete Ressourcengruppe (MANAGED Resource Group, MRG) für die Clusterinfrastruktur. Ordnen Sie sowohl die Benutzerressourcengruppe als auch MRG Ihrer Workload zu.

Verwenden des Azure-Portals

  1. Navigieren Sie im Azure Portal zu Ihrem Azure Enklave-Dienst.
  2. Wählen Sie Ihre Community aus (z. B cmt-fabrikam. ).
  3. Wählen Sie Enklaven aus, und öffnen Sie Ihre AKS-Enklave (z. B ve-aks. ).
  4. Wählen Sie Workloads aus und öffnen Sie Ihre AKS-Workload (z. B. wl-aks).
  5. Wählen Sie in der Workloadübersicht "Eigenschaften" oder "Verknüpfte Ressourcengruppen" aus.
  6. Wählen Sie +Ressourcengruppe hinzufügen.
  7. Fügen Sie die Benutzerressourcengruppe hinzu:
    • Abonnement auswählen: Ihr Abonnement
    • Ressourcengruppe auswählen:rg-aks-cluster
    • Wählen Sie Hinzufügen aus.
  8. Wählen Sie erneut +Ressourcengruppe hinzufügen aus.
  9. Fügen Sie die verwaltete AKS-Ressourcengruppe hinzu:
    • Der verwaltete RG-Name folgt dem Muster: MC_rg-aks-cluster_aks-prod-01_<region>
    • Abonnement auswählen: Ihr Abonnement
    • Ressourcengruppe auswählen: Die verwaltete AKS-Ressourcengruppe
    • Wählen Sie Hinzufügen aus.
  10. Überprüfen Sie, ob beide Ressourcengruppen in der Liste der verknüpften Ressourcengruppen der Workload angezeigt werden.

Tip

Um den Namen der verwalteten AKS-Ressourcengruppe zu finden, navigieren Sie im Portal zu Ihrem AKS-Cluster, und überprüfen Sie die Eigenschaft "Node-Ressourcengruppe " auf der Seite "Übersicht".

Auf AKS-Cluster zugreifen

Greifen Sie über eine Administrator-VM oder Azure Bastion innerhalb der Enklave auf den privaten AKS-Cluster zu.

Herstellen einer Verbindung mit einem virtuellen Administratorcomputer

  1. Stellen Sie über Azure Bastion oder RDP eine Verbindung mit Ihrer Administrator-VM her.
  2. Stellen Sie sicher, dass der virtuelle Administratorcomputer Azure CLI installiert hat.
  3. Melden Sie sich bei Azure an:
az login

Abrufen von Anmeldeinformationen für AKS

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

# Verify connection
kubectl get nodes

Die erwartete Ausgabe zeigt Knoten mit dem Status Ready an:

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

Testarbeitslast bereitstellen

Stellen Sie eine Beispielanwendung bereit, um den Cluster zu überprüfen.

Namespace erstellen

kubectl create namespace test-app

Bereitstellen der Beispielanwendung

# 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

Validierung der Bereitstellung

Führen Sie eine umfassende Überprüfung Ihres AKS-Clusters durch.

Clustergesundheit prüfen

# 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

Überprüfen der Verschlüsselung

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

Überprüfen der Netzwerkkonnektivität

# 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

Überprüfen Sie Monitoring und Protokolle

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

Überprüfen der Azure Policy-Konformität

# 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

Konfigurieren des Kubectl-Zugriffs für andere Benutzer

Gewähren Sie anderen Benutzern Zugriff auf den AKS-Cluster.

Verwenden von 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"

Verwenden von Kubernetes RBAC

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

Behandlung häufig auftretender Probleme

Die Clustererstellung schlägt fehl

Symptom: AKS-Clusterbereitstellung schlägt fehl

Lösungen:

  • Überprüfen, ob Featurekennzeichnungen registriert sind: EncryptionAtHost, EnableAPIServerVnetIntegrationPreview
  • Überprüfen Sie, ob die Subnetzgrößen für die Knotenanzahl und die Pod-Dichte ausreichend sind.
  • Überprüfen, ob datenträgerverschlüsselungssatz und verwaltete Identität über entsprechende Berechtigungen verfügen
  • Überprüfen des Aktivitätsprotokolls für bestimmte Fehlermeldungen

Knoten nicht bereit

Symptom: Knoten zeigen den Status an NotReady

Lösungen:

  • Überprüfen Sie, ob das Knotensubnetz über ausgehende Konnektivität zu den erforderlichen Endpunkten verfügt.
  • Überprüfen Sie, ob die Community-Endpunkte alle erforderlichen AKS-FQDNs enthalten.
  • Überprüfen Sie, ob NSG-Regeln ausgehenden Datenverkehr über Port 443 zulassen.
  • Knoten-Logs überprüfen: kubectl describe node <node-name>

Pods können keine Bilder abrufen

Symptom: Pods hängen in ImagePullBackOff fest

Lösungen:

  • Prüfen, ob der Community-Endpunkt mcr.microsoft.com und *.data.mcr.microsoft.com enthält
  • Check NSG ermöglicht ausgehendes HTTPS (Port 443)
  • Sicherstellen, dass die DNS-Auflösung funktioniert: nslookup mcr.microsoft.com von Pod
  • Zugangsgeheimnisse für das Abrufen von Images bei Verwendung privater Registrys überprüfen

Eine Verbindung mit dem API-Server kann nicht hergestellt werden.

Symptom: kubectl Befehle schlagen mit Verbindungstimeout fehl

Lösungen:

  • Vergewissern Sie sich, dass Sie sich auf einem virtuellen Administratorcomputer oder einer Ressource mit Enklavenkonnektivität befinden
  • Überprüfen der privaten DNS-Zone, die mit dem virtuellen Netzwerk verknüpft ist
  • Überprüfen der Subnetzkonfiguration des API-Servers
  • Testen Sie die DNS-Auflösung: nslookup <cluster-fqdn>

Überwachung funktioniert nicht

Symptom: Keine Protokolle oder Metriken in Azure Monitor

Lösungen:

  • Überprüfen, ob das Container insights-Add-On aktiviert ist
  • Überprüfen, dass Communityendpunkte die Überwachung von FQDNs umfassen
  • Überprüfen, ob auf Log Analytics Arbeitsbereich über den Cluster zugegriffen werden kann
  • Prüfen Sie omsagent, ob Pods ausgeführt werden: kubectl get pods -n kube-system | grep omsagent

Bereinigen von Ressourcen

Um laufende Gebühren zu vermeiden, löschen Sie Ressourcen, wenn sie nicht mehr benötigt werden.

Löschen des AKS-Clusters

# 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

Durch das Dauerhafte Löschen des AKS-Clusters werden alle Arbeitslasten und Daten entfernt. Stellen Sie sicher, dass Sie bei Bedarf Sicherungen haben.

Nächste Schritte

Sie haben die Lernprogrammreihe zum Bereitstellen von Azure Virtual Desktop- und AKS-Workloads in Azure Enklave abgeschlossen!