Como soluciono problemas ao integrar o AWS Secrets Manager com o Amazon EKS?

Ultima atualização: 10/12/2021

Estou tentando integrar o AWS Secrets Manager ao Amazon Elastic Kubernetes Service (Amazon EKS), mas estou recebendo um erro.

Breve descrição

Você pode receber um erro se os pods não entrarem no estado Em execução ao integrar o AWS Secrets Manager ao Amazon EKS. Para resolver esse problema, verifique os logs dos pods do driver CSI (Interface de armazenamento de contêiner) da Secrets Store para ver se algum pod não está funcionando.

Resolução

Exibir os pods do driver CSI da Secrets Store:

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

Exibir os logs dos pods CSI da Secrets Store:

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

Os registros a seguir mostram que cada pod está funcionando bem:

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

Observação: os pods que executam as mesmas ações aparecem como entradas duplicadas.

Se a classe SecretProviderClass no volumeMount não existir no mesmo namespace que o pod, você receberá o seguinte erro:

* 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

A classe SecretProviderClass deve existir no mesmo namespace que o pod.

O driver CSI da Secrets Store é implantado como um daemonset. Se os pods do driver CSI não estiverem em execução no nó, você receberá o seguinte erro:

* 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 o nó estiver corrompido, adicione uma tolerância à parte corrompida no daemonset do driver CSI do Secrets Store.

Verifique se há seletores de nó impedindo que os pods do driver CSI do Secrets Store sejam executados no nó:

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

Obtenha os rótulos associados aos nós de processamento em seu pod:

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

Compare as saídas dos comandos anteriores para garantir que os rótulos correspondam aos valores do seletor de nó.

Verifique se o driver CSI foi implantado no cluster. Todos os pods devem estar no estado Em execução.

Execute o seguinte comando:

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

Exemplo de saída:

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

A saída anterior mostra que o driver foi implantado no cluster. Se o secrets-store.csi.k8s.io não for encontrado, reinstale o driver.

Se os arquivos que o SecretProviderClass extraiu forem maiores que 4 mebibytes (MiB), você poderá receber avisos FailedMount com uma mensagem que inclui grpc: a mensagem recebida é maior que o máximo. Você pode configurar o driver para aceitar respostas maiores que 4 MiB. Para aceitar respostas maiores, especifique --max-call-recv-msg-size=size em bytes para o contêiner do Secrets Store no daemonsetcsi-secrets-store.

Observação: substitua o tamanho em bytes pelo tamanho que você deseja que o driver aceite.

Se você ainda tiver problemas, revise os eventos de log em ordem cronológica para ver se ocorreram outras falhas:

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

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?