En esta página, se muestra cómo resolver problemas relacionados con la encriptación de Secrets de la capa de aplicación en Google Kubernetes Engine (GKE).
Actualización con errores
Cuando actualizas la configuración de encriptación de la encriptación de Secrets de la capa de aplicación, GKE debe reescribir todos los objetos Secret en el clúster de Kubernetes. GKE hace esto para garantizar que la clave de Cloud KMS nueva encripte todos los Secrets o que se escriban sin encriptación si eso es lo que configuras.
Esta operación de actualización puede fallar debido a cualquiera de las siguientes condiciones:
- El plano de control de Kubernetes no está disponible temporalmente mientras la actualización está en curso.
- Un
AdmissionWebhook
definido por el usuario evita que GKE pueda actualizar los 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 realice de forma correcta, no interactúes con las claves de Cloud KMS actualizadas o 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 realizar un seguimiento de las actualizaciones de Cluster.DatabaseEncryption
y te ayudan a recuperarte de fallas.
Los siguientes pasos 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 solo de salida, lo que significa que no puedes configurarlos durante las solicitudes de creación o actualización de clústeres.
Campo CurrentState
Para inspeccionar el estado actual de una operación de actualización DatabaseEncryption
,
puedes examinar el campo CurrentState
en Cluster.DatabaseEncryption
.
Valor de CurrentState |
Descripción |
---|---|
|
La última operación de actualización se realizó correctamente. No necesitas realizar ninguna otra acción. Puedes borrar cualquier clave que se haya usado antes. |
|
La actualización está en curso. |
|
Se produjo un error con la actualización más reciente. No inhabilites ni destruyas ninguna clave de Cloud KMS que se haya usado antes, ya que es posible que GKE aún las use.
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 con errores más recientes también están
disponibles en Cluster.DatabaseEncryption.LastOperationErrors
.
Campo DecryptionKeys
La clave de Cloud KMS que se usa para las operaciones de encriptación nuevas se muestra en
DatabaseEncryption.KeyName
. Por lo general, esta es la única clave que usa el clúster.
Sin embargo, DatabaseEncryption.DecryptionKeys
contiene claves adicionales que el
clúster también usa si hay una actualización en curso o después de una falla.
Recupérate de una actualización con errores
Para recuperarte de una actualización con errores, haz lo siguiente:
- Examina el mensaje de error y soluciona cualquier problema indicado.
- Vuelve a intentar la solicitud de actualización a través de la ejecución del comando con errores, como
gcloud container clusters update ... --database-encryption-key
. Te recomendamos que vuelvas a intentarlo con la misma solicitud de actualización que emitiste originalmente o actualices el clúster al estado anterior. Es posible que GKE no pueda hacer la transición a una clave o un estado de encriptación diferentes si no puede leer uno o más objetos Secret.
En las siguientes secciones, se enumeran los motivos comunes de los errores.
Error de clave de Cloud KMS
Si el mensaje de error contiene una referencia a una o más claves de Cloud KMS, examina la configuración de tu clave de Cloud KMS para asegurarte de que las versiones de clave relevantes se puedan usar.
Si el error indica que se inhabilitó o destruyó una clave de Cloud KMS, vuelve a habilitar la clave o la versión de clave.
Error: No se puede usar la clave de Cloud KMS configurada para la encriptación a nivel de la aplicación
El siguiente mensaje de error se produce 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 resolver este problema, vuelve a habilitar la clave inhabilitada.
No se pudo actualizar el Secret
El siguiente error puede ocurrir si la API de Kubernetes rechazó la solicitud de actualización debido a un webhook de admisión:
error admission webhook WEBHOOK_NAME denied the request
Para resolver este error, quita el webhook o modifícalo para que GKE pueda actualizar los Secrets en todos los espacios de nombres durante las actualizaciones de claves.
Error: El espacio de nombres está administrado
El siguiente error ocurre cuando intentas volver a encriptar secretos que se encuentran en un espacio de nombres administrado 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 GKE Autopilot no te permiten modificar recursos de Kubernetes, incluidos los secretos, en espacios de nombres administrados.
Para resolver este error, haz lo siguiente:
- Si usas comandos
kubectl
para volver a encriptar secretos, usa la marca--namespace
para limitar el alcance del comando a los espacios de nombres que administras. - Si usas un CronJob para volver a encriptar objetos Secret, impleméntalo solo en los espacios de nombres que administres.
¿Qué sigue?
Si no encuentras una solución a tu problema en la documentación, consulta Obtener asistencia para obtener más ayuda, como asesoramiento en los siguientes temas:
- Comunicarse con Atención al cliente de Cloud para abrir un caso de asistencia.
- Hacer preguntas en StackOverflow para obtener asistencia de
la comunidad y usar la etiqueta
google-kubernetes-engine
para buscar problemas similares. También puedes unirte al canal de Slack#kubernetes-engine
para obtener más Asistencia de la comunidad. - Abrir errores o solicitudes de funciones con la herramienta de seguimiento de errores pública.