首页 文章

Kubernetes:将JSON值放在YAML文件中

提问于
浏览
0

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

secrets.yaml

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 }}

values.yaml

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

    您可以按照以下配置执行以下操作:

    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的抽象,并将其放在values.yml中

    {{ toJson .Values.dbCred | b64enc }}
    

    请注意,如果您支持多个环境,这可能会重复,因此您可能更喜欢使用帮助程序和内部(或tpl)中的一些变量来避免重复的代码

    我希望这有帮助

  • 0

    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': ''
    }"
    

    其他的东西看起来还不错 .

  • 0

    或者,您可以将 credentials.json 文件保留在图表目录中,并且access file inside your template

    data:
      credentials.json: {{ .Files.Get "credentials.json" | b64enc }}
    
  • 1

    您可以通过将 {{ .Values.dbCred | b64enc }} 更改为 {{ toJson .Values.dbCred | b64enc }} 来解决此问题

相关问题