代码之家  ›  专栏  ›  技术社区  ›  Kamil Kamili

kubernetes:在yaml文件中放入json值

  •  1
  • Kamil Kamili  · 技术社区  · 6 年前

    我试图从JSON值创建一个秘密,但我一直在执行这个错误 "secrets.yaml" at <b64enc>: wrong type for value; expected string; got map[string]interface {} 当我这样做的时候 helm install .

    分泌液

    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudsql-instance-credentials
      namespace: wp-{{ .Values.name }}
      labels:
        app: wp-{{ .Values.name }}
    type: Opaque
    data:
      credentials.json: {{ .Values.dbCred | b64enc }}
    

    价值观

    dbCred: {
      'type': '',
      'project_id': '',
      'private_key_id': '',
      'private_key': '-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n',
      'client_email': '',
      'client_id': '',
      'auth_uri': '',
      'token_uri': '',
      'auth_provider_x509_cert_url': '',
      'client_x509_cert_url': ''
    }
    
    4 回复  |  直到 6 年前
        1
  •  2
  •   Ryan Dawson    6 年前

    你可以通过改变 {{ .Values.dbCred | b64enc }} {{ toJson .Values.dbCred | b64enc }}

        2
  •  0
  •   edbighead    6 年前

    或者,您可以保留 凭证.json 图表目录中的文件,以及 access file inside your template

    data:
      credentials.json: {{ .Files.Get "credentials.json" | b64enc }}
    
        3
  •  0
  •   Abu Hanifa    6 年前

    前后使用双引号(“”) dbCred 如下

    dbCred: "{
      'type': '',
      'project_id': '',
      'private_key_id': '',
      'private_key': '-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n',
      'client_email': '',
      'client_id': '',
      'auth_uri': '',
      'token_uri': '',
      'auth_provider_x509_cert_url': '',
      'client_x509_cert_url': ''
    }"
    

    其他事情看起来不错。

        4
  •  0
  •   hkhelil    6 年前

    对于您的配置,可以执行以下操作:

    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudsql-instance-credentials
      namespace: wp-{{ .Values.name }}
      labels:
        app: wp-{{ .Values.name }}
    type: Opaque
    data:
      credentials.json: |-
         {{ include (print $.Template.BasePath "/_helper_conf.tpl") . | b64enc }}
    

    请注意,当您试图将配置注入机密(特别是大型配置)时,可能需要使用 |-

    您也可以使用类似的助手

    {{ include (print $.Template.BasePath "/_helper_conf.tpl") . | b64enc }}
    

    或者更好,在您的yaml配置中(values.yml) 你可以这样写:

    dbCred:
      type: ''
      project_id: ''
      private_key_id: ''
      private_key: '-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n'
      client_email: ''
      client_id: ''
      auth_uri: ''
      token_uri: ''
      auth_provider_x509_cert_url: ''
      client_x509_cert_url: ''
    

    要使用这种配置,您可以检查以下对象:

    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudsql-instance-credentials
      namespace: wp-{{ .Values.name }}
      labels:
        app: wp-{{ .Values.name }}
    type: Opaque
    data:
      credentials.json: |-
         {{ toJson .Values.dbCred | b64enc }}
    

    此配置的用途是提供所提供JSON的抽象,并将其放入您的值中。

    {{ toJson .Values.dbCred | b64enc }}
    

    注意,如果您支持多个环境,这可能是重复的,因此您可能更喜欢在(或tpl)中使用一个助手和一些变量来避免重复的代码。

    我希望这有帮助