如何解决 Secrets Manager 与 Amazon EKS 集成的问题?
我尝试将 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 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 个月前
- AWS 官方已更新 1 个月前