Résoudre les problèmes liés au webhook GKE sur Azure
Cette page explique comment résoudre les problèmes liés aux webhooks problématiques ou non sécurisés dans GKE sur Azure.
Si vous avez besoin d'aide supplémentaire, contactez l'assistance Cloud Customer Care.Types de webhooks problématiques
Les webhooks d'admission, ou webhooks dans Kubernetes, sont un type de contrôleur d'admission qui peuvent être utilisés dans les clusters Kubernetes pour valider ou muter des requêtes adressées au plan de contrôle avant la persistance d'une requête. Il est courant que les applications tierces utilisent des webhooks qui fonctionnent sur des ressources et des espaces de noms critiques pour le système. Des webhooks mal configurés peuvent affecter les performances et la fiabilité du plan de contrôle. Par exemple, un webhook mal configuré
créé par une application tierce pourrait empêcher GKE sur Azure
en créant et en modifiant des ressources dans l'espace de noms kube-system
géré, ce qui risque de dégrader les fonctionnalités du cluster.
Les webhooks problématiques incluent les types suivants :
- Webhooks qui fonctionnent, mais qui ne disposent d'aucun point de terminaison. Suivez les des instructions pour vérifier les webhooks sans points de terminaison disponibles.
Webhooks considérés comme non sécurisés, car ils fonctionnent sur des ressources et des espaces de noms critiques pour le système.
Les webhooks suivants sont considérés comme non sécurisés :
- Webhooks qui interceptent les pods et les baux dans l'espace de noms
kube-system
. - Webhooks interceptant les baux dans l'espace de noms
kube-node-lease
. - Les webhooks qui interceptent les ressources
Nodes
TokenReviews
SubjectAccessReviews
, etCertificateSigningRequests
.
Suivez les instructions pour vérifier les webhooks considérés comme non sécurisés.
- Webhooks qui interceptent les pods et les baux dans l'espace de noms
Webhooks sans points de terminaison disponibles
Si un webhook ne dispose d'aucun point de terminaison disponible, le service qui sauvegarde le point de terminaison du webhook possède un ou plusieurs pods qui ne sont pas en cours d'exécution. Pour rendre les points de terminaison du webhook disponibles, suivez les instructions afin de rechercher et de dépanner les pods du service qui sauvegardent le point de terminaison du webhook :
Recherchez les pods de diffusion pour le service associé au webhook. Exécutez la commande suivante pour décrire le service :
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
Remplacez les éléments suivants :
- SERVICE_NAME par le nom du service.
- SERVICE_NAMESPACE par le nom de l'espace de noms.
Si le nom du service est répertorié dans le webhook, le point de terminaison indisponible peut être dû à une incohérence entre le nom répertorié dans la configuration et le nom réel du service. Pour corriger la disponibilité du point de terminaison, mettez à jour le nom du service dans la configuration du webhook afin qu'il corresponde à l'objet de service approprié.
Inspectez les pods actifs pour ce service. Identifier les pods qui ne s'exécutent pas en affichant le déploiement:
kubectl get deployment -n SERVICE_NAMESPACE
Vous pouvez également exécuter la commande suivante pour afficher la liste des pods :
kubectl get pods -n SERVICE_NAMESPACE -o wide
Pour les pods qui ne sont pas en cours d'exécution, inspectez les journaux du pod pour déterminer pourquoi il ne s'exécute pas.
Webhooks considérés comme non sécurisés
Si un webhook intercepte des ressources dans des espaces de noms gérés par le système, nous vous recommandons de mettre à jour les webhooks pour éviter leur interception.
Examinez la configuration du webhook. Exécutez la commande
kubectl
suivante pour obtenir la configuration du webhook :kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
Remplacez CONFIGURATION_NAME par le nom de la configuration du webhook.
Si cette commande ne renvoie rien, exécutez-la à nouveau en remplaçant
validatingwebhookconfigurations
parmutatingwebhookconfigurations
.Dans la section
webhooks
de la sortie, un ou plusieurs webhooks sont listés.Modifiez la configuration en fonction de la raison pour laquelle le webhook est considéré non sécurisé:
Exclure les espaces de noms kube-system et kube-node-lease
Un webhook est considéré comme non sécurisé si
scope
est*
ou si le champ d'application estNamespaced
et que l'une des conditions suivantes est remplie :La condition
operator
estNotIn
, etvalues
ometkube-system
etkube-node-lease
, comme dans l'exemple suivant :webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system # add 'kube-system' and 'kube-node-lease' if `NotIn` objectSelector: {} rules: - apiGroups: ... scope: '*' # 'Namespaced' sideEffects: None timeoutSeconds: 3
Assurez-vous que
scope
est défini surNamespaced
, et non sur*
, afin que le webhook ne fonctionne que dans des espaces de noms spécifiques. Assurez-vous que sioperator
estNotIn
,kube-system
etkube-node-lease
sont inclus dansvalues
.La condition
operator
est définie surIn
, etvalues
inclutkube-system
etkube-node-lease
, comme dans l'exemple suivant :namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system # remove as operator is `In` - kube-node-lease # remove as operator is `In`
Assurez-vous que
scope
est défini surNamespaced
, et non sur*
, afin que le webhook ne fonctionne que dans des espaces de noms spécifiques. Assurez-vous que sioperator
est défini surIn
,kube-system
etkube-node-lease
ne sont pas inclus dansvalues
.
Exclure les ressources correspondantes
Un webhook est également considéré comme non sécurisé si
nodes
,tokenreviews
,subjectaccessreviews
oucertificatesigningrequests
sont répertoriés sous ressources, comme dans l'exemple suivant:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
Supprimez
nodes
,tokenreviews
,subjectaccessreviews
etcertificatesigningrequests
de la section des ressources.