I webhook di ammissione o webhooks in Kubernetes sono un tipo di controller di ammissione che possono essere utilizzati nei cluster Kubernetes per convalidare o modificare le richieste al control plane prima che una richiesta venga mantenuta. È normale che le applicazioni di terze parti utilizzino webhook che operano su risorse e spazi dei nomi critici per il sistema. I webhook configurati in modo errato possono influire sulle prestazioni e sull'affidabilità del piano di controllo. Ad esempio, un webhook configurato in modo errato creato da un'applicazione di terze parti potrebbe impedire a GKE di creare e modificare le risorse nello spazio dei nomi kube-system
gestito, il che potrebbe ridurre la funzionalità del cluster.
Google Kubernetes Engine (GKE) monitora i tuoi cluster e utilizza il servizio di consigli per fornire indicazioni su come ottimizzare l'utilizzo della piattaforma. Per aiutarti ad assicurarti che il tuo cluster rimanga stabile e con un buon rendimento, consulta i consigli di GKE per i seguenti scenari:
- Webhook che funzionano, ma non hanno endpoint disponibili.
- Webhook considerati non sicuri in quanto operano su risorse e spazi dei nomi fondamentali per il sistema.
Queste indicazioni ti forniscono le istruzioni per controllare i webhook potenzialmente configurati in modo errato e, se necessario, aggiornarli.
Per scoprire di più su come gestire gli approfondimenti e i consigli di Recommenders, consulta l'articolo Ottimizzare l'utilizzo di GKE con approfondimenti e consigli.
Identificare i webhook configurati in modo errato che potrebbero influire sul cluster
Per ottenere informazioni che identificano i webhook che potrebbero influire sul rendimento e sulla stabilità del tuo cluster, segui le istruzioni per visualizzare approfondimenti e consigli. Puoi ottenere approfondimenti nei seguenti modi:
- Utilizza la console Google Cloud.
- Utilizza Google Cloud CLI o l'API Recommender filtrando con i sottotipi
K8S_ADMISSION_WEBHOOK_UNSAFE
eK8S_ADMISSION_WEBHOOK_UNAVAILABLE
.
Dopo aver identificato i webhook tramite gli approfondimenti, segui le istruzioni per risolvere i problemi relativi ai webhook rilevati.
Quando GKE rileva webhook configurati in modo errato
GKE genera un'informazione e un consiglio se uno dei seguenti criteri è vero per un cluster:
K8S_ADMISSION_WEBHOOK_UNAVAILABLE
: il cluster GKE ha uno o più webhook che non segnalano endpoint disponibili. Segui le istruzioni per controllare i webhook che non segnalano endpoint disponibili.K8S_ADMISSION_WEBHOOK_UNSAFE
: il cluster GKE ha uno o più webhook considerati non sicuri in base alle risorse che intercettano. Segui le istruzioni per controllare gli webhook considerati non sicuri. I seguenti webhook sono considerati non sicuri:- Webhook che intercettano le risorse, inclusi i pod e i lease, nello spazio dei nomi
kube-system
. - Webhook che intercettano i lease nello spazio dei nomi
kube-node-lease
. - Webhook che intercettano le risorse di sistema con ambito cluster, tra cui
Nodes
,TokenReviews
,SubjectAccessReviews
, eCertificateSigningRequests
.
- Webhook che intercettano le risorse, inclusi i pod e i lease, nello spazio dei nomi
Risolvere i problemi relativi ai webhook rilevati
Le sezioni seguenti forniscono istruzioni per la risoluzione dei problemi relativi ai webhook rilevati da GKE come potenzialmente configurati in modo errato.
Dopo aver implementato le istruzioni e aver configurato correttamente gli webhook, il consiglio viene risolto entro 24 ore e non viene più visualizzato nella console. Se sono trascorse meno di 24 ore dall'implementazione delle indicazioni del consiglio, puoi contrassegnarlo come risolto. Se non vuoi implementare il consiglio, puoi ignorarlo.
Webhook che non segnalano endpoint disponibili
Se un webhook segnala che non ha endpoint disponibili, il servizio che supporta l'endpoint dell'webhook ha uno o più pod non in esecuzione. Per rendere disponibili gli endpoint webhook, segui le istruzioni per trovare e risolvere i problemi dei pod del servizio che supporta questo endpoint webhook:
Visualizza approfondimenti e consigli, scegliendo un approfondimento alla volta per la risoluzione dei problemi. GKE genera un insight per cluster, che elenca uno o più webhook con un endpoint non funzionante che deve essere esaminato. Per ciascuno di questi webhook, l'approfondimento indica anche il nome del servizio, l'endpoint non funzionante e l'ultima volta che l'endpoint è stato chiamato.
Trova i pod di pubblicazione per il servizio associato all'webhook:
Console
Nel riquadro della barra laterale dell'approfondimento, consulta la tabella degli webhook configurati in modo errato. Fai clic sul nome del servizio.
kubectl
Esegui il seguente comando per descrivere il servizio:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
Sostituisci SERVICE_NAME e SERVICE_NAMESPACE con il nome e lo spazio dei nomi del servizio, rispettivamente.
Se non riesci a trovare il nome del servizio elencato nell'webhook, l'endpoint non disponibile potrebbe essere causato da una mancata corrispondenza tra il nome elencato nella configurazione e il nome effettivo del servizio. Per correggere la disponibilità dell'endpoint, aggiorna il nome del servizio nella configurazione dell'webhook in modo che corrisponda all'oggetto Service corretto.
Controlla i pod di pubblicazione per questo servizio:
Console
In Pod di pubblicazione in Dettagli servizio, consulta l'elenco dei pod che supportano questo servizio.
kubectl
Identifica i pod non in esecuzione elencando il deployment o i pod:
kubectl get deployment -n SERVICE_NAMESPACE
In alternativa, esegui questo comando:
kubectl get pods -n SERVICE_NAMESPACE -o wide
Per i pod non in esecuzione, controlla i relativi log per capire perché non sono in esecuzione. Per istruzioni sui problemi comuni relativi ai pod, consulta Risolvere i problemi relativi ai workload di cui è stato eseguito il deployment.
Webhook considerati non sicuri
Se un webhook intercetta risorse negli spazi dei nomi gestiti dal sistema o determinati tipi di risorse, GKE lo considera non sicuro e consiglia di aggiornare i webhook per evitare di intercettare queste risorse.
- Segui le istruzioni per visualizzare approfondimenti e consigli, scegliendo un approfondimento alla volta per la risoluzione dei problemi. GKE genera solo un insight per cluster, che elenca una o più configurazioni di webhook, ciascuna delle quali elenca uno o più webhook. Per ogni configurazione webhook elencata, l'approfondimento indica il motivo per cui la configurazione è stata segnalata.
Controlla la configurazione dell'webhook:
Console
Visualizza la tabella nel riquadro della barra laterale dell'approfondimento. In ogni riga è riportato il nome della configurazione del webhook e il motivo per cui è stata segnalata.
Per ispezionare ogni configurazione, fai clic sul nome per passare a questa configurazione nella dashboard del Browser di oggetti GKE.
kubectl
Esegui il seguente comando
kubectl
per ottenere la configurazione del webhook, sostituendo CONFIGURATION_NAME con il nome della configurazione del webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
Se questo comando non restituisce nulla, eseguilo di nuovo sostituendo
validatingwebhookconfigurations
conmutatingwebhookconfigurations
.Nella sezione
webhooks
sono elencati uno o più webhook.Modifica la configurazione, a seconda del motivo per cui il webhook è stato segnalato:
Escludi gli spazi dei nomi kube-system e kube-node-lease
Un webhook viene segnalato se
scope
è*
. In alternativa, un webhook viene segnalato se l'ambito èNamespaced
e una delle seguenti condizioni è vera:La condizione
operator
èNotIn
evalues
omettekube-system
ekube-node-lease
, come nell'esempio seguente:webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system objectSelector: {} rules: - apiGroups: ... scope: '*' sideEffects: None timeoutSeconds: 3
Assicurati di impostare
scope
suNamespaced
, non su*
, in modo che il webhook funzioni solo in spazi dei nomi specifici. Inoltre, assicurati che seoperator
èNotIn
, includakube-system
ekube-node-lease
invalues
(in questo esempio, conblue-system
).La condizione
operator
èIn
evalues
includekube-system
ekube-node-lease
, come nel seguente esempio:namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system - kube-node-lease
Assicurati di impostare
scope
suNamespaced
, non su*
, in modo che il webhook operi solo in spazi dei nomi specifici. Assicurati che seoperator
èIn
, non includakube-system
ekube-node-lease
invalues
. In questo esempio, soloblue-system
deve trovarsi invalues
perchéoperator
èIn
.
Escludere le risorse corrispondenti
Un webhook viene segnalato anche se
nodes
,tokenreviews
,subjectaccessreviews
ocertificatesigningrequests
sono elencati nelle risorse, come nell'esempio seguente:- admissionReviewVersions: ... resources: - 'pods' - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
Rimuovi
nodes
,tokenreviews
,subjectaccessreviews
ecertificatesigningrequests
dalla sezione delle risorse. Puoi conservarepods
inresources
.