我有一个使用 minikube 在我的 Mac 上运行的本地 Kubernetes 集群。 我想将 AWS Secret Manager 上存储的机密装载到我的 Pod 中。
基本上,我正在尝试实现 this 教程中描述的内容,但适用于本地运行的集群,而不是 EKS 上。
我已经通过运行安装了 CSI 驱动程序
helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
和
helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
还通过申请安装了 aws 提供商服务帐户:
kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
此外,我已将“secretProviderClass”yml 应用到我的 minikube 集群:
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: mypod-aws-secrets
namespace: default
spec:
provider: aws
parameters:
objects: |
- objectName: "testSecret"
objectType: "secretsmanager"
jmesPath:
- path: testSecretKey
objectAlias: testSecretKey
最后在我的 Pod 的部署.yml 中,我尝试使用此安装
mypod-aws-secrets
(只是相关部分):
spec:
replicas: 1
selector:
matchLabels:
component: myPod
template:
metadata:
labels:
component: myPod
spec:
serviceAccountName: application-pod-sa
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: mypod-aws-secrets
但是,pod 无法启动,并且出现以下错误:
MountVolume.SetUp failed for volume "secrets-store-inline" : rpc error: code = Unknown desc = failed to mount secrets store objects for pod default/myPod-579bdf9b57-dd9tq, err: rpc error: code = Unknown desc = failed to retrieve region from node. error Region not found
这对我来说很有意义,因为到目前为止,我没有让我的 minikube 集群知道有关具体 AWS Secret Manager 的任何信息,也没有授予我的 minikube 集群在我的 AWS 账户上访问此 AWS Secret Manager 的任何权限。 我的问题是:
谢谢
AWS Secrets and Configuration Manager 的 CSI 驱动程序文档表示这仅适用于 AWS EKS 集群。
因此,
minikube
(以及任何其他 k8s 发行版)中缺少一些东西:
topology.kubernetes.io/region
。您可以将其添加到您的 minikube
节点上,但它不会让您走得更远......见下文secrets-store-csi-driver-provider-aws
打开与 AWS 的会话并提供尊重 serviceAccount 上注释的 IAM 角色的访问权限的凭证。对于后面的这一点,我没有进一步研究,但我怀疑这要归功于 EKS 默认提供 IRSA(ServiceAccounts 的 IAM 角色)功能。我不知道是否可以在 AWS 甚至 EKS 之外获得相同的功能。
也许深入研究“IAM Anywhere”可以提供一个解决方案,但乍一看似乎有很多设置,并且与
minikube
的典型“临时本地 k8s”用法不匹配。
另一件需要进展的事情可能是深入研究
secrets-store-csi-driver-provider-aws
代码,看看是否可以为其提供AWS凭证(访问密钥/令牌?),以便它能够打开该会话。
对于具有 AWS 凭证(访问密钥/令牌?)的 Secrets-store-csi-driver-provider-aws 代码,它也不起作用,因为该 aws-provider 必须与 IAM 角色一起使用。