Tutoriel 2-4 : Déployer Azure Kubernetes Service (AKS) charge de travail dans Azure Enclave

Ce didacticiel vous guide tout au long du déploiement d’un cluster de Azure Kubernetes Service (AKS) privé dans Azure Enclave. Vous créez un cluster AKS entièrement privé avec un chiffrement géré par le client, une intégration réseau et des modèles d’accès sécurisés.

Dans ce tutoriel, vous allez apprendre à :

  • Activer les fonctionnalités de Azure requises pour AKS privé
  • Valider les ressources requises pour AKS
  • Déployer un cluster AKS privé
  • Configurer le chiffrement de clé gérée par le client
  • Créer des points de terminaison de communauté pour la connectivité AKS
  • Associer plusieurs groupes de ressources à la charge de travail AKS
  • Accéder au cluster AKS et valider

Prerequisites

Important

Ce tutoriel s’aligne sur le comportement du modèle de cluster AKS privé et nécessite les ressources créées par le déploiement AVE AKS Enclave dans le tutoriel 2-2.

Avant de commencer

Comprendre AKS dans Azure Enclave

AKS dans Azure Enclave fournit :

  • Cluster entièrement privé : serveur d’API accessible uniquement via un point de terminaison privé
  • Isolation du réseau : tout le trafic reste dans les limites des enclaves
  • Chiffrement géré par le client : plan de contrôle et plan de données chiffrés avec CMK
  • Limites de charge de travail sécurisées : ressources Kubernetes contenues dans les stratégies de sécurité d’enclave

Conventions de nommage des ressources

Ce tutoriel utilise des exemples de noms. Utilisez la convention d’affectation de noms de votre organisation :

  • Enclave : aks-enclave
  • Charge de travail : aks-workload
  • Groupe de ressources : rg-aks-cluster
  • Cluster AKS : aks-prod-01

Activer les fonctionnalités de Azure requises

AKS dans Azure Enclave nécessite que des fonctionnalités de Azure spécifiques soient activées sur votre abonnement.

Activer la fonctionnalité EncryptionAtHost

Cette fonctionnalité active le chiffrement au niveau de l’hôte de machine virtuelle pour les nœuds 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

Activer l’intégration du réseau virtuel du serveur d’API (préversion)

Cette fonctionnalité permet au serveur d’API AKS d’être intégré directement à votre réseau virtuel.

# 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

Attendez que les deux fonctions affichent "state": "Registered" avant de continuer. L’inscription prend généralement 10 à 15 minutes.

Préparer la clé SSH (facultatif)

Note

L’authentification par clé SSH pour l’accès au nœud AKS est déconseillée. Cette étape est actuellement requise, mais sera facultative dans les versions ultérieures du modèle. Si vous n’avez pas besoin d’un accès direct au nœud, vous pouvez ignorer cette section lorsque le modèle est mis à jour.

Générer une paire de clés 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"

Stocker une clé SSH dans 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

Déployer un cluster AKS privé

Déployez maintenant le cluster AKS avec un chiffrement et une surveillance complets.

Utiliser le modèle de catalogue de services

  1. Dans votre charge de travail AKS, sélectionnez + Ajouter un service Azure.
  2. Recherchez et sélectionnez Cluster AKS privé.
  3. Configurez le déploiement :

Onglet Informations de base

  • Nom du cluster AKS : aks-prod-01
  • Version de Kubernetes : sélectionnez la dernière version stable (par exemple, 1.32)

Monitoring

  • Nom de l’espace de travail Log Analytics : sélectionnez votre enclave ou votre destination de journalisation de communauté.

Encryption

  • Nom du jeu de chiffrement de disque : entrez le nom que vous avez utilisé dans le tutoriel 2-2.
  • Nom de clé de chiffrement : entrez le nom de la clé de votre coffre de clés.
  • Key Vault : sélectionnez votre key vault avec ce nom de clé.

Access

  • Nom de l’identité AKS : entrez le nom que vous avez utilisé dans le tutoriel 2-2.
  • Nom du groupe de ressources d’identité AKS : Mettez à jour le nom du groupe de ressources pour qu’il corresponde à l’emplacement de votre identité.

Networking

  • Nom du sous-réseau AKS : entrez le nom de votre sous-réseau AKS
  • Nom du sous-réseau du pool d’agents : entrez le nom du sous-réseau du pool d’agents
  • CIDR pour le trafic de service : 172.16.0.0/16
  • Adresse IP du service DNS Kubernetes : 172.16.0.10

Configuration du sous-réseau :

  • Sous-réseau de nœuds: Sélectionnez aksSubnet dans votre enclave
  • Sous-réseau du serveur d’API : sélectionner agentSubnet à partir de votre enclave
  • Sous-réseau de point de terminaison privé : sélectionner AzureVirtualEnclaveSubnet à partir de votre enclave

Pool de nœuds

Sélectionnez Next cette option pour ignorer cet onglet pour ce didacticiel.

Étiquettes

  • Environnement : Production
  • Charge de travail : AKS
  • ManagedBy : Azure Enclave
  1. Sélectionnez Vérifier + Créer.
  2. Passez en revue attentivement tous les paramètres.
  3. Cliquez sur Créer.

Note

Le cluster AKS crée automatiquement un groupe de ressources managé.

Créer des points de terminaison de communauté pour la connectivité AKS

AKS nécessite une connectivité sortante à plusieurs services Azure. Créez des points de terminaison pour la communauté répondant à ces exigences.

Note

Si vous avez créé des points de terminaison de communauté AKS dans le tutoriel 2-1, vérifiez qu’ils incluent tous les noms de domaine complets requis.

Configurer le point de terminaison communautaire

  1. Allez dans votre communauté (par exemple, cmt-fabrikam).

  2. Sélectionnez points de terminaison communautaires>+ Créer ou modifiez un élément existant ce-aks-services.

  3. Vérifiez que ces règles existent :

    Règle 1 : Registre de conteneurs Microsoft

    • Nom : mcr
    • Destination : mcr.microsoft.com,*.data.mcr.microsoft.com
    • Protocol : HTTPS
    • Port : 443

    Règle 2 : Gestion AKS

    • Nom : aks-management
    • Destination : *.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com
    • Protocol : HTTPS
    • Port : 443

    Règle 3 : gestion des Azure

    • Nom : azure-management
    • Destination : management.azure.com,login.microsoftonline.com
    • Protocol : HTTPS
    • Port : 443

    Règle 4 : Référentiel de packages

    • Nom : packages
    • Destination : packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com
    • Protocol : HTTPS
    • Port : 443

    Règle 5 : Azure Monitor (si activé)

    • Nom : monitoring
    • Destination : *.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com
    • Protocol : HTTPS
    • Port : 443
  4. Sélectionnez Vérifier + créer , puis Créer ou Enregistrer.

Configurer les règles de sortie du NSG

Ajoutez des règles de sécurité sortantes à votre groupe de sécurité réseau pour autoriser le trafic AKS.

  1. Accédez aux groupes >nsg-aks-nodes.
  2. Sélectionnez Règles de sécurité sortantes>+ Ajouter.
  3. Ajouter une règle pour le trafic sortant HTTPS :
    • Source : VirtualNetwork
    • Destination : Internet
    • Port de destination : 443
    • Protocol : TCP
    • Action : Allow
    • Priorité : 1000
    • Nom : Allow_HTTPS_Outbound

Associer les groupes de ressources AKS à la charge de travail

AKS crée un groupe de ressources managé (MRG) pour l’infrastructure de cluster. Associez le groupe de ressources utilisateur et MRG à votre charge de travail.

En passant par le portail Azure

  1. Accédez à votre service enclave Azure dans le portail Azure.
  2. Sélectionnez votre communauté (par exemple, cmt-fabrikam).
  3. Sélectionnez Enclaves et ouvrez votre enclave AKS (par exemple). ve-aks
  4. Sélectionnez Charges de travail et ouvrez votre charge de travail AKS (par exemple). wl-aks
  5. Dans la vue d’ensemble de la charge de travail, sélectionnez Propriétés ou Groupes de ressources liés.
  6. Sélectionnez + Ajouter un groupe de ressources.
  7. Ajoutez le groupe de ressources utilisateur :
    • Sélectionner un abonnement : Votre abonnement
    • Sélectionnez groupe de ressources : rg-aks-cluster
    • Sélectionnez Ajouter
  8. Sélectionnez + Ajouter un groupe de ressources à nouveau.
  9. Ajoutez le groupe de ressources managé AKS :
    • Le nom du groupe de ressources managé suit le modèle suivant : MC_rg-aks-cluster_aks-prod-01_<region>
    • Sélectionner un abonnement : Votre abonnement
    • Sélectionner un groupe de ressources : groupe de ressources managé AKS
    • Sélectionnez Ajouter
  10. Vérifiez que les deux groupes de ressources apparaissent dans la liste des groupes de ressources liés de la charge de travail.

Tip

Pour rechercher le nom du groupe de ressources managé AKS, accédez à votre cluster AKS dans le portail et vérifiez la propriété du groupe de ressources Node dans la page Vue d’ensemble.

Accéder au cluster AKS

Accédez au cluster AKS privé via une machine virtuelle d’administration ou Azure Bastion dans l’enclave.

Se connecter à une machine virtuelle d’administration

  1. Connectez-vous à votre machine virtuelle administrateur via Azure Bastion ou RDP.
  2. Vérifiez que la machine virtuelle d’administration a Azure CLI installée.
  3. Connectez-vous à Azure :
az login

Obtenir les informations d’identification AKS

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

# Verify connection
kubectl get nodes

La sortie attendue affiche les nœuds dans l’état 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

Déployer une charge de travail de test

Déployez un exemple d’application pour valider le cluster.

Créer un espace de noms

kubectl create namespace test-app

Déployer un exemple d’application

# 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

Valider le déploiement

Effectuez une validation complète de votre cluster AKS.

Vérifier la santé des clusters

# 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

Vérifier le chiffrement

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

Valider la connectivité réseau

# 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

Vérifier la surveillance et les journaux

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

Vérifier la conformité d’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

Configurer l’accès kubectl pour d’autres utilisateurs

Accordez à d’autres utilisateurs l’accès au cluster AKS.

Utilisation de 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"

Utilisation du RBAC Kubernetes

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

Dépannage des problèmes courants

Échec de la création du cluster

Symptôme : Échec du déploiement du cluster AKS

Solutions :

  • Vérifiez que les indicateurs de fonctionnalité sont inscrits : EncryptionAtHost, EnableAPIServerVnetIntegrationPreview
  • Vérifier que les tailles de sous-réseau sont adéquates pour le nombre de nœuds et la densité des pods
  • Vérifier que le jeu de chiffrement de disque et l’identité managée disposent des autorisations appropriées
  • Examiner le journal d’activité pour des messages d’erreur spécifiques

Nœuds non prêts

Symptôme : les nœuds ont l’état NotReady

Solutions :

  • Vérifier que le sous-réseau de nœud dispose d’une connectivité sortante aux points de terminaison requis
  • Vérifier que les points de terminaison de la communauté incluent tous les noms de domaine complets AKS requis
  • Vérifiez que les règles des groupes de sécurité réseau autorisent le trafic sortant sur le port 443.
  • Examinez les journaux des nœuds : kubectl describe node <node-name>

Les pods ne peuvent pas extraire d’images

Symptôme : les pods restent bloqués dans l'état ImagePullBackOff.

Solutions :

  • Vérifier que le point de terminaison communautaire inclut mcr.microsoft.com et *.data.mcr.microsoft.com
  • Vérifier que le groupe de sécurité réseau autorise le protocole HTTPS sortant (port 443)
  • Vérifiez que la résolution DNS fonctionne : nslookup mcr.microsoft.com depuis le pod
  • Vérifier les secrets pour le téléchargement d’images si vous utilisez des registres privés

Impossible de se connecter au serveur d’API

Symptôme : kubectl les commandes échouent avec le délai d’expiration de la connexion

Solutions :

  • Vérifiez que vous êtes sur une machine virtuelle ou une ressource d’administration avec une connectivité d’enclave
  • Vérifier que la zone DNS privée est liée au réseau virtuel
  • Vérifier la configuration du sous-réseau du serveur d’API
  • Testez la résolution DNS : nslookup <cluster-fqdn>

Surveillance qui ne fonctionne pas

Symptôme : aucun journal ni aucune métrique dans Azure Monitor

Solutions :

  • Vérifier que le module complémentaire Container Insights est activé
  • Vérifiez que les points de terminaison de la communauté incluent les FQDN de supervision.
  • Vérifier que l’espace de travail Log Analytics est accessible depuis le cluster
  • Vérifiez que les omsagent pods sont en cours d’exécution : kubectl get pods -n kube-system | grep omsagent

Nettoyer les ressources

Pour éviter les frais en cours, supprimez les ressources quand cela n’est plus nécessaire.

Supprimer un 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

Warning

La suppression définitive du cluster AKS supprime toutes les charges de travail et toutes les données. Vérifiez que vous disposez de sauvegardes si nécessaire.

Étapes suivantes

Vous avez terminé la série de tutoriels pour déployer des charges de travail Azure Virtual Desktop et AKS dans Azure Enclave !