Cette page explique comment résoudre les problèmes liés au chiffrement des secrets au niveau de la couche d'application dans Google Kubernetes Engine (GKE).
Échec de mise à jour
Lorsque vous mettez à jour la configuration de chiffrement du chiffrement des secrets au niveau de la couche application, GKE doit réécrire tous les objets Secret dans le cluster Kubernetes. GKE s'assure ainsi que tous les secrets sont chiffrés par la nouvelle clé Cloud KMS ou qu'ils sont écrits non chiffrés si vous choisissez cette configuration.
Cette opération de mise à jour peut échouer pour l'une des raisons suivantes :
- Le plan de contrôle Kubernetes est temporairement indisponible pendant la mise à jour.
- Un paramètre
AdmissionWebhook
défini par l'utilisateur empêche GKE de mettre à jour les objets Secret. - La clé Cloud KMS mise à jour ou précédente est désactivée avant la fin de l'opération de mise à jour.
Tant que l'opération de mise à jour n'est pas terminée, n'interagissez pas avec les clés Cloud KMS mises à jour ni avec les clés Cloud KMS précédentes.
Champs de débogage
Les nouveaux clusters GKE exécutant la version 1.29 ou ultérieure contiennent des champs supplémentaires qui vous aident à suivre les mises à jour de Cluster.DatabaseEncryption
et vous aident à récupérer après échec.
Les étapes suivantes ne s'appliquent qu'aux clusters dans lesquels le champ DatabaseEncryption.CurrentState
n'est pas vide. Si le champ CurrentState
est vide, la fonctionnalité n'est pas encore activée sur cette version du cluster.
Les limites suivantes s'appliquent à ces champs :
- Elles sont exclusivement en sortie, ce qui signifie que vous ne pouvez pas les définir lors des requêtes de création ou de mise à jour du cluster.
Champ CurrentState
Vous pouvez inspecter l'état actuel d'une opération de mise à jour DatabaseEncryption
en examinant le champ CurrentState
dans Cluster.DatabaseEncryption
.
Valeur de CurrentState |
Description |
---|---|
|
La dernière opération de mise à jour a réussi. Aucune autre action de votre part n'est requise. Vous pouvez supprimer toutes les clés précédemment utilisées. |
|
La mise à jour est en cours. |
|
Une erreur s'est produite lors de la mise à jour la plus récente. Ne désactivez ou ne détruisez pas les clés Cloud KMS précédemment utilisées, car elles pourraient encore être utilisées par GKE.
Reportez-vous au champ |
Champ LastOperationErrors
Lorsqu'une opération de mise à jour échoue, l'erreur sous-jacente du plan de contrôle GKE s'affiche dans le résultat de gcloud container clusters update
.
Les messages d'erreur des deux dernières opérations de mise à jour ayant échoué sont également disponibles dans Cluster.DatabaseEncryption.LastOperationErrors
.
Champ DecryptionKeys
La clé Cloud KMS utilisée pour les nouvelles opérations de chiffrement est affichée dans DatabaseEncryption.KeyName
. Il s'agit généralement de la seule clé utilisée par le cluster.
Toutefois, DatabaseEncryption.DecryptionKeys
contient des clés supplémentaires qui sont également utilisées par le cluster si une mise à jour est en cours ou après un échec.
Récupération après un échec de mise à jour
Pour récupérer un échec de mise à jour, procédez comme suit :
- Examinez le message d'erreur et corrigez les problèmes indiqués.
- Effectuez une nouvelle tentative de mise à jour en exécutant la commande ayant échoué, par exemple
gcloud container clusters update ... --database-encryption-key
. Nous vous recommandons d'effectuer une nouvelle tentative avec la même requête de mise à jour que celle que vous avez émise à l'origine ou de rétablir le cluster à son état précédent. GKE peut ne pas être en mesure de passer à un autre état de clé ou de chiffrement s'il ne parvient pas lire un ou plusieurs secrets.
Les sections suivantes répertorient les raisons les plus courantes des erreurs.
Erreur de clé Cloud KMS
Si le message d'erreur fait référence à une ou plusieurs clés Cloud KMS, examinez la configuration de vos clés Cloud KMS pour vous assurer que les versions de clé appropriées sont utilisables.
Si l'erreur indique qu'une clé Cloud KMS a été désactivée ou détruite, réactivez la clé ou la version de clé.
Erreur: Impossible d'utiliser la clé CloudKMS configurée pour le chiffrement au niveau de l'application
Le message d'erreur suivant se produit si le compte de service par défaut de GKE ne peut pas accéder à la clé Cloud KMS:
Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).
Pour résoudre ce problème, réactivez la clé désactivée.
Impossible de mettre à jour le secret
L'erreur suivante peut se produire si l'API Kubernetes a refusé la requête de mise à jour en raison d'un webhook d'admission :
error admission webhook WEBHOOK_NAME denied the request
Pour résoudre cette erreur, supprimez le webhook ou modifiez-le afin que GKE puisse mettre à jour les secrets dans tous les espaces de noms lors des mises à jour de clés.
Erreur: l'espace de noms est géré
L'erreur suivante se produit lorsque vous essayez de chiffrer à nouveau des secrets situés dans un espace de noms géré par GKE, tel que kube-system
, dans un cluster Autopilot. Le message d'erreur ressemble à ceci :
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'
Les clusters GKE Autopilot ne vous permettent pas de modifier les ressources Kubernetes, y compris les secrets, dans les espaces de noms gérés.
Pour résoudre cette erreur, procédez comme suit :
- Si vous utilisez des commandes
kubectl
pour réencoder des secrets, utilisez l'option--namespace
pour limiter la commande aux espaces de noms que vous gérez. - Si vous utilisez une tâche Cron pour chiffrer à nouveau des secrets, ne la déployez que dans les espaces de noms que vous gérez.
Étapes suivantes
Si vous ne trouvez pas de solution à votre problème dans la documentation, consultez la section Obtenir de l'aide pour obtenir une aide supplémentaire, y compris des conseils sur les sujets suivants:
- En ouvrant une demande d'assistance en contactant l'assistance client Cloud.
- Obtenir de l'aide de la communauté en posant des questions sur StackOverflow et en utilisant la balise
google-kubernetes-engine
pour rechercher des problèmes similaires. Vous pouvez également rejoindre le canal Slack#kubernetes-engine
pour obtenir plus d'aide de la communauté. - Signaler des bugs ou des demandes de fonctionnalités à l'aide de l'outil public de suivi des problèmes