¿Cómo puedo solucionar problemas de integración de AWS Secrets Manager con Amazon EKS?

Última actualización: 10/12/2021

Estoy intentando integrar AWS Secrets Manager con Amazon Elastic Kubernetes Service (Amazon EKS), pero recibo un error.

Descripción corta

Puede obtener un error si los pods no entran en estado de ejecución al integrar AWS Secrets Manager con Amazon EKS. Para resolver este problema, compruebe los registros de los pods del Controlador de la interfaz de almacenamiento de contenedores del almacén de secretos (CSI) para averiguar si algún pod no está funcionando.

Resolución

Visualice los pods del controlador CSI del almacén de secretos:

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

Visualice los registros de los pods CSI del almacén de secretos:

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

Los siguientes registros muestran que cada pod esta funcionando bien:

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: Los pods que realizan las mismas acciones aparecen como entradas duplicadas.

Si la SecretProviderClass en el volumeMount no existe en el mismo espacio de nombres que el pod, recibirá el siguiente error:

* 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 SecretProviderClass debe existir en el mismo espacio de nombres que el pod.

El controlador CSI del almacén de secretos se implementa como un daemonset. Si los pods del controlador CSI no se están ejecutando en el nodo, recibirá el siguiente error:

* 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 el nodo está contaminado, agregue una tolerancia para la contaminación en el daemonset del controlador CSI del almacén de secretos.

Compruebe si hay algún selector de nodo que impida que los pods del controlador CSI del almacén de secretos se ejecuten en el nodo:

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

Obtenga las etiquetas asociadas a los nodos de trabajo en el pod:

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

Compare las salidas de los comandos anteriores para asegurarse de que las etiquetas coincidan con los valores del selector de nodos.

Compruebe si el controlador CSI se ha implementado en el clúster. Todos los pods deben estar en estado de ejecución.

Ejecute el siguiente comando:

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

-o bien-

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

Salida de ejemplo:

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

La salida anterior muestra que el controlador se implementó en el clúster. Si no se encuentra secrets-store.csi.k8s.io, vuelva a instalar el controlador.

Si los archivos que la SecretProviderClass ha extraído son mayores de 4 mebibytes (MiB), es posible que reciba advertencias FailedMount con un mensaje que incluya, grpc: received message larger than max (grpc: mensaje recibido de mayor tamaño que el máximo). Puede configurar el controlador para que acepte respuestas de más de 4 MiB. Para aceptar respuestas más grandes, especifique --max-call-recv-msg-size=size in bytes en el contenedor de almacenamiento de secretos en el daemonset csi-secrets-store.

Nota: Reemplace size in bytest (tamaño en bytes) por el tamaño que desea que acepte el controlador.

Si sigue teniendo problemas, revise los eventos de registro en orden cronológico para ver si se han producido otros errores:

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

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?