使用Terraform创建含.p12文件的Kubernetes Secret遇问题求助
解决Terraform创建Kubernetes Secret存储.p12二进制文件的问题
问题原因
- 用
file()读取.p12二进制文件时,file()会尝试将内容解析为UTF-8字符串,但二进制文件包含非可打印/非UTF-8字符,导致Terraform解析失败报错。 - 用
filebase64()配合data字段时,filebase64()已将二进制内容转为base64编码字符串,而kubernetes_secret_v1的data字段会自动对输入值再次执行base64编码,最终造成双重编码,Secret中的.p12内容无法正常使用。
正确配置方案
使用binary_data字段存储二进制文件,该字段专门用于处理二进制数据,接收filebase64()返回的base64编码字符串,且不会再次编码:
resource "kubernetes_secret_v1" "app_keystore" { metadata { name = "app-keystore" namespace = "test" } type = "Opaque" binary_data = { "test.p12" = filebase64("./secret/appkeystore/test.p12") } }
验证方法
创建Secret后,可通过以下命令导出并校验文件:
kubectl get secret app-keystore -n test -o jsonpath='{.data.test\.p12}' | base64 -d > output.p12
对比output.p12与原始文件的MD5值,确认内容一致。
内容的提问来源于stack exchange,提问作者Nishant Kansal
相关产品推荐
相关产品推荐

