Exercice : configurer Azure Policy pour Kubernetes sur un cluster AKS
Azure Policy pour Kubernetes permet aux organisations de respecter les exigences de gouvernance et légales, d’implémenter les bonnes pratiques et d’établir des conventions organisationnelles pour les environnements cloud.
Les équipes de développement de votre entreprise adoptent Azure Kubernetes Service (AKS) comme plateforme de développement. Vous réalisez que le meilleur moyen de gérer les coûts est d’appliquer des règles d’entreprise qui définissent les limites des ressources de la charge de travail. Vous souhaitez vous assurer que les développeurs peuvent déployer des charges de travail uniquement dans des limites d’allocation de processeur et de mémoire spécifiques. Le système doit empêcher les charges de travail qui dépassent ces limites.
Dans cet exercice, vous allez activer Azure Policy pour AKS sur votre cluster et ajouter la stratégie Les limites de ressources de processeur et de mémoire des conteneurs de cluster Kubernetes ne doivent pas dépasser les limites spécifiées. Vous vérifiez ensuite si la stratégie refuse la planification de charges de travail qui dépassent les paramètres de ressources de la stratégie.
Activer les fournisseurs de ressources ContainerService et PolicyInsights
Connectez-vous à Azure Cloud Shell à l’aide de votre compte Azure. Sélectionnez la version Bash de Cloud Shell.
Azure Policy pour AKS nécessite que la version de cluster soit 1.14 ou une version ultérieure. Exécutez le script suivant pour valider la version de votre cluster AKS :
az aks list
Assurez-vous que la version de cluster signalée correspond à 1.14 ou une version ultérieure.
Inscrivez le fournisseur du service Azure Kubernetes Service en exécutant la commande
az provider register
:az provider register --namespace Microsoft.ContainerService
Inscrivez le fournisseur Azure Policy en exécutant la commande
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Activez l’installation du module complémentaire en exécutant la commande
az feature register
:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Vérifiez que l’inscription a correctement réussi en interrogeant la table répertoriant les fonctionnalités. Pour ce faire, utilisez la commande
az feature list
. L’inscription de la fonctionnalité peut prendre plusieurs minutes et vous devez vérifier le résultat régulièrement.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Si la session Cloud Shell expire, vous pouvez suivre le processus d’inscription via le portail Azure à l’aide de la page d’intégration de la préversion.
Exécutez la commande
az provider register
pour propager la mise à jour après avoir vérifié que la commande d’interrogation de liste de fonctionnalités affiche « Inscrite » :az provider register -n Microsoft.ContainerService
Activer Azure Policy sur votre cluster
Exécutez la commande
az aks enable-addons
pour activer le module complémentaireazure-policy
pour votre cluster :az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Vérifiez que le pod azure-policy est installé dans l’espace de noms
kube-system
et que le pod gatekeeper est installé dans l’espace de nomsgatekeeper-system
. Pour ce faire, exécutez les commandeskubectl get pods
suivantes :kubectl get pods -n kube-system
Votre résultat doit être semblable à ce qui suit :
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Votre résultat doit être semblable à ce qui suit :
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Enfin, vérifiez que le module complémentaire le plus récent est installé en exécutant la commande
az aks show
. Cette commande récupère les informations de configuration de votre cluster.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Votre résultat doit être semblable à ce qui suit :
{ "config": null, "enabled": true, "identity": null }
Vous êtes maintenant prêt à passer au portail Azure pour configurer la stratégie appelée Les limites des ressources en processeur et en mémoire sur les conteneurs du cluster Kubernetes ne doivent pas dépasser les limites spécifiées.
Attribuer une définition de stratégie intégrée
Pour configurer la nouvelle stratégie Azure, utilisez le service Stratégie dans le portail Azure.
Connectez-vous au portail Azure.
Recherchez le service Stratégie dans le portail Azure. Pour cela, dans la barre de recherche en haut du portail Azure, recherchez et sélectionnez Stratégie.
Sélectionnez le service Stratégie dans la liste des services, comme illustré ici :
Le tableau de bord Stratégie s’ouvre en affichant une vue d’ensemble de toutes vos stratégies attribuées, de l’état des ressources, et de la façon dont les stratégies les affectent. Si vous n’avez attribué aucune stratégie, le tableau de bord est vide.
Dans le menu de gauche, sous Création, sélectionnez Attributions :
Rappelez-vous de notre description précédente que vous disposez de deux options pour créer une attribution de stratégie : vous attribuez une initiative ou une stratégie. Dans la barre de menus du haut, sélectionnez Assigner une stratégie :
Le volet Assigner une stratégie apparaît.
Sous l’onglet Informations de base, entrez les valeurs suivantes pour chaque paramètre afin de créer votre stratégie.
Paramètre Valeur Étendue Étendue Sélectionnez le bouton représentant des points de suspension. Le volet Étendue apparaît. Sous Abonnement, sélectionnez l’abonnement qui contient votre groupe de ressources. Pour Groupe de ressources, sélectionnez rg-akscostsaving, puis le bouton Sélectionner. Exclusions Laissez ce champ vide. Concepts de base Définition de stratégie Sélectionnez le bouton représentant des points de suspension. Le volet Définitions disponibles apparaît. Dans la zone Rechercher, filtrez la sélection en entrant Processeur. Sous l’onglet Définitions de stratégie, sélectionnez Les limites de ressources de processeur et de mémoire des conteneurs de cluster Kubernetes ne doivent pas dépasser les limites spécifiées, puis Ajouter. Nom de l’attribution Acceptez les valeurs par défaut. Description Laissez ce champ vide. Application des stratégies Vérifiez que cette option est définie sur Activé. Attribué par Acceptez les valeurs par défaut. Voici un exemple de l’onglet De base complété :
Sélectionnez l’onglet Paramètres pour spécifier les paramètres de la stratégie.
Définissez les valeurs suivantes pour chacun des paramètres :
Paramètre Valeur Nombre maximal d’unités de processeur autorisées Définissez la valeur sur 200. La stratégie met en correspondance cette valeur avec la valeur de la demande de ressource de charge de travail et la valeur de limite de charge de travail, comme spécifié dans le fichier manifeste de la charge de travail. Nombre maximal d’octets de mémoire autorisés Définissez la valeur sur 256Mi. La stratégie met en correspondance cette valeur avec la valeur de la demande de ressource de charge de travail et la valeur de limite de charge de travail, comme spécifié dans le fichier manifeste de la charge de travail. Voici un exemple de l’onglet Paramètres complété :
Sélectionnez l’onglet Correction. Sous cet onglet, vous sélectionnez la manière dont la nouvelle stratégie affecte les ressources existantes. Par défaut, la nouvelle stratégie ne vérifie que les ressources nouvellement créées. Conservez la configuration standard par défaut.
Voici un exemple de l’onglet Correction complété :
Sélectionnez l’onglet Vérifier + créer. Passez en revue les valeurs que vous avez choisies, puis sélectionnez Créer.
Important
Si vous utilisez un cluster AKS existant, l’application de l’attribution de stratégie peut prendre environ 15 minutes.
Demandes de ressources de test
La dernière étape consiste à tester la nouvelle stratégie. Déployez votre charge de travail de test avec des demandes de ressources et des limites qui enfreignent la nouvelle stratégie. Si tout se passe correctement, le serveur retourne une erreur indiquant qu’elle est refusée par la stratégie.
Ouvrez Azure Cloud Shell et sélectionnez la version Bash de Cloud Shell.
Créez un fichier manifeste pour le déploiement Kubernetes à l’aide de l’éditeur intégré. Appelez le fichier
test-policy.yaml
:code test-policy.yaml
Conseil
Cloud Shell comprend un éditeur de fichier intégré. L’éditeur Cloud Shell prend en charge des fonctionnalités comme la mise en surbrillance du langage, la palette de commandes et un explorateur de fichiers. Pour créer et modifier des fichiers simples, démarrez l’éditeur en exécutant
code .
dans le terminal Cloud Shell. Cette action ouvre l’éditeur avec votre répertoire de travail actif défini dans le terminal. Pour ouvrir directement votre fichier manifeste à des fins d’édition rapide, exécutezcode test-policy.yaml
. Cette commande ouvre l’éditeur sans l’explorateur de fichiers.Collez le texte suivant dans le fichier :
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Appuyez sur Ctrl+S pour enregistrer le fichier, puis sur Ctrl+Q pour fermer l’éditeur.
Exécutez la commande
kubectl apply
pour appliquer la configuration et déployer l’application dans l’espace de nomscostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
La sortie doit ressembler à ce qui suit :
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Notez la manière dont le webhook d’admission,
validation.gatekeeper.sh
, a refusé la demande de planification du pod.Ouvrez le fichier manifeste et corrigez la demande de ressource :
code test-policy.yaml
Remplacez le texte par le texte suivant :
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Appuyez sur Ctrl+S pour enregistrer le fichier, puis sur Ctrl+Q pour fermer l’éditeur.
Exécutez la commande
kubectl apply
pour appliquer la configuration et déployer l’application dans l’espace de nomscostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Vous obtenez la sortie suivante :
pod/nginx created
Obtenez les pods des pods créés dans votre espace de noms
costsavings
.kubectl get pods --namespace costsavings
Au bout de quelques secondes, les pods passent à l’état
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Appuyez sur Ctrl+C pour arrêter l’observation une fois que vous voyez les pods en cours d’exécution.