我需要获取存储在 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"
我尝试复制与您相同的配置,但最终获取了整个 JSON 而不是特定值。检查此现有的公共功能请求,并随时对该功能进行投票,以相应地确定其优先级。
有关该问题的其他参考,您可以参考从机密中提取 JSON 键值对。