从 Spring mvc 应用程序中读取已安装卷的秘密值

Read secret values from mounted volumes from Spring mvc application

我们在 AKS 中使用 tomcat 映像部署了一个 spring MVC 应用程序。 如何从作为卷挂载的 Secret 中获取值?

大多数示例指向 spring 仅引导

我正在增加秘密商店的价值

kind: Pod
apiVersion: v1
metadata:
  name: nginx
  namespace: default
  labels:
    aadpodidbinding: pod-mi
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - name: foo
          mountPath: "/mnt/secrets"
          readOnly: true
  volumes:
    - name: foo
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: spc.

可以看到 secret 被正确挂载:

kubectl -n default exec -it nginx -- bash
root@nginx:/# ls /mnt/secrets
service-one-secret
service-two-secret

Cat service-one-secret 没有 return 任何东西

任何人都可以建议一种从 spring mvc 应用程序读取其值的方法吗?

当您将机密作为卷安装到容器时,它会在该路径中显示机密的数据。例如,您使用以下命令创建一个秘密:

kubectl create secret generic basic-secret \
  --from-literal=username="jsmith" \
  --from-literal=password="mysupersecurepassword"

然后将机密作为卷安装:

...
spec:
  volumes:
  - name: vol-secret
    secret:
      secretName: my-secret
  containers:
  ...
    volumeMounts:
    - name: vol-secret
      mountPath: /etc/app/secrets

然后在/etc/app/secrets路径下可以看到名为usernamepassword的文件,其值是这样的:

/ # ls /etc/app/secrets
password  user
/ # cat /etc/app/secrets/password
mysupersecurepassword
/ # cat /etc/app/secrets/username
jsmith