如何解决 AWS Secrets Manager 与 Amazon EKS 集成的问题?

2 分钟阅读
0

我尝试将 AWS Secrets Manager 与 Amazon Elastic Kubernetes Service (Amazon EKS) 集成,但收到错误消息。

简短描述

将 AWS Secrets Manager 与 Amazon EKS 集成时,如果您的 Pod 未能进入正在运行状态,则您可能会收到错误消息。要解决此问题,请检查 Secrets Store Container Storage Interface (CSI) 驱动程序 Pod 中的日志,以查看是否有任何未执行的 Pod。

解决方法

显示 Secrets Store CSI 驱动程序 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 驱动程序已部署为守护进程。如果 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

如果节点受到污染,则在 Secrets Store CSI 驱动程序守护进程中添加对污点的容忍度。

检查是否有任何节点选择器阻止 Secrets Store CSI 驱动程序 Pod 在节点上运行:

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

获取与 Pod 中的 Worker 节点关联的标签:

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

比较上述命令的输出,以确保标签与节点选择器值匹配。

检查 CSI 驱动程序是否已部署到集群。所有 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(grpc:收到的消息大于最大值)。您可以将驱动程序配置为接受大于 4MiB 的响应。为了接受更大的响应,请在 csi-secrets-store 守护进程中为 Secrets Store 容器指定 --max-call-recv-msg-size=size in bytes

**注意:**请将 size in bytes(大小[字节])替换为您希望驱动程序接受的大小。

如果您仍有问题,请按时间顺序查看日志事件,以了解是否发生了任何其他故障:

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

AWS 官方
AWS 官方已更新 2 年前