helm 模板,具有多个键值过滤器

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

我们在 AKS 集群中配置了 CSI 驱动程序以进行秘密管理,如下所示。

helm 值文件。

  keyvault:
    enabled: true
    tenantid: "#{tenantid}#"
    clientid: "#{spid}#"
    clientsecret: "#{spsecret}#"
    secrets:
    - MY-SECRET-1
    - MY-SECRET-2
    - COMMON-SECRET-1
    - COMMON-SECRET-2

Secretprovider类模板如下。

spec:
  provider: azure
  secretObjects:
  - data:
      {{- range .Values.keyvault.secrets }}{{/* <-- only one range loop */}}
    - key: {{ . }}
      objectName: {{ $.Release.Name | upper }}-{{ . }} 
      {{- end }}      
    secretName: {{ $.Release.Name }}-kvsecret
    type: opaque
  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "false"
    userAssignedIdentityID: ""
    keyvaultName: {{ .Values.keyvault.name | default "mykv" }}    
    objects: |
      array:
        {{- range .Values.keyvault.secrets }}{{/* <-- only one range loop */}}        
        - |
          objectName: {{ $.Release.Name | upper }}-{{ . }}
          objectType: secret
        {{- end }}
    tenantId: {{ .Values.keyvault.tenantid }}
{{- end }}
{{- end -}} 

部署helm模板envt变量部分

       env:
    {{- if eq .Values.keyvault.enabled true }}
    {{- range .Values.keyvault.secrets }}{{/* <-- only one range loop */}}
      - name: {{ regexReplaceAll "\\W+" . "_" }}
        valueFrom:
          secretKeyRef:
            name: {{ $.Release.Name }}-kvsecret
            key: {{ . }}
      {{- end }}
      {{- end }}
    {{- if eq .Values.keyvault.enabled true }}
      volumeMounts: 
      - name:  {{ $.Release.Name }}-volume
        mountPath: '/mnt/secrets-store'
        readOnly: true
      {{- end }} 
      
      
              

设置工作正常。但是有两件事我有问题。

  1. 在每个密钥库中,有一些可以与多个应用程序一起使用的通用密钥名称(上面的“COMMON-SECRET-1”示例),以及一些特定于应用程序但相同密钥名称的密钥名称(上面的示例“ MY-SECRET-1"),因此我们需要避免不同应用程序的键名在具有相同键名时发生冲突)。

所以为了在模板中隔离 App 特定的键名,我们在模板中使用了发布名称前缀,这样只有那些来自 keyvault 的 appspecific 键名才会被用于创建 secretproviderclass 对象。

但是,这又导致了更多与密钥库中应用程序的通用密钥名称相关的工作。因为我们已经为发布名称添加了前缀,所以我们必须用不同的应用程序名称重复相同的键名作为前缀来选择它们。

所以在 helm 模板中寻找一种方法,我们应该能够从 keyvault 和应用程序特定的密钥名称(以 releasename 为前缀)中获取通用密钥名称(不带 appname 前缀)。有什么指导吗?

kubernetes kubernetes-helm helm3 kubernetes-secrets helmfile
© www.soinside.com 2019 - 2024. All rights reserved.