我正在嘗試將 AWS Secrets Manager 與 Amazon Elastic Kubernetes Service (Amazon EKS) 進行整合,但收到錯誤。
簡短描述
當您將 AWS Secrets Manager 與 Amazon EKS 整合時,如果您的 Pod 無法進入 Running (執行中) 狀態,則可能會收到錯誤。若要解決此問題,請檢查秘密存放容器儲存界面 (CSI) 驅動程式 Pod 中的日誌,以查看是否有任何 Pod 未執行。
解析度
顯示秘密存放 CSI 驅動程式 Pod:
kubectl --namespace=kube-system get pods -l "app=secrets-store-csi-driver"
顯示秘密存放 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 存在於相同的命名空間中。
秘密存放 CSI 驅動程式會以常駐程式集進行部署。如果 CSI 驅動程式 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
如果節點受到污點,則在秘密存放 CSI 驅動程式常駐程式集中新增該污點的容錯性。
檢查是否有任何節點選擇器使秘密存放 CSI 驅動程式 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 驅動程式是否已部署至叢集。所有 Pod 都應處於 Running (執行中) 狀態。
執行以下命令:
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:收到的訊息大於上限。您可以將驅動程式配置為接受大於 4 MiB 的回應。若要接受較大的回應,請在 csi-secrets-store 常駐程式集中將 --max-call-recv-msg-size=size in bytes=大小 (以位元為單位) 指定為秘密存放容器。
注意:將大小 (以位元為單位) 取代為您希望驅動程式接受的大小。
如果問題仍然存在,請按時間順序檢閱日誌事件,以查看是否發生了任何其他故障:
kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'