如何使用 GCP Secret Store CSI 驱动程序获取 K8s 环境变量的秘密值

问题描述 投票:0回答:1

我需要获取存储在 GCP Secret Manager 中的密钥并在我的 GKE Kubernetes Pod 中使用它们。我正在使用 GCP Secret Store CSI 驱动程序 来实现此目的。虽然我能够成功建立连接并检索机密,但我面临着从机密中检索特定键值并将它们分配给 Kubernetes Pod 中的环境变量的问题。

我已经使用 CSI 驱动程序在 AWS 中成功设置了类似的配置,我可以在其中检索特定的键值对。但是,在 GCP 中执行相同的设置时,我无法仅检索键值对。相反,正在检索整个秘密 JSON。

例如,如果我的秘密是:

{"admin_user":"test-admin","admin_password":"password"}

我希望环境变量

ADMIN_USER
具有值
test-admin
。但目前,它采用整个秘密 JSON 值:
ADMIN_USER={"admin_user":"test-admin","admin_password":"password"}

如何配置 GCP Secret Store CSI 驱动程序以检索特定键值并将其分配给 Kubernetes Pod 中的环境变量?

以下是secretProviderClass定义:

---
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: test-secret
spec:
  provider: gcp
  parameters:
    secrets: |
      - resourceName: "projects/<project-id>/secrets/testpassword/versions/latest"
        path: admin.txt
    objects: |
      - objectName: "testpassword"
        objectType: secretsmanager
        jmesPath:
          - path: "admin_user"
            objectAlias: "admin_user"
          - path: "admin_password
            objectAlias: "admin_password"
  secretObjects:
  - secretName: testpassword
    type: Opaque
    data:
    - objectName: admin.txt
      key: admin_user
    - objectName: admin.txt
      key: admin_password

Pod 定义:

---
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: default
spec:
  serviceAccountName: app-sa
  containers:
  - image: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
    name: mypod
    env:
      - name: "ADMIN_USER"
        valueFrom:
          secretKeyRef:
            name: "testpassword"
            key: admin_user
      - name: "ADMIN_PASSWORD"
        valueFrom:
          secretKeyRef:
            name: "testpassword"
            key: admin_password
    resources:
      requests:
        cpu: 100m
    tty: true
    volumeMounts:
      - mountPath: "/secrets"
        name: vol-secret
        readOnly: true
  volumes:
  - name: vol-secret
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        secretProviderClass: "test-secret"
kubernetes google-cloud-platform google-kubernetes-engine google-secret-manager
1个回答
0
投票

我尝试复制与您相同的配置,但最终获取了整个 JSON 而不是特定值。检查此现有的公共功能请求,并随时对该功能进行投票,以相应地确定其优先级。

有关该问题的其他参考,您可以参考从机密中提取 JSON 键值对

© www.soinside.com 2019 - 2024. All rights reserved.