當我嘗試將 AWS Secrets Manager 與 Amazon Elastic Kubernetes Service (Amazon EKS) 整合時收到錯誤。
簡短描述
當您將 AWS Secrets Manager 與 Amazon EKS 整合時,如果您的 Pod 無法進入執行中狀態,則可能會出現錯誤。若要解決此問題,請檢查 Secrets Store Container Storage Interface (CSI) Driver Pod 中的日誌檔,以查看是否有任何 Pod 無法執行。
解決方法
若要顯示 Secrets Store CSI Driver Pod,請執行下列命令:
kubectl --namespace=kube-system get pods -l "app=secrets-store-csi-driver"
若要顯示 Secrets Store CSI Pod 中的日誌檔,請執行下列命令:
kubectl --namespace=kube-system logs -f -l "app=secrets-store-csi-driver"
下列日誌顯示每個 Pod 表現良好:
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
**注意:**執行相同動作的 Pod 會顯示為重複項目。
如果 VolumeMount 中的 SecretProviderClass 在與 Pod 相同的命名空間中不存在,則會收到下列錯誤:
"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 必須存在於與 Pod 相同的命名空間中。
Secrets Store CSI Driver 部署為 daemonset。如果節點上未執行 CSI Driver Pod,則會收到下列錯誤:
"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 Driver daemonset 中為污點新增容忍。
檢查是否有任何節點選擇器不允許 Secrets Store CSI Driver Pod 在節點上執行:
kubectl --namespace=kube-system describe pods -l "app=secrets-store-csi-driver" | grep Node-Selectors*
取得與 Pod 中的工作節點相關聯的標籤:
kubectl get node --selector=kubernetes.io/os=linux
比較上述命令的輸出。確定標籤與節點選取器值相符。
檢查 CSI Driver 是否已部署到叢集,以及所有 Pod 是否處於執行中狀態:
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。您可以設定驅動程式接受大於 4 MiB 的回應。若要接受較大的回應,請將 --max-call-recv-msg-size=size in bytes 指定至 csi-secrets-store daemonset 中的 Secrets Store 容器。
**注意:**使用您希望驅動程式接受的大小取代 size in bytes。由於較大的回應可能會增加 secrets-store 容器的記憶體資源消耗,因此您可能需要增加記憶體限制。如果仍然存在問題,請按時間順序檢閱日誌事件,以查看是否發生任何其他失敗:
kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'