AWS Secrets Manager를 Amazon EKS와 통합할 때 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 12월 10일

AWS Secrets Manager를 Amazon Elastic Kubernetes Service(Amazon EKS)와 통합하려고 하는데 오류가 발생합니다.

간략한 설명

AWS Secrets Manager를 Amazon EKS와 통합할 때 포드가 실행 중 상태로 들어가지 않으면 오류가 발생할 수 있습니다. 이 문제를 해결하려면 Secrets Store Container Storage Interface(CSI) 드라이버 포드에서 작동하지 않는 포드가 있는지 로그를 확인합니다.

해결 방법

Secrets Store CSI 드라이버 포드 표시:

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

Secrets Store CSI 포드에서 로그 표시:

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

다음 로그는 각 포드가 잘 작동하고 있음을 보여줍니다.

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

참고: 동일한 작업을 수행하는 포드는 중복 항목으로 나타납니다.

volumeMountSecretProviderClass가 포드와 동일한 네임스페이스에 존재하지 않는 경우, 다음과 같은 오류가 발생합니다.

* 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는 포드와 동일한 네임스페이스에 있어야 합니다.

Secrets Store CSI 드라이버는 daemonset으로 배포됩니다. 노드에서 CSI 드라이버 포드가 실행되고 있지 않은 경우 다음과 같은 오류가 발생합니다.

* 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

노드가 오염된 경우 Secrets Store CSI 드라이버 daemonset에서 테인트에 대한 톨러레이션을 추가합니다.

노드에서 Secrets Store CSI 드라이버 포드가 실행되지 않도록 하는 노드 선택기가 있는지 확인합니다.

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

포드의 작업자 노드와 연결된 레이블을 가져옵니다.

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

이전 명령의 출력을 비교하여 레이블이 노드 선택기 값과 일치하는지 확인합니다.

CSI 드라이버가 클러스터에 배포되었는지 확인합니다. 모든 포드는 실행 중 상태여야 합니다.

다음 명령 실행:

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

또는

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

예제 출력:

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

위의 출력은 드라이버가 클러스터에 배포되었음을 보여줍니다. secrets-store.csi.k8s.io를 찾을 수 없으면 드라이버를 다시 설치합니다.

SecretProviderClass가 가져온 파일이 4메비바이트(MiB)보다 크면 grpc: 수신된 메시지가 최대보다 큼(received message larger than max)이 포함된 메시지와 함께 FailedMount 경고가 표시될 수 있습니다. 드라이버가 4MiB보다 큰 응답을 수락하도록 구성할 수 있습니다. 더 큰 응답을 수락하려면 csi-secrets-store daemonset의 Secrets Store Container에 --max-call-recv-msg-size=size in bytes를 지정합니다.

참고: size in bytes를 드라이버에서 허용할 크기로 바꿉니다.

그래도 문제가 계속되면 로그 이벤트를 시간순으로 검토하여 다른 오류가 발생했는지 확인합니다.

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?