首页 > 解决方案 > terraform-kubernetes-provider 如何从文件中创建秘密?

问题描述

我正在使用 terraform kubernetes-provider,我想将这样的kubectl命令翻译成 TF:

kubectl create secret generic my-secret --from-file mysecret.json

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}"
}

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

   data = {
      "my-secret.json" = "{data.template_file.my-secret.template}"
   }

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

这里的诀窍是什么?

标签: kubernetesterraformterraform-template-file

解决方案


只要文件是 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")
      }
    }

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

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

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


推荐阅读