En esta página se explica cómo resolver problemas con webhooks problemáticos o no seguros en GKE en AWS.
Si necesitas más ayuda, ponte en contacto con el servicio de atención al cliente de Cloud.Tipos de webhooks problemáticos
Los webhooks de admisión, o webhooks en Kubernetes, son un tipo de controlador de admisión
que se puede usar en clústeres de Kubernetes para validar o mutar solicitudes al plano de control antes de que se conserven. Es habitual que las aplicaciones de terceros usen webhooks que operan en recursos y espacios de nombres críticos para el sistema. Los webhooks configurados incorrectamente pueden afectar al rendimiento y la fiabilidad del plano de control. Por ejemplo, un webhook configurado incorrectamente creado por una aplicación de terceros podría impedir que GKE en AWS cree y modifique recursos en el espacio de nombres kube-system gestionado, lo que podría reducir la funcionalidad del clúster.
Entre los webhooks problemáticos se incluyen los siguientes tipos:
- Webhooks que funcionan, pero no tienen endpoints disponibles. Sigue las instrucciones para comprobar las webhooks sin endpoints disponibles.
Webhooks que se consideran no seguros porque operan en recursos y espacios de nombres críticos del sistema.
Los siguientes webhooks se consideran no seguros:
- Webhooks que interceptan pods y leases en el espacio de nombres
kube-system. - Webhooks que interceptan las concesiones en el espacio de nombres
kube-node-lease. - Webhooks que interceptan recursos de
Nodes,TokenReviews,SubjectAccessReviewsyCertificateSigningRequests.
Sigue las instrucciones para comprobar las webhooks que se consideran no seguras.
- Webhooks que interceptan pods y leases en el espacio de nombres
Webhooks que no tienen endpoints disponibles
Si un webhook no tiene ningún endpoint disponible, el servicio que lo admite tiene uno o varios pods que no se están ejecutando. Para que los endpoints de webhook estén disponibles, sigue las instrucciones para encontrar y solucionar problemas con los pods del servicio que respalda este endpoint de webhook:
Busca los pods de servicio del servicio asociado al webhook. Ejecuta el siguiente comando para describir el servicio:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACEHaz los cambios siguientes:
- SERVICE_NAME con el nombre del Servicio.
- SERVICE_NAMESPACE con el nombre del espacio de nombres.
Si no encuentras el nombre del servicio en el webhook, es posible que el endpoint no esté disponible debido a una discrepancia entre el nombre que aparece en la configuración y el nombre real del servicio. Para solucionar el problema de disponibilidad del endpoint, actualiza el nombre del servicio en la configuración del webhook para que coincida con el objeto de servicio correcto.
Inspecciona los pods de servicio de este servicio. Identifica qué pods no están en ejecución mostrando el Deployment:
kubectl get deployment -n SERVICE_NAMESPACETambién puedes ejecutar el siguiente comando para enumerar los pods:
kubectl get pods -n SERVICE_NAMESPACE -o wideEn el caso de los pods que no se estén ejecutando, inspecciona los registros de los pods para ver por qué no se están ejecutando.
Webhooks que se consideran no seguros
Si un webhook intercepta algún recurso de espacios de nombres gestionados por el sistema, te recomendamos que actualices los webhooks para evitar que intercepten estos recursos.
Inspecciona la configuración del webhook. Ejecuta el siguiente comando
kubectlpara obtener la configuración del webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yamlSustituye CONFIGURATION_NAME por el nombre de la configuración del webhook.
Si este comando no devuelve nada, vuelve a ejecutarlo y sustituye
validatingwebhookconfigurationspormutatingwebhookconfigurations.En la sección
webhooksdel resultado, se muestran uno o varios webhooks.Edita la configuración en función del motivo por el que se considera que el webhook no es seguro:
Excluir los espacios de nombres kube-system y kube-node-lease
Un webhook se considera inseguro si
scopees*o si el ámbito esNamespacedy se cumple alguna de las siguientes condiciones:La condición
operatoresNotInyvaluesomitekube-systemykube-node-lease, como en el siguiente ejemplo: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: 3Asegúrate de que
scopeesté configurado comoNamespacedy no como*para que el webhook solo funcione en espacios de nombres específicos. Asegúrate de que, sioperatoresNotIn,kube-systemykube-node-leasese incluyan envalues.La condición
operatoresInyvaluesincluyekube-systemykube-node-lease, como en el siguiente ejemplo: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`Asegúrate de que
scopeesté configurado comoNamespacedy no como*para que el webhook solo funcione en espacios de nombres específicos. Asegúrate de que, sioperatoresIn,kube-systemykube-node-leaseno se incluyan envalues.
Excluir recursos coincidentes
Un webhook también se considera no seguro si
nodes,tokenreviews,subjectaccessreviewsocertificatesigningrequestsse incluyen en resources, como en el siguiente ejemplo:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3Quita
nodes,tokenreviews,subjectaccessreviewsycertificatesigningrequestsde la sección de recursos.