terraform kubernetes提供程序如何从文件创建机密?
我正在使用terraform,我想将类似于terraform kubernetes提供程序如何从文件创建机密?,kubernetes,terraform,terraform-template-file,Kubernetes,Terraform,Terraform Template File,我正在使用terraform,我想将类似于kubectl的命令转换为TF: kubectl create secret generic my-secret --from-file mysecret.json 然而,secret资源的数据字段似乎是 我试过类似的方法 data "template_file" "my-secret" { template = "${file("${path.module}/my-secret.json")}" } resource "kubernetes_s
kubectl
的命令转换为TF:
kubectl create secret generic my-secret --from-file mysecret.json
然而,secret
资源的数据
字段似乎是
我试过类似的方法
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
的顶级字段编写机密,当我卷装它时,它将无法与其他资源一起工作
这里的诀窍是什么?基本上,您需要提供如下地图:
resource "kubernetes_secret" "sgw-config" {
metadata {
name = "my-secret"
}
type = "Opaque"
data {
"key1" = "value1"
"key2" = "value2"
}
}
您可以使用
resource "kubernetes_secret" "sgw-config" {
metadata {
name = "my-secret"
}
type = "Opaque"
data {
"USERNAME" = "${var.some_variable}"
"PASSWORD" = "${random_string.root_password.result}"
}
}
如果运行命令
kubectl create secret generic my secret——从文件mysecret.json
然后
$ kubectl get secrets my-secret -o yaml
apiVersion: v1
data:
my-secret.json: ewogICA.....
kind: Secret
metadata:
creationTimestamp: "2019-03-25T18:20:43Z"
name: my-secret
namespace: default
resourceVersion: "67026"
selfLink: /api/v1/namespaces/default/secrets/my-secret
uid: b397a29c-4f2a-11e9-9806-000c290425d0
type: Opaque
它以类似的方式将文件名存储为单键。当我将其装入卷/volumeMount时,它会按预期工作。我担心它不会,但当我使用
--from 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")
}
}
如果文件是二进制文件,则会出现如下错误
调用函数“file”失败:的内容
/您的/relative/path/to/file.txt无效UTF-8;使用
filebase64函数以获取Base64编码的内容或其他
用于获取文件哈希的文件函数(例如filemd5、filesha256)
结果相反
我尝试在base64中对文件进行编码,但问题是,提供者将在base64中重新编码生成的文本。所以我想目前还没有二进制文件的解决方案。。。
我将使用下一步找到的二进制文件进行编辑。只需使用
这可能有点离题,但我一直面临着类似的问题,除了文件可能不存在,在这种情况下,
terraform[plan | apply]
失败
确切地说:我需要将一个秘密从一个名称空间复制到另一个名称空间
我意识到通过使用提供者
步骤非常简单:
数据
kubernetes\u secret
资源中的数据
#/bin/bash
set-e
/bin/echo-n'{“令牌”:“'
kubectl get-n concur secrets/hashicorp concur引导acl令牌--模板={{.data.token}
/bin/echo-n'}'
tarraform来源:
data "external" "token" {
program = ["sh", "${path.module}/consul-token.sh"]
}
resource "kubernetes_secret" "consul-token" {
depends_on = [data.external.token]
metadata {
name = "consul-token"
namespace = "app"
}
data = {
token = base64decode(data.external.token.result.token)
}
}
和要求:
terraform {
required_providers {
external = {
source = "hashicorp/external"
version = ">= 2.0.0"
}
}
}
很抱歉否决投票,但这并没有解决问题:如何使用Terraform将文件(可能是非UTF-8)添加为机密值?相关问题:
terraform {
required_providers {
external = {
source = "hashicorp/external"
version = ">= 2.0.0"
}
}
}