Esta página le muestra cómo resolver problemas con webhooks problemáticos o inseguros en GKE en AWS.
Si necesita ayuda adicional, comuníquese con 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 modificar solicitudes al plano de control antes de que se persistan. Es común que las aplicaciones de terceros usen webhooks que operan en recursos y espacios de nombres críticos para el sistema. Los webhooks mal configurados pueden afectar el rendimiento y la confiabilidad del plano de control. Por ejemplo, un webhook mal configurado 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
administrado, lo que podría degradar la funcionalidad del clúster.
Los webhooks problemáticos incluyen los siguientes tipos:
- Webhooks que funcionan, pero no tienen puntos de conexión disponibles. Sigue las instrucciones para comprobar los webhooks sin puntos de conexión disponibles .
Webhooks que se consideran inseguros porque operan en recursos y espacios de nombres críticos del sistema.
Los siguientes webhooks se consideran inseguros:
- Webhooks que interceptan pods y arrendamientos en el espacio de nombres
kube-system
. - Webhooks que interceptan arrendamientos en el espacio de nombres
kube-node-lease
. - Webhooks que interceptan recursos
Nodes
,TokenReviews
,SubjectAccessReviews
yCertificateSigningRequests
.
Siga las instrucciones para verificar los webhooks que se consideran inseguros .
- Webhooks que interceptan pods y arrendamientos en el espacio de nombres
Webhooks que no tienen puntos finales disponibles
Si un webhook no tiene puntos de conexión disponibles, el servicio que lo respalda tiene uno o más pods que no se están ejecutando. Para que los puntos de conexión del webhook estén disponibles, siga las instrucciones para encontrar y solucionar los problemas de los pods del servicio que lo respalda:
Busque los pods de servicio del servicio asociado al webhook. Ejecute el siguiente comando para describir el servicio:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
Reemplace lo siguiente:
- SERVICE_NAME con el nombre del Servicio.
- SERVICE_NAMESPACE con el nombre del espacio de nombres.
Si no encuentra el nombre del servicio en el webhook, la indisponibilidad del punto de conexión podría deberse a una discrepancia entre el nombre indicado en la configuración y el nombre real del servicio. Para solucionar la disponibilidad del punto de conexión, actualice el nombre del servicio en la configuración del webhook para que coincida con el objeto de servicio correcto.
Inspeccione los pods que sirven este servicio. Identifique los pods que no se están ejecutando enumerando la implementación:
kubectl get deployment -n SERVICE_NAMESPACE
O bien, ejecute el siguiente comando para enumerar los Pods:
kubectl get pods -n SERVICE_NAMESPACE -o wide
Para cualquier Pod que no se esté ejecutando, inspeccione los registros del Pod para ver por qué no se está ejecutando.
Webhooks que se consideran inseguros
Si un webhook intercepta algún recurso en los espacios de nombres administrados por el sistema, le recomendamos que actualice los webhooks para evitar interceptar estos recursos.
Inspeccione la configuración del webhook. Ejecute el siguiente comando
kubectl
para obtener la configuración del webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
Reemplace CONFIGURATION_NAME con el nombre de la configuración del webhook.
Si este comando no devuelve nada, ejecútelo nuevamente y reemplace
validatingwebhookconfigurations
conmutatingwebhookconfigurations
.En la sección
webhooks
de la salida, se enumeran uno o más webhooks.Edite la configuración, dependiendo del motivo por el cual el webhook se considera inseguro:
Excluir los espacios de nombres kube-system y kube-node-lease
Un webhook se considera inseguro si
scope
es*
, o si el alcance tieneNamespaced
y se cumple alguna de las siguientes condiciones:La condición
operator
esNotIn
yvalues
omitenkube-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úrese de que el
scope
esté configurado comoNamespaced
y no*
para que el webhook solo funcione en espacios de nombres específicos. Asegúrese de que, sioperator
esNotIn
,kube-system
ykube-node-lease
estén incluidos envalues
.La condición
operator
esIn
yvalues
incluyenkube-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úrese de que el
scope
esté configurado comoNamespaced
y no como*
para que el webhook solo funcione en espacios de nombres específicos. Asegúrese de que, sioperator
esIn
,kube-system
ykube-node-lease
no se incluyan envalues
.
Excluir recursos coincidentes
Un webhook también se considera inseguro si
nodes
,tokenreviews
,subjectaccessreviews
ocertificatesigningrequests
se enumeran en recursos, como en el siguiente ejemplo:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
Elimine
nodes
,tokenreviews
,subjectaccessreviews
ycertificatesigningrequests
de la sección de recursos.