如何在Helm Chart中正确添加二进制Secret数据?
如何在Helm Chart中包含二进制Secret文件
我需要为一个依赖二进制Secret的服务创建Helm Chart,之前用kubectl导入密钥的命令是:
kubectl create secret generic my-secret --from-file=fileContainingBinaryData
尝试转换为Helm Chart时,我写了如下YAML模板:
apiVersion: v1 kind: Secret type: Opaque metadata: name: my-secret data: my-secret: | {{- .Files.Get "files/fileContainingBinaryData" | nindent 4 }}
但执行Helm安装时出现错误:
Error: INSTALLATION FAILED: YAML parse error on my-service/templates/my-secret.yaml: error converting YAML to JSON: yaml: invalid leading UTF-8 octet
这个错误确实是二进制数据导致的——YAML解析器会把data字段的内容当作UTF-8文本处理,但二进制文件包含非UTF-8字节,直接插入会触发解析失败。以下是正确的处理方式:
解决方案:用Base64编码二进制内容
Kubernetes的Secretdata字段要求内容是Base64编码的字符串,kubectl create secret命令会自动帮我们完成编码,但Helm模板需要手动处理。使用Helm的b64enc过滤器对二进制文件内容进行编码即可:
apiVersion: v1 kind: Secret type: Opaque metadata: name: my-secret data: my-secret: {{ .Files.Get "files/fileContainingBinaryData" | b64enc }}
说明
.Files.Get读取二进制文件的原始内容b64enc过滤器将原始二进制数据转换为符合YAML规范的Base64字符串,避免UTF-8解析错误- 不需要用
nindent或多行文本标记(|),因为编码后的内容是单行字符串,直接插入即可
内容的提问来源于stack exchange,提问作者piccy
相关产品推荐
相关产品推荐

