首页 > 解决方案 > 使用 azure 秘密提供程序类进行自定义

问题描述

我为我的 Azure Kubernetes 服务部署定义了一个 secretsProviderClass 资源,它允许我从 Azure Key Vault 创建机密。我想将 Kustomize 与它一起使用,以统一我在多个环境中的部署。这是我的清单:

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
  name: azure-kvname
spec:
  provider: azure
  secretObjects:
  - data:
    - key: dbuser
      objectName: db-user
    - key: dbpassword
      objectName: db-pass
    - key: admin
      objectName: admin-user
    - key: adminpass
      objectName: admin-password
    secretName: secret
    type: Opaque
  parameters:
    usePodIdentity: "true"
    keyvaultName: "dev-keyvault"
    cloudName: ""
    objects:  |
      array:
        - |
          objectName: db-user
          objectType: secret
          objectVersion: ""
        - |
          objectName: db-pass
          objectType: secret
          objectVersion: ""
        - |
          objectName: admin-user
          objectType: secret
          objectVersion: ""
        - |
          objectName: admin-password
          objectType: secret
          objectVersion: ""
    tenantId: "XXXXXXXXXXXX"

这是我用作基础的清单。我想对此使用覆盖并根据我要部署的环境应用值。具体来说,我想修改objectName属性。我尝试应用 Json6902 补丁:

- op: replace
  path: /spec/parameters/objects/array/0/objectName
  value: "dev-db-user"

- op: replace
  path: /spec/parameters/objects/array/1/objectName
  value: "dev-db-password"

- op: replace
  path: /spec/parameters/objects/array/2/objectName
  value: "dev-admin-user"

- op: replace
  path: /spec/parameters/objects/array/3/objectName
  value: "dev-admin-password"

不幸的是,它不起作用,也没有替换这些值。Kustomize 可以吗?

标签: azurekubernetesazure-akskustomize

解决方案


不幸的是 - 您尝试访问的值不是另一个嵌套的 YAML 数组 - YAML 中行尾的管道符号表示后面的任何缩进文本都应解释为多行标量值

使用 kustomize 您可能需要替换整个/spec/parameters/objects

如果你还没有开始使用 kustomize,你可以考虑像Helm这样的模板引擎,它应该允许你替换这个字符串中的值

...或者您可以结合使用 Helm 进行模板和 Kustomize 进行资源管理、特定配置的补丁和覆盖。


推荐阅读