Validez les contrôleurs d’admission
Cet article fait partie d’une série. Commencez par la vue d’ensemble.
Les contrôleurs d’admission provoquent rarement des problèmes, mais il est essentiel de garantir leur fonctionnalité appropriée. Cet article explique comment les contrôleurs d’admission peuvent affecter d’autres composants lorsqu’ils ne fonctionnent pas correctement. Il décrit également les commandes que vous pouvez utiliser pour valider le niveau de performance du contrôleur d’admission.
Contrôleur d’admission
Un contrôleur d’admission est un élément de code qui intercepte les requêtes adressées à un serveur d’API Kubernetes avant la persistance d’un objet, mais une fois qu’une requête est authentifiée et autorisée.
Les contrôleurs d’admission peuvent être validées, en mutationou une combinaison des deux. Muter les contrôleurs peut modifier les objets associés avant d’admettre une requête. La validation des contrôleurs garantit uniquement que les requêtes répondent à des critères prédéfinis spécifiques.
L’une des principales fonctions des contrôleurs d’admission consiste à réglementer les requêtes de création, de suppression et de modification d’objets. En outre, les contrôleurs d’admission peuvent restreindre les verbes personnalisés, tels que la requête d’une connexion à un pod via un proxy de serveur d’API. Toutefois, les contrôleurs d’admission ne peuvent pas bloquer les requêtes de lecture d’objets, y compris les opérations telles que get
, watch
ou list
.
Certains composants peuvent affecter les contrôleurs d’admission, tels que mutant et validant des webhooks. Lorsque vous incorporez la mutation et la validation des webhooks dans votre cluster Kubernetes, il est impératif de garantir la haute disponibilité. Les nœuds non sains ne doivent pas bloquer les requêtes du serveur d’API. Il est essentiel de surveiller le pipeline de contrôle d’admission afin que les requêtes adressées au serveur d’API ne soient pas bloquées. Des contrôleurs d’admission en mauvaise santé peuvent affecter la mutation et la validation des webhooks. Les contrôleurs d’admission basés sur webhook que vous devez surveiller sont les suivants :
Le module complémentaire Azure Policy pour les clusters Azure Kubernetes Service (AKS), qui étend Gatekeeper. Gatekeeper est un webhook de contrôleur d’admission pour Open Policy Agent.
Kyverno, qui s’exécute en tant que contrôleur d’admission dynamique dans un cluster Kubernetes. Kyverno reçoit des rappels HTTP de webhook d’admission de validation et de mutation du serveur API Kubernetes et applique des politiques de correspondance pour renvoyer des résultats qui appliquent les politiques d’admission ou rejettent les requêtes. Pour obtenir des informations de référence sur la résolution des problèmes (par exemple, échec des appels de webhook avec APIServer), consultez la documentation de résolution des problèmes de Kyverno.
Les contrôleurs d’admission qui ne fonctionnent pas correctement peuvent également affecter différents composants, tels que les maillages de service. Les maillages de service, tels que Istio et Linkerd, utilisent des contrôleurs d’admission pour automatiser l’injection de conteneurs sidecar à l’intérieur d’un pod, entre autres fonctionnalités. Il est important d’évaluer et de vérifier que les contrôleurs d’admission fonctionnent correctement pour garantir l’opération transparente d’un maillage de service.
Vérifier l’état du module complémentaire Azure Policy pour les clusters AKS
Si vous installez le module complémentaire Azure Policy pour AKS, vous pouvez utiliser les commandes kubectl suivantes pour valider l’installation et les fonctionnalités des contrôleurs d’admission Azure Policy dans votre cluster :
# Verify that Azure Policy pods are running.
kubectl get pod -n gatekeeper-system
# Sample output
...
NAME READY STATUS RESTARTS AGE
gatekeeper-audit-65844778cb-rkflg 1/1 Running 0 163m
gatekeeper-controller-78797d4687-4pf6w 1/1 Running 0 163m
gatekeeper-controller-78797d4687-splzh 1/1 Running 0 163m
...
Exécutez la commande précédente pour vérifier la disponibilité des pods d’agent Azure Policy dans l’espace de noms du système de contrôle. Si la sortie n’est pas ce que vous attendez, cela peut indiquer un problème avec un contrôleur d’admission, un service API ou une définition de ressource personnalisée (CRD).
# Check that all API resources are working correctly. Use the following command to list all API resources.
kubectl api-resources
# Sample output
...
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
...
La commande précédente vous permet de vérifier que toutes les ressources d’API fonctionnent correctement. Vérifiez que la sortie inclut les ressources attendues sans erreurs ni composants manquants. Utilisez les commandes kubectl get pod
et kubectl api-resources
pour vérifier l’état du module complémentaire Azure Policy pour AKS et valider les fonctionnalités des contrôleurs d’admission dans votre cluster Kubernetes. Surveillez régulièrement les contrôleurs d’admission pour vous assurer qu’ils fonctionnent correctement afin de maintenir l’intégrité globale et la stabilité de votre cluster.
Utilisez la commande kubectl get
suivante pour confirmer que les affectations de politiques sont appliquées à votre cluster :
kubectl get constrainttemplates
Remarque
Les attributions de stratégies peuvent prendre jusqu’à 20 minutes pour se synchroniser avec chaque cluster.
Votre sortie doit ressembler à celle de l’exemple suivant :
NAME AGE
k8sazureallowedcapabilities 23m
k8sazureallowedusersgroups 23m
k8sazureblockhostnamespace 23m
k8sazurecontainerallowedimages 23m
k8sazurecontainerallowedports 23m
k8sazurecontainerlimits 23m
k8sazurecontainernoprivilege 23m
k8sazurecontainernoprivilegeescalation 23m
k8sazureenforceapparmor 23m
k8sazurehostfilesystem 23m
k8sazurehostnetworkingports 23m
k8sazurereadonlyrootfilesystem 23m
k8sazureserviceallowedports 23m
Pour plus d’informations, consultez les ressources suivantes :
Valider les webhooks
Pour vous assurer que la validation et la désactivation des webhooks fonctionnent comme prévu dans votre cluster Kubernetes, procédez comme suit.
Exécutez la commande suivante pour répertorier les webhooks de validation dans le cluster :
kubectl get ValidatingWebhookConfiguration -o wide
Votre sortie doit ressembler à celle de l’exemple suivant :
NAME WEBHOOKS AGE aks-node-validating-webhook 1 249d azure-policy-validating-webhook-configuration 1 249d gatekeeper-validating-webhook-configuration 1 249d
Vérifiez la sortie pour vérifier que les webhooks de validation sont présents et que leurs configurations sont comme prévu. La sortie inclut le nom de chaque webhook de validation, le nombre de webhooks et l’âge de chaque webhook.
Exécutez la commande suivante pour répertorier les webhooks de mutation dans le cluster :
kubectl get MutatingWebhookConfiguration -o wide
Votre sortie doit ressembler à celle de l’exemple suivant :
NAME WEBHOOKS AGE aks-node-mutating-webhook 1 249d azure-policy-mutating-webhook-configuration 1 249d gatekeeper-mutating-webhook-configuration 1 249d
Vérifiez la sortie pour vous assurer que les webhooks mutants sont répertoriés correctement et que leurs configurations sont souhaitées. La sortie inclut le nom de chaque webhook de mutation, le nombre de webhooks et l’âge de chaque webhook.
Exécutez la commande suivante pour récupérer des détails spécifiques pour un contrôleur d’admission particulier :
kubectl get MutatingWebhookConfiguration <mutating-webhook-name> -o yaml
Remplacez
<mutating-webhook-name>
par le nom du webhook mutant pour lequel vous souhaitez récupérer les détails. La sortie de cette commande affiche la représentation YAML de la configuration de webhook en mode de mutation spécifié.
Exécutez les commandes de cette section et vérifiez la sortie pour confirmer que les webhooks de validation et de mutation dans le cluster Kubernetes sont présents et configurés comme prévu. Cette validation est essentielle pour garantir un bon fonctionnement. Il est également important de s’assurer que les webhooks adhèrent aux stratégies de validation et de modification des ressources dans le cluster.
Contributeurs
Cet article est géré par Microsoft. Il a été écrit à l’origine par les contributeurs suivants.
Principaux auteurs :
- Paolo Salvatori | Ingénieur client principal
Autres contributeurs :
- Francis Simy Nazareth | Spécialiste technique senior
Pour afficher les profils LinkedIn non publics, connectez-vous à LinkedIn.