You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Minikube本地集群中挂载AWS Secrets Manager密钥?

问题描述

在Mac上使用Minikube运行本地Kubernetes集群,想要将AWS Secrets Manager中的密钥挂载到Pod中。按照AWS官方教程(针对EKS)操作,已完成以下步骤:

  1. 安装Secrets Store CSI Driver:
    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
    
  2. 安装AWS Provider服务账号:
    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
    
  3. 应用自定义SecretProviderClass:
    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
    
  4. 在Deployment中配置挂载(仅相关部分):
    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

已知问题:未告知集群AWS Secrets Manager的区域信息,也未授予集群访问AWS账号Secrets Manager的权限。

提问:

  1. 应在何处/如何添加这些信息?
  2. 要实现功能还缺少哪些步骤?

解决方案

一、配置AWS区域信息

报错核心是无法获取AWS区域,可通过以下任意一种方式解决:

1. 在SecretProviderClass中直接指定区域

修改你的SecretProviderClass,在parameters里添加region字段:

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: mypod-aws-secrets
  namespace: default
spec:
  provider: aws
  parameters:
    region: "us-east-1" # 替换为你的Secrets Manager所在区域
    objects: |
        - objectName: "testSecret"
          objectType: "secretsmanager"
          jmesPath:
            - path: testSecretKey
              objectAlias: testSecretKey

应用修改后的配置:kubectl apply -f your-secret-provider-class.yaml

2. 给AWS Provider DaemonSet添加区域环境变量

编辑AWS Provider的DaemonSet:

kubectl edit daemonset -n kube-system secrets-store-csi-driver-provider-aws

在spec.template.spec.containers[0].env中添加:

- name: AWS_REGION
  value: "us-east-1" # 替换为你的区域

保存退出后,DaemonSet会自动重启Pod加载新配置。

3. 在Minikube节点配置默认区域

通过minikube ssh进入节点,配置AWS默认区域:

minikube ssh
aws configure set region us-east-1 # 替换为你的区域
exit

二、配置AWS访问权限

本地Minikube没有EKS的IRSA(IAM Roles for Service Accounts)机制,需通过以下方式赋予访问权限:

方法1:在Minikube节点配置AWS凭证

进入Minikube节点,配置具有Secrets Manager访问权限的AWS账号凭证:

minikube ssh
aws configure
# 依次输入AWS Access Key ID、AWS Secret Access Key、默认区域、输出格式
exit

确保该账号拥有SecretsManagerReadOnlyAccess权限(或更精细的权限,比如仅允许访问testSecret)。

方法2:通过K8s Secret挂载凭证到AWS Provider

  1. 创建存储AWS凭证的K8s Secret:
kubectl create secret generic aws-credentials -n kube-system \
  --from-file=credentials=$HOME/.aws/credentials \
  --from-file=config=$HOME/.aws/config
  1. 编辑AWS Provider的DaemonSet,挂载该Secret到容器的/root/.aws/目录:
kubectl edit daemonset -n kube-system secrets-store-csi-driver-provider-aws

在spec.template.spec.volumes中添加:

- name: aws-credentials
  secret:
    secretName: aws-credentials

在spec.template.spec.containers[0].volumeMounts中添加:

- name: aws-credentials
  mountPath: /root/.aws/
  readOnly: true

保存后等待DaemonSet重启。

三、补充缺失的部署步骤

  1. 确保应用ServiceAccount存在
    如果application-pod-sa还未创建,执行:
kubectl create serviceaccount application-pod-sa -n default
  1. 完成Pod的Volume挂载配置
    你的Deployment仅定义了Volume,但未将其挂载到容器内的具体路径。修改Deployment的spec.template.spec.containers部分,添加volumeMounts:
spec:
  # ... 其他配置 ...
  containers:
  - name: your-container-name # 替换为你的容器名称
    # ... 其他容器配置 ...
    volumeMounts:
    - name: secrets-store-inline
      mountPath: "/mnt/secrets-store" # 替换为你想要挂载的路径
      readOnly: true

应用修改后的Deployment:kubectl apply -f your-deployment.yaml

  1. 验证AWS Provider状态
    确保AWS Provider的Pod正常运行:
kubectl get pods -n kube-system -l app=secrets-store-csi-driver-provider-aws

所有Pod状态应为Running。


内容的提问来源于stack exchange,提问作者Noam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:42:25