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

3 分钟阅读
0

我尝试将 AWS Secrets Manager 与 Amazon Elastic Kubernetes Service (Amazon EKS) 集成,但出现错误。

简短描述

如果您的容器组 (pod) 没有进入 Running(正在运行)状态,则当您将 Secrets Manager 与 Amazon EKS 集成时,就会出现错误。要解决此问题,请检查 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,请重新安装驱动程序。

secrets-store-csi-driver-provider-aws 容器组 (pod) 是作为进程守护程序集部署的。如果容器组 (pod) 未在应用程序容器组 (pod) 尝试启动的 Worker 节点中运行,则会收到以下错误:

"MountVolume.SetUp failed for volume "volumename" : rpc error: code = Unknown desc = failed to mount secrets store objects for pod namespace/pod, err: error connecting to provider "aws": provider not found: provider "aws""

要检查集群中运行的 secrets-store-csi-driver-provider-aws 容器组 (pod) 的数量和节点的数量,请运行以下两个命令:

kubectl get ds csi-secrets-store-provider-aws -n kube-system
kubectl get nodes

如果进程守护程序集的 desiredNumberScheduled 参数小于集群中的节点数,请检查进程守护程序集的 Tolerations 参数:

kubectl get ds csi-secrets-store-provider-aws -n kube-system -o yaml

在命令的输出中,在 tolerations: 下,查找 operator: Exists。如果找不到 operator: Exists,这可能就是 secrets-store-csi-driver-provider-aws 进程守护程序集容器组 (pod) 未在该节点上运行的原因。这是因为默认情况下,secrets-store-csi-driver-provider-aws 进程守护程序集不容忍污点。要解决此问题,请添加容忍度。有关详细信息,请参阅 Kubernetes 网站上的污点和容忍度

如果 SecretProviderClass 提取的文件大于 4 兆字节 (MiB),可能会收到 FailedMount 警告。错误消息包括 grpc: received message larger than max(grpc:收到的消息大于最大值)。要接受大于 4 MiB 的响应,请在 csi-secrets-store 进程守护程序集中为 Secrets Store Container 指定 --max-call-recv-msg-size=size in bytes

**注意:**请将 size in bytes 替换为希望驱动程序接受的大小。由于较大的响应会增加 secrets-store 容器的内存资源消耗,因此可能需要提高内存限制。如果问题仍然存在,请按时间顺序查看日志事件,了解是否存在任何其他故障:

kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'
AWS 官方
AWS 官方已更新 1 个月前