Comment résoudre les problèmes liés à l'intégration d'AWS Secrets Manager à Amazon EKS ?

Date de la dernière mise à jour : 10/12/2021

J'essaie d'intégrer AWS Secrets Manager à Amazon Elastic Kubernetes Service (Amazon EKS), mais je reçois une erreur.

Brève description

Vous pouvez obtenir une erreur si vos pods ne parviennent pas à passer en état d'exécution lorsque vous intégrez AWS Secrets Manager à Amazon EKS. Pour résoudre ce problème, consultez les journaux des pods de pilote CSI (Secrets Store Container Storage Interface) pour vérifier si certains pods ne fonctionnent pas.

Solution

Affichez les pods de pilotes CSI Secrets Store :

kubectl --namespace=kube-system get pods -l "app=secrets-store-csi-driver"

Affichez les journaux des pods CSI Secrets Store :

kubectl --namespace=kube-system logs -f -l "app=secrets-store-csi-driver"

Les journaux suivants montrent que chaque pod fonctionne correctement :

I1120 20:21:19.135834       1 secrets-store.go:74] Driver: secrets-store.csi.k8s.io
I1120 20:21:19.135857       1 secrets-store.go:75] Version: v0.2.0, BuildTime: 2021-08-12-18:55
I1120 20:21:19.135868       1 secrets-store.go:76] Provider Volume Path: /etc/kubernetes/secrets-store-csi-providers
I1120 20:21:19.135874       1 secrets-store.go:77] GRPC supported providers will be dynamically created
I1120 20:21:19.135895       1 driver.go:80] "Enabling controller service capability" capability="CREATE_DELETE_VOLUME"
I1120 20:21:19.135912       1 driver.go:90] "Enabling volume access mode" mode="SINGLE_NODE_READER_ONLY"
I1120 20:21:19.135922       1 driver.go:90] "Enabling volume access mode" mode="MULTI_NODE_READER_ONLY"
I1120 20:21:19.135938       1 main.go:172] starting manager
I1120 20:21:19.136210       1 server.go:111] Listening for connections on address: //csi/csi.sock
I1120 20:21:18.956092       1 exporter.go:33] metrics backend: prometheus

Remarque : les pods qui effectuent les mêmes actions apparaissent comme des entrées en double.

Si la classe SecretProviderClass dans volumeMount n'existe pas dans le même espace de noms que le pod, vous recevez l'erreur suivante :

* Warning  FailedMount  3s (x4 over 6s)  kubelet, kind-control-plane  MountVolume.SetUp failed for volume "secrets-store-inline" : rpc error: code = Unknown desc = failed to get secretproviderclass default/aws, error: secretproviderclasses.secrets-store.csi.x-k8s.io "aws" not found

La classe SecretProviderClass doit exister dans le même espace de noms que le pod.

Le pilote CSI Secrets Store est déployé en tant que daemonset. Si les pods du pilote CSI ne sont pas exécutés sur le nœud, vous recevez l'erreur suivante :

* Warning  FailedMount  1s (x4 over 4s)  kubelet, kind-control-plane  MountVolume.SetUp failed for volume "secrets-store-inline" : kubernetes.io/csi: mounter.SetUpAt failed to get CSI client: driver name secrets-store.csi.k8s.io not found in the list of registered CSI drivers

Si le nœud est rejeté, ajoutez une tolérance pour le rejet dans le daemonset du pilote CSI Secrets Store.

Vérifiez s'il existe des sélecteurs de nœud empêchant les pods du pilote CSI Secrets Store de s'exécuter sur le nœud :

kubectl --namespace=kube-system describe pods -l "app=secrets-store-csi-driver" | grep Node-Selectors*

Obtenez les étiquettes qui sont associées aux composants master dans votre pod :

kubectl get node --selector=kubernetes.io/os=linux

Comparez les sorties des commandes précédentes pour vous assurer que les étiquettes correspondent aux valeurs du sélecteur de nœuds.

Vérifiez si le pilote CSI a été déployé sur le cluster. Tous les pods doivent être dans l'état En cours d'exécution.

Exécutez la commande suivante :

kubectl get pods -l app=secrets-store-csi-driver -n kube-system

-ou-

kubectl get daemonset csi-secrets-store-secrets-store-csi-driver -n kube-system

Exemple de sortie :

kubectl get csidriver
NAME                       ATTACHREQUIRED   PODINFOONMOUNT   MODES       AGE
secrets-store.csi.k8s.io   false            true             Ephemeral   110m

La sortie précédente indique que le pilote a été déployé sur le cluster. Si le pilote secrets-store.csi.k8s.io n'est pas trouvé, réinstallez le pilote.

Si les fichiers que la classe SecretProviderClass extrait sont d'une taille supérieure à 4 megioctets (MiB), vous risquez de recevoir des avertissements FailedMount avec un message comprenant, grpc: received message larger than max. Vous pouvez configurer le pilote pour qu'il accepte les réponses supérieures à 4 MiB. Pour accepter des réponses plus grandes, spécifiez --max-call-recv-msg-size=taille en octets au conteneur Secrets Store dans le daemonset csi-secrets-store.

Remarque : remplacez la taille en octets par la taille que vous souhaitez que le pilote accepte.

Si vous rencontrez toujours des problèmes, examinez les événements du journal dans l'ordre chronologique pour voir si d'autres échecs se sont produits :

kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?