En esta página se explica cómo resolver problemas relacionados con el cifrado de secretos de la capa de aplicación en Google Kubernetes Engine (GKE).
Error al actualizar
Cuando actualizas la configuración del encriptado de secretos de la capa de aplicación, GKE debe volver a escribir todos los objetos Secret del clúster de Kubernetes. GKE lo hace para asegurarse de que todos los secretos estén encriptados con la nueva clave de Cloud KMS o se escriban sin encriptar si es lo que has configurado.
Esta operación de actualización puede fallar por cualquiera de los siguientes motivos:
- El plano de control de Kubernetes no está disponible temporalmente mientras se lleva a cabo la actualización.
- Un
AdmissionWebhook
definido por el usuario impide que GKE pueda actualizar objetos Secret. - La clave de Cloud KMS actualizada o anterior se inhabilita antes de que se complete la operación de actualización.
Hasta que la operación de actualización se complete correctamente, no interactúes con las claves de Cloud KMS actualizadas ni con las anteriores.
Campos de depuración
Los clústeres de GKE nuevos que ejecutan la versión 1.29 y posteriores contienen campos adicionales que te ayudan a monitorizar las actualizaciones de Cluster.DatabaseEncryption
y a recuperarte de los fallos.
Los pasos siguientes solo se aplican a los clústeres en los que el campo DatabaseEncryption.CurrentState
no está vacío. Si el campo CurrentState
está vacío, la función aún no está habilitada en esta versión del clúster.
Se aplican los siguientes límites a estos campos:
- Son de solo salida, lo que significa que no puedes definirlas durante las solicitudes de creación o actualización de clústeres.
Campo CurrentState
Puedes inspeccionar el estado actual de una operación de actualización de DatabaseEncryption
examinando el campo CurrentState
en Cluster.DatabaseEncryption
.
Valor de CurrentState |
Descripción |
---|---|
|
La última operación de actualización se ha completado correctamente. No hace falta que hagas nada más. Puedes deshacerte de las llaves que hayas usado anteriormente. |
|
La actualización está en curso. |
|
Se ha producido un error con la actualización más reciente. No inhabilite ni destruya ninguna clave de Cloud KMS que haya usado anteriormente, ya que es posible que GKE siga usándola.
Consulta el campo |
Campo LastOperationErrors
Cuando falla una operación de actualización, el error subyacente del plano de control de GKE se muestra en el resultado de gcloud container clusters update
.
Los mensajes de error de las dos operaciones de actualización fallidas más recientes también están disponibles en Cluster.DatabaseEncryption.LastOperationErrors
.
Campo DecryptionKeys
La clave de Cloud KMS que se usa para las nuevas operaciones de cifrado se muestra en DatabaseEncryption.KeyName
. Normalmente, esta es la única clave que usa el clúster.
Sin embargo, DatabaseEncryption.DecryptionKeys
contiene claves adicionales que también usa el clúster si se está realizando una actualización o después de un fallo.
Recuperarse de una actualización fallida
Para recuperarte de una actualización fallida, sigue estos pasos:
- Analiza el mensaje de error y soluciona los problemas que se indiquen.
- Vuelve a intentar la solicitud de actualización ejecutando el comando que ha fallado, como
gcloud container clusters update ... --database-encryption-key
. Te recomendamos que vuelvas a intentar enviar la misma solicitud de actualización que enviaste originalmente o que vuelvas a actualizar el clúster al estado anterior. Es posible que GKE no pueda cambiar a otra clave u otro estado de cifrado si no puede leer uno o varios secretos.
En las siguientes secciones se indican los motivos habituales por los que se producen errores.
Error de clave de Cloud KMS
Si el mensaje de error contiene una referencia a una o varias claves de Cloud KMS, examina la configuración de la clave de Cloud KMS para asegurarte de que las versiones de clave correspondientes se pueden usar.
Si el error indica que se ha inhabilitado o destruido una clave de Cloud KMS, vuelve a habilitar la clave o la versión de la clave.
Error: No se puede usar la clave de Cloud KMS configurada para el cifrado a nivel de aplicación
Se produce el siguiente mensaje de error si la cuenta de servicio predeterminada de GKE no puede acceder a la clave de Cloud KMS:
Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).
Para solucionar este problema, vuelve a habilitar la tecla inhabilitada.
No se ha podido actualizar el secreto
Puede producirse el siguiente error si la API de Kubernetes rechaza la solicitud de actualización debido a un webhook de admisión:
error admission webhook WEBHOOK_NAME denied the request
Para solucionar este error, elimina el webhook o modifícalo para que GKE pueda actualizar los secretos en todos los espacios de nombres durante las actualizaciones de claves.
Error: el espacio de nombres está gestionado
Se produce el siguiente error cuando intentas volver a cifrar secretos que están en un espacio de nombres gestionado por GKE, como kube-system
, en un clúster de Autopilot. El mensaje de error es similar al siguiente:
Error from server (Forbidden): secrets "alertmanager" is
forbidden: User cannot patch resource "secrets" in API group "" in the namespace "gke-gmp-system":
GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "gke-gmp-system"
is managed and the request's verb "patch" is denied'
Los clústeres de Autopilot de GKE no te permiten modificar recursos de Kubernetes, incluidos los secretos, en espacios de nombres gestionados.
Para solucionar este error, sigue estos pasos:
- Si usas comandos
kubectl
para volver a cifrar secretos, usa la marca--namespace
para limitar el comando a los espacios de nombres que gestionas. - Si usas un CronJob para volver a cifrar los secretos, impleméntalo solo en los espacios de nombres que gestiones.
Siguientes pasos
Si no encuentras una solución a tu problema en la documentación, consulta la sección Obtener asistencia para obtener más ayuda, incluidos consejos sobre los siguientes temas:
- Abrir un caso de asistencia poniéndose en contacto con el equipo de Atención al Cliente de Cloud.
- Obtener asistencia de la comunidad haciendo preguntas en Stack Overflow
y usando la etiqueta
google-kubernetes-engine
para buscar problemas similares. También puedes unirte al#kubernetes-engine
canal de Slack para obtener más ayuda de la comunidad. - Abrir errores o solicitudes de funciones mediante el seguimiento de problemas público.