如何針對 AWS Secrets Manager 與 Amazon EKS 整合時的問題進行疑難排解?

上次更新日期:2021 年 12 月 10 日

我正在嘗試將 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'

此文章是否有幫助?


您是否需要帳單或技術支援?