Zelfstudie 2-4: Azure Kubernetes Service (AKS) workload implementeren in Azure Enclave

In deze zelfstudie wordt u begeleid bij het implementeren van een privé-Azure Kubernetes Service (AKS)-cluster in Azure Enclave. U maakt een volledig privé AKS-cluster met door de klant beheerde versleuteling, netwerkintegratie en veilige toegangspatronen.

In deze handleiding leer je hoe je:

  • Vereiste Azure-functies inschakelen voor privé-AKS
  • Vereiste resources voor AKS valideren
  • Privé-AKS-cluster implementeren
  • Door de klant beheerde sleutelversleuteling configureren
  • Community-eindpunten maken voor AKS-connectiviteit
  • Meerdere resourcegroepen koppelen aan een AKS-workload
  • Toegang tot het AKS-cluster en valideren

Prerequisites

Important

Deze zelfstudie is afgestemd op het gedrag van de privé-AKS-clustersjabloon en vereist de resources die zijn gemaakt door de AVE AKS Enclave-implementatie in zelfstudie 2-2.

Voordat u begint

Inzicht in AKS in Azure Enclave

AKS in Azure Enclave biedt:

  • Volledig privécluster: API-server alleen toegankelijk via een privé-eindpunt
  • Netwerkisolatie: al het verkeer blijft binnen enclavegrenzen
  • Door de klant beheerde versleuteling: zowel het besturingsvlak als het gegevensvlak dat is versleuteld met CMK
  • Grenzen van werkbelasting beveiligen: Kubernetes-resources die zijn opgenomen in het beveiligingsbeleid voor enclaves

Naamconventies voor bronnen

In deze zelfstudie worden voorbeeldnamen gebruikt. Gebruik de naamconventie van uw organisatie:

  • Enclave: aks-enclave
  • Werkbelasting: aks-workload
  • Resourcegroep: rg-aks-cluster
  • AKS-cluster: aks-prod-01

Vereiste Azure-functies inschakelen

Voor AKS in Azure Enclave moeten specifieke Azure functies zijn ingeschakeld voor uw abonnement.

De functie EncryptionAtHost inschakelen

Met deze functie schakelt u versleuteling in op VM-hostniveau voor AKS-knooppunten.

# 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

Integratie van virtuele API Server-netwerken inschakelen (preview)

Met deze functie kan de AKS API-server rechtstreeks in uw virtuele netwerk worden geïntegreerd.

# 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

Wacht tot beide functies "state": "Registered" verschijnen voordat u doorgaat. Registratie duurt doorgaans 10-15 minuten.

SSH-sleutel voorbereiden (optioneel)

Note

SSH-sleutelverificatie voor toegang tot AKS-knooppunten wordt afgeschaft. Deze stap is momenteel vereist, maar is optioneel in toekomstige sjabloonversies. Als u geen directe knooppunttoegang nodig hebt, kunt u deze sectie overslaan wanneer de sjabloon wordt bijgewerkt.

SSH-sleutelpaar genereren

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

SSH-sleutel opslaan 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

Privé-AKS-cluster implementeren

Implementeer nu het AKS-cluster met volledige versleuteling en bewaking.

Sjabloon voor servicecatalogus gebruiken

  1. Selecteer + Een Azure-service toevoegen in uw AKS-workload.
  2. Zoek en selecteer privé-AKS-cluster.
  3. De implementatie configureren:

Tabblad Basis

  • AKS-clusternaam: aks-prod-01
  • Kubernetes-versie: Selecteer de meest recente stabiele versie (bijvoorbeeld 1.32)

Toezicht

  • Naam van de Log Analytics-werkruimte: Selecteer de logbestemming van uw enclave of community.

Encryption

  • Naam van schijfversleutelingsset: voer de naam in die u hebt gebruikt in zelfstudie 2-2.
  • Naam van versleutelingssleutel: voer de naam van uw sleutelkluis in.
  • Key Vault: selecteer uw key vault met die sleutelnaam.

Toegang

  • AKS-identiteitsnaam: voer de naam in die u hebt gebruikt in zelfstudie 2-2.
  • Naam van AKS-identiteitsresourcegroep: werk de naam van de resourcegroep bij zodat deze overeenkomt met de locatie van uw identiteit.

Networking

  • AKS-subnetnaam: voer de naam van uw AKS-subnet in
  • Subnetnaam van agentgroep: voer de naam van het subnet van de agentgroep in
  • CIDR voor serviceverkeer: 172.16.0.0/16
  • IP-adres van de Kubernetes DNS-service: 172.16.0.10

Subnetconfiguratie:

  • Knooppuntsubnet: selecteren aksSubnet uit uw enclave
  • API-serversubnet: Selecteer agentSubnet uit uw enclave
  • Subnet voor privé-eindpunt: selecteren AzureVirtualEnclaveSubnet uit uw enclave

Knooppuntgroep

Selecteer Next deze optie om dit tabblad voor deze zelfstudie over te slaan.

Tags

  • Omgeving: Production
  • Werkbelasting: AKS
  • Beheerd door: Azure Enclave
  1. Selecteer Beoordelen en Creëren.
  2. Controleer alle instellingen zorgvuldig.
  3. Klik op Creëren.

Note

Het AKS-cluster maakt automatisch een beheerde resourcegroep.

Community-eindpunten maken voor AKS-connectiviteit

AKS vereist uitgaande connectiviteit met verschillende Azure-services. Maak community-eindpunten aan voor deze vereisten.

Note

Als u AKS-community-eindpunten hebt gemaakt in Zelfstudie 2-1, controleert u of deze alle vereiste FQDN's bevatten.

Community-eindpunt configureren

  1. Ga naar je community (bijvoorbeeld, cmt-fabrikam).

  2. Selecteer Community-eindpunten>+ Aanmaken of bewerk een bestaand ce-aks-services.

  3. Zorg ervoor dat deze regels bestaan:

    Regel 1: Microsoft Container Registry

    • Naam: mcr
    • Bestemming: mcr.microsoft.com,*.data.mcr.microsoft.com
    • Protocol: HTTPS
    • Poort: 443

    Regel 2: AKS-beheer

    • Naam: aks-management
    • Bestemming: *.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com
    • Protocol: HTTPS
    • Poort: 443

    Regel 3: Azure beheer

    • Naam: azure-management
    • Bestemming: management.azure.com,login.microsoftonline.com
    • Protocol: HTTPS
    • Poort: 443

    Regel 4: Pakketopslagplaats

    • Naam: packages
    • Bestemming: packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com
    • Protocol: HTTPS
    • Poort: 443

    Regel 5: Azure Monitor (indien ingeschakeld)

    • Naam: monitoring
    • Bestemming: *.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com
    • Protocol: HTTPS
    • Poort: 443
  4. Selecteer Beoordelen en maken en vervolgens Maken of Opslaan.

Uitgaande NSG-regels configureren

Voeg uitgaande beveiligingsregels toe aan uw NSG om AKS-verkeer toe te staan.

  1. Navigeer naar netwerkbeveiligingsgroepen>nsg-aks-nodes.
  2. Selecteer Uitgaande beveiligingsregels>+ Toevoegen.
  3. Regel toevoegen voor uitgaand HTTPS-verkeer:
    • Bron: VirtualNetwork
    • Bestemming: Internet
    • Doelpoort: 443
    • Protocol: TCP
    • Actie: Allow
    • Prioriteit: 1000
    • Naam: Allow_HTTPS_Outbound

AKS-resourcegroepen aan de workload koppelen

AKS maakt een beheerde resourcegroep (MRG) voor clusterinfrastructuur. Koppel zowel de gebruikersresourcegroep als MRG aan uw workload.

Azure-portal gebruiken

  1. Navigeer naar uw Azure Enclave-service in de Azure-portal.
  2. Selecteer uw community (bijvoorbeeld cmt-fabrikam).
  3. Selecteer Enclaves en open uw AKS-enclave (bijvoorbeeld ve-aks).
  4. Selecteer Workloads en open uw AKS-workload (bijvoorbeeld wl-aks).
  5. Selecteer eigenschappen of gekoppelde resourcegroepen in het workloadoverzicht.
  6. Selecteer + Resourcegroep toevoegen.
  7. Voeg de gebruikersresourcegroep toe:
    • Abonnement selecteren: uw abonnement
    • Resourcegroep selecteren:rg-aks-cluster
    • Selecteer Toevoegen
  8. Selecteer + Resourcegroep opnieuw toevoegen .
  9. Voeg de beheerde AKS-resourcegroep toe:
    • De naam van de beheerde RG heeft het volgende patroon: MC_rg-aks-cluster_aks-prod-01_<region>
    • Abonnement selecteren: uw abonnement
    • Resourcegroep selecteren: de beheerde AKS-resourcegroep
    • Selecteer Toevoegen
  10. Controleer of beide resourcegroepen worden weergegeven in de lijst met gekoppelde resourcegroepen van de werkbelasting.

Tip

Als u de naam van de beheerde AKS-resourcegroep wilt vinden, gaat u naar uw AKS-cluster in de portal en controleert u de eigenschap Node-resourcegroep op de overzichtspagina.

Toegang tot AKS-cluster

Open het privé-AKS-cluster via een beheer-VM of Azure Bastion binnen de enclave.

Verbinding maken met beheer-VM

  1. Maak verbinding met uw beheer-VM via Azure Bastion of RDP.
  2. Zorg ervoor dat Azure CLI is geïnstalleerd op de beheer-VM.
  3. Meld u aan bij Azure:
az login

AKS-referenties ophalen

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

# Verify connection
kubectl get nodes

Verwachte uitvoer toont knooppunten met de 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

Testworkload implementeren

Implementeer een voorbeeldtoepassing om het cluster te valideren.

Naamruimte maken

kubectl create namespace test-app

Voorbeeldtoepassing implementeren

# 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

De implementatie valideren

Voer uitgebreide validatie van uw AKS-cluster uit.

Clusterstatus controleren

# 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

Versleuteling verifiëren

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

Valideer de netwerkverbinding

# 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

Bewaking en logboeken controleren

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

Naleving van Azure Policy controleren

# 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

Kubectl-toegang configureren voor andere gebruikers

Andere gebruikers toegang verlenen tot het AKS-cluster.

Azure RBAC gebruiken

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

Kubernetes RBAC gebruiken

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

Veelvoorkomende problemen oplossen

Het maken van een cluster mislukt

Symptoom: implementatie van AKS-cluster mislukt

Oplossingen:

  • Controleer of functievlagmen zijn geregistreerd: EncryptionAtHost, EnableAPIServerVnetIntegrationPreview
  • Controleer of subnetgrootten voldoende zijn voor het aantal knooppunten en poddichtheid
  • Controleer of de schijfversleutelingsset en beheerde identiteit over de juiste machtigingen beschikken
  • Activiteitenlogboek controleren op specifieke foutberichten

Knooppunten zijn niet gereed

Symptoom: Knooppunten geven de status weer NotReady

Oplossingen:

  • Controleren of het subnet van het knooppunt uitgaande connectiviteit heeft met de vereiste eindpunten
  • Controleren of community-eindpunten alle vereiste AKS-FQDN's bevatten
  • Controleer of NSG-regels uitgaand verkeer toestaan op poort 443
  • Knooppuntlogboeken controleren: kubectl describe node <node-name>

Pods kunnen geen images pullen

Symptoom: Pods blijven hangen in ImagePullBackOff

Oplossingen:

  • Controleren of het community-eindpunt bevat mcr.microsoft.com en *.data.mcr.microsoft.com
  • Controleer of NSG uitgaande HTTPS toestaat (poort 443)
  • Zorg ervoor dat de DNS-resolutie werkt: nslookup mcr.microsoft.com vanuit de pod
  • Secrets voor het ophalen van images controleren als u privéregisters gebruikt

Kan geen verbinding maken met API-server

Symptoom: kubectl opdrachten mislukken met verbindingstime-out

Oplossingen:

  • Controleer of u zich op de beheer-VM of een resource met enclave-connectiviteit bevindt
  • Controleren of de privé-DNS-zone is gekoppeld aan het virtuele netwerk
  • Subnetconfiguratie van API-server controleren
  • DNS-omzetting testen: nslookup <cluster-fqdn>

Bewaking werkt niet

Symptoom: geen logboeken of metrische gegevens in Azure Monitor

Oplossingen:

  • Controleren of de invoegtoepassing voor Container Insights is ingeschakeld
  • Controleren of community-eindpunten FQDN's bewaken
  • Controleren of Log Analytics werkruimte toegankelijk is vanuit het cluster
  • Controleer of omsagent pods worden uitgevoerd: kubectl get pods -n kube-system | grep omsagent

De hulpbronnen opschonen

Als u doorlopende kosten wilt voorkomen, verwijdert u resources wanneer u deze niet meer nodig hebt.

AKS-cluster verwijderen

# 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

Als u het AKS-cluster verwijdert, worden alle workloads en gegevens definitief verwijderd. Zorg ervoor dat u indien nodig back-ups hebt.

Volgende stappen 

U hebt de reeks zelfstudies voor het implementeren van Azure Virtual Desktop- en AKS-workloads in Azure Enclave voltooid.