在 kubernetes 中使用 CSI 秘密驱动程序提供的保险库秘密作为环境变量

问题描述

我正在阅读 hashicorp 的官方 documentation,关于利用 CSI 机密驱动程序安装通过提供给 Pod 的 vault 创建的机密。

一旦完成了大量设置/样板工作,这些秘密似乎最终会通过 SecretProviderClass 作为 follows 提供给工作负载

---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
Metadata:
  name: vault-db-creds
spec:
  # Vault CSI Provider
  provider: vault
  parameters:
    # Vault role name to use during login
    roleName: 'app'
    # Vault's hostname
    vaultAddress: 'https://vault:8200'
    # TLS CA certification for validation
    vaultCACertPath: '/vault/tls/ca.crt'
    objects: |
      - objectName: "dbUsername"
        secretPath: "database/creds/db-app"
        secretKey: "username"
      - objectName: "dbPassword"
        secretPath: "database/creds/db-app"
        secretKey: "password"
    # "objectName" is an alias used within the SecretProviderClass to reference
    # that specific secret. This will also be the filename containing the secret.
    # "secretPath" is the path in Vault where the secret should be retrieved.
    # "secretKey" is the key within the Vault secret response to extract a value from.

根据上述相关评论

"objectName" 是 SecretProviderClass 中用来引用的别名 那个特定的秘密。这也将是包含机密的文件名。

我认为这意味着例如dbUsername 不会作为相应 pod 的环境变量随时可用。

有没有办法将这些变量(例如 dbUsernameusername 等)作为环境变量公开给 k8s 应用程序?

我最好的假设(在开始 PoC 之前)是,在 /path/where/all/vault/secrets/are/mounted/database/creds/ 下迭代获取所有文件也许可以解决问题,但我想知道是否有更好的替代方案,因为目前大多数云应用程序期望秘密作为环境变量,因此重构代码以读取文件并不是一种替代方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)