terraform-kubernetes-provider 如何从文件创建机密?

Dav*_*ord 10 kubernetes terraform terraform-template-file

我正在使用 terraform kubernetes-provider,我想将此kubectl命令转换为 TF:

kubectl create secret generic my-secret --from-file mysecret.json
Run Code Online (Sandbox Code Playgroud)

然而,secret资源的data字段似乎只需要一个 TF map

我试过类似的东西

data "template_file" "my-secret" {
  template = "${file("${path.module}/my-secret.json")}"
}

resource "kubernetes_secret" "sgw-config" {
   metadata {
     name = "my-secret"
   }
   type = "Opaque"
   data = "{data.template_file.my-secret.template}"
}
Run Code Online (Sandbox Code Playgroud)

但它抱怨这不是一张地图。所以,我可以做这样的事情:

   data = {
      "my-secret.json" = "{data.template_file.my-secret.template}"
   }
Run Code Online (Sandbox Code Playgroud)

但这将使用名为的顶级字段写入机密,my-secret.json并且当我批量挂载它时,它将无法与其他资源一起使用。

这里的诀窍是什么?

Fra*_*zzi 6

只要文件是 UTF-8 编码的,你就可以使用这样的东西

resource "kubernetes_secret" "some-secret" {

      metadata {
        name      = "some-secret"
        namespace = kubernetes_namespace.some-ns.metadata.0.name
        labels = {
          "sensitive" = "true"
          "app"       = "my-app"
        }
      }
      data = {
        "file.txt" = file("${path.cwd}/your/relative/path/to/file.txt")
      }
    }
Run Code Online (Sandbox Code Playgroud)

如果文件是二进制文件,则会出现类似错误

调用函数“文件”失败:/your/relative/path/to/file.txt 的内容不是有效的 UTF-8;使用filebase64 函数获取Base64 编码内容或使用其他文件函数(例如filemd5、filesha256)获取文件散列结果。

我尝试在 base64 中对文件进行编码,但问题是生成的文本将由提供程序以 base64 重新编码。所以我想目前没有二进制文件的解决方案......我将使用我接下来找到的二进制文件进行编辑。


小智 -2

基本上你需要提供这样的地图:

resource "kubernetes_secret" "sgw-config" {
   metadata {
     name = "my-secret"
   }
   type = "Opaque"
   data {
           "key1" = "value1"
           "key2" = "value2"
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用引用您的内部变量

resource "kubernetes_secret" "sgw-config" {
       metadata {
         name = "my-secret"
       }
       type = "Opaque"
       data {
               "USERNAME" = "${var.some_variable}"
               "PASSWORD" = "${random_string.root_password.result}"
      }
    }
Run Code Online (Sandbox Code Playgroud)

  • 抱歉投反对票,但这并没有解决问题:如何使用 Terraform 添加文件(可能是非 UTF-8)作为秘密值? (2认同)