Come posso risolvere i problemi che si verificano durante l'integrazione di AWS Secrets Manager con Amazon EKS?

Ultimo aggiornamento: 10/12/2021

Sto cercando di integrare AWS Secrets Manager con Amazon Elastic Kubernetes Service (Amazon EKS), ma ricevo un errore.

Breve descrizione

Puoi ricevere un errore se i pod non entrano nello stato Running (In esecuzione) durante l'integrazione di AWS Secrets Manager con Amazon EKS. Per risolvere questo problema, controlla i registri dai pod del driver Secrets Store Container Storage Interface (CSI) per vedere se alcuni pod non funzionano correttamente.

Risoluzione

Visualizza i pod dei driver CSI di Secrets Store:

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

Visualizza i registri dei pod CSI di Secrets Store:

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

I seguenti registri mostrano che ogni pod funziona correttamente:

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

Nota: i pod che eseguono le stesse azioni vengono visualizzati come voci duplicate.

Se SecretProviderClass in volumeMount non esiste nello stesso spazio dei nomi del pod, viene visualizzato il seguente errore:

* 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

SecretProviderClass deve esistere nello stesso spazio dei nomi del pod.

Il driver CSI di Secrets Store viene implementato come daemonset. Se i pod del driver CSI non sono in esecuzione sul nodo, viene visualizzato il seguente errore:

* 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

Se al nodo è applicato un taint, aggiungi una tolleranza per il taint nel daemonset del driver CSI di Secrets Store.

Controlla se ci sono dei selettori di nodi che impediscono l'esecuzione dei pod del driver CSI di Secrets Store sul nodo:

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

Ottieni le etichette associate ai nodi (worker) nel pod:

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

Confronta gli output dei comandi precedenti per assicurarti che le etichette corrispondano ai valori del selettore di nodi.

Verifica se il driver CSI è stato implementato nel cluster. Tutti i pod devono essere nello stato Running (In esecuzione).

Esegui il comando:

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

-oppure-

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

Output di esempio:

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

L'output precedente mostra che il driver è stato implementato nel cluster. Se secrets-store.csi.k8s.io non viene trovato, reinstalla il driver.

Se i file estratti da SecretProviderClass sono più grandi di 4 mebibyte (MiB), allora potresti ricevere avvisi FailedMount con un messaggio che include grpc: received message larger than max (grpc: ricevuto messaggio troppo grande). È possibile configurare il driver in modo che accetti risposte superiori a 4 MiB. Per accettare risposte più grandi, specifica --max-call-recv-msg-size=dimensione in byte nel container Secrets Store nel daemonset csi-secrets-store.

Nota: sostituisci dimensione in byte con la dimensione che desideri che il driver accetti.

Se hai ancora problemi, controlla il registro eventi in ordine cronologico per vedere se si sono verificati altri errori:

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

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?