Kubernetes Deployment YAML关联Secret失败:base64数据非法错误
问题根源
错误提示illegal base64 data at input byte 0是因为Secret的data字段中传入的字符串包含多余引号,导致Kubernetes无法正确解析为合法的Base64数据。
解决方案
1. 修正values.yaml中的环境变量配置
去掉每个env值的单引号,YAML中纯字符串无需额外引号包裹:
secretName: certificate-secrets env: SECURITY_SSL_CA: YmFzZTY0ZW5jb2RlZHZhbHVlMQ== CA_TXT_FILE: YmFzZTY0ZW5jb2RlZHZhbHVlMg== CA_FILE: YmFzZTY0ZW5jb2RlZHZhbHVlMw== SECURITY_SSL_KEY: YmFzZTY0ZW5jb2RlZHZhbHVlNA== KEY_TXT_FILE: YmFzZTY0ZW5jb2RlZHZhbHVlNQ== KEY_FILE: YmFzZTY0ZW5jb2RlZHZhbHVlNg== SN_USER: YmFzZTY0ZW5jb2RlZHZhbHVlNw== SN_PASSWORD: YmFzZTY0ZW5jb2RlZHZhbHVlOA== SECURITY_SSL_CERTIFICATE: YmFzZTY0ZW5jb2RlZHZhbHVlOQ== CRT_TXT_FILE: YmFzZTY0ZW5jb2RlZHZhbHVlMTA== CRT_FILE: YmFzZTY0ZW5jb2RlZHZhbHVlMTE==
2. 修正Secret模板的data字段
移除| quote过滤器,你传入的已经是Base64编码后的字符串,添加引号会导致Kubernetes将引号视为Base64数据的一部分,从而解析失败:
apiVersion: v1 kind: Secret metadata: name: {{ .Values.secretName }} labels: {{- include "snp.labels" . | nindent 4 }} data: SECURITY_SSL_CA: {{ .Values.env.SECURITY_SSL_CA }} CA_TXT_FILE: {{ .Values.env.CA_TXT_FILE }} CA_FILE: {{ .Values.env.CA_FILE }} SECURITY_SSL_KEY: {{ .Values.env.SECURITY_SSL_KEY }} KEY_TXT_FILE: {{ .Values.env.KEY_TXT_FILE }} KEY_FILE: {{ .Values.env.KEY_FILE }} SN_USER: {{ .Values.env.SN_USER }} SN_PASSWORD: {{ .Values.env.SN_PASSWORD }} SECURITY_SSL_CERTIFICATE: {{ .Values.env.SECURITY_SSL_CERTIFICATE }} CRT_TXT_FILE: {{ .Values.env.CRT_TXT_FILE }} CRT_FILE: {{ .Values.env.CRT_FILE }}
3. 验证Deployment配置(无需修改)
你的Deployment模板中使用valueFrom.secretKeyRef关联Secret的方式是正确的,这部分可以保留原样。
额外说明
- 如果values.yaml中存储的是明文而非Base64编码值,需要使用Helm的
b64enc过滤器自动编码,例如:data: SECURITY_SSL_CA: {{ .Values.env.SECURITY_SSL_CA | b64enc }} - 部署前可以用
helm template命令预览生成的YAML,确认Secret的data字段值是纯Base64字符串,无多余引号。
内容的提问来源于stack exchange,提问作者Osman
相关产品推荐
相关产品推荐

