AWS Secrets Manager를 Amazon Elastic Kubernetes Service(Amazon EKS)와 통합하려고 하면 오류가 발생합니다.
간략한 설명
AWS Secrets Manager를 Amazon EKS와 통합할 때 포드가 실행 중 상태로 전환되지 않으면 오류가 발생할 수 있습니다. 이 문제를 해결하려면 Secrets Store 컨테이너 스토리지 인터페이스(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
참고: 동일한 작업을 수행하는 포드는 중복된 항목으로 표시됩니다.
volumeMount의 SecretProviderClass가 포드와 동일한 네임스페이스에 존재하지 않는 경우 다음과 같은 오류가 발생합니다.
"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 드라이버는 대몬셋으로 배포됩니다. 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 드라이버 대몬셋에 테인트에 대한 톨러레이션을 추가하세요.
노드에서 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)보다 크면 FailedMount 경고가 표시될 수 있습니다. 메시지는 다음과 같습니다. grpc: received message larger than max. 사용자가 4MiB보다 큰 응답을 수락하도록 드라이버를 구성할 수 있습니다. 더 큰 응답을 받으려면 csi-secrets-store 대몬셋의 Secrets Store 컨테이너에 --max-call-recv-msg-size=size를 바이트 단위로 지정하세요.
참고: 바이트 단위로 바꾸기 응답이 클수록 secrets-store 컨테이너의 메모리 리소스 사용량이 증가할 수 있으므로 메모리 제한을 늘려야 할 수 있습니다. 여전히 문제가 있는 경우 로그 이벤트를 시간순으로 검토하여 다른 장애가 발생했는지 확인하세요.
kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'