You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Terraform Kubernetes Provider中创建P12密钥库Secret的方案咨询

解决方案:Terraform 处理 P12 密钥库创建 Kubernetes Secret

你的方案问题分析

  • 第一个方案失败原因:Terraform 的base64decode返回原始字节数据,但 Kubernetes Secret 的data字段要求值为base64编码后的字符串,直接传入解码后的字节会触发UTF-8编码转换错误。
  • 第三、第四个方案的问题:
    1. local_file的provisioner命令存在语法错误,${content}无法直接在命令中引用,且逻辑上应该读取写入的文件而非变量;
    2. file()函数默认按UTF-8解析文件,不适合读取p12这类二进制文件,会直接报错。

修正后的可行方案

方案1:直接读取本地p12文件(无文件传入限制时首选)

用Terraform内置的filebase64()函数处理二进制文件,它会自动读取p12并生成符合要求的base64编码字符串,无需手动编码:

resource "kubernetes_secret_v1" "test_keystore" {
  metadata {
    name      = "test-keystore"
    namespace = "test" # 若为变量则替换为var.namespace,注意加引号
  }
  type = "Opaque"
  data = {
    "test.p12" = filebase64("path/to/test.p12")
  }
}

方案2:通过base64编码变量传递(符合你的文件传入限制)

你之前手动生成base64编码的操作是正确的,只需直接将变量值传入Secret的data字段——K8s Secret的data字段本身要求值为base64编码字符串,无需额外解码:

variable "encoded_p12" {
  type = string
}

resource "kubernetes_secret_v1" "test_keystore" {
  metadata {
    name      = "test-keystore"
    namespace = "test"
  }
  type = "Opaque"
  data = {
    "test.p12" = var.encoded_p12
  }
}

核心逻辑说明

Kubernetes Secret的data字段本质是存储base64编码后的内容,Terraform只需传递正确的base64字符串即可。之前的错误是多执行了base64decode步骤,导致原始二进制数据被强制转为UTF-8字符串,触发编码异常。

内容的提问来源于stack exchange,提问作者Nishant Kansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:20:19