En esta página se explica cómo solucionar problemas con webhooks problemáticos o no seguros en Google Distributed 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 Google Distributed Cloud 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
,SubjectAccessReviews
yCertificateSigningRequests
.
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 respalda 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_NAMESPACE
Haz 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_NAMESPACE
También puedes ejecutar el siguiente comando para enumerar los pods:
kubectl get pods -n SERVICE_NAMESPACE -o wide
En 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
kubectl
para obtener la configuración del webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
Sustituye CONFIGURATION_NAME por el nombre de la configuración del webhook.
Si este comando no devuelve nada, vuelve a ejecutarlo y sustituye
validatingwebhookconfigurations
pormutatingwebhookconfigurations
.En la sección
webhooks
del 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
scope
es*
o si el ámbito esNamespaced
y se cumple alguna de las siguientes condiciones:La condición
operator
esNotIn
yvalues
omitekube-system
ykube-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: 3
Asegúrate de que
scope
esté configurado comoNamespaced
y no como*
para que el webhook solo funcione en espacios de nombres específicos. Asegúrate de que, sioperator
esNotIn
,kube-system
ykube-node-lease
se incluyan envalues
.La condición
operator
esIn
yvalues
incluyekube-system
ykube-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
scope
esté configurado comoNamespaced
y no como*
para que el webhook solo funcione en espacios de nombres específicos. Asegúrate de que, sioperator
esIn
,kube-system
ykube-node-lease
no se incluyan envalues
.
Excluir recursos coincidentes
Un webhook también se considera no seguro si
nodes
,tokenreviews
,subjectaccessreviews
ocertificatesigningrequests
se incluyen en resources, como en el siguiente ejemplo:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
Quita
nodes
,tokenreviews
,subjectaccessreviews
ycertificatesigningrequests
de la sección de recursos.
Siguientes pasos
Si necesitas más ayuda, ponte en contacto con el servicio de atención al cliente de Cloud. También puedes consultar la sección Obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:
- Requisitos para abrir un caso de asistencia.
- Herramientas para ayudarte a solucionar problemas, como la configuración de tu entorno, los registros y las métricas.
- Componentes admitidos.