经过很多努力,最终,在这篇文章的帮助下:我从Terraform google_service_account_key资源中获得了可用的P12包/私钥,很明显,Terraform不支持这样的P12密钥库。
<<p>我的要求/strong>:我正在使用TF的Kubernetes提供程序来创建部署。在这种情况下,我必须使用测试设置一个秘密。p12文件。Terraform期望文件是UTF-8编码的。但是我的p12密钥库不是UTF-8编码的。简单的编码和解码会导致UTF-8错误。我的方法:
- 使用
cat test.p12 | base64 -w0 > encodeout.txt
将p12密钥库编码为UTF-8编码的文本文件。将其存储为地形变量encoded_p12。 接下来,我将这个文件传递到下面
resource "kubernetes_secret_v1" "test_keystore" {
metadata {
name = "test-keystore"
namespace = test
}
type = "Opaque"
data = {
"test.p12" = base64decode(var.encoded_p12)
}
}
但是这里它将失败,因为terraform不能解码为UTF-8编码的有效的p12文件。
- 所以,首先解码encoded_p12如下-
resource "local_file" "decodep12" {
content = var.encoded_p12
filename = "decoded_p12.p12"
provisioner "local-exec" {
command = "openssl enc -d -base64 -in "${content}" ${filename}"
}
}
- 试图将这个动态创建的解码文件作为 传递
resource "kubernetes_secret_v1" "app_keystore" {
metadata {
name = "test-keystore"
namespace = test
}
type = "Opaque"
data = {
"test.p12" = file(${filename})
}
}
这种方法是否有效,是否有任何修正或更好的解决方案?限制是我不能直接将。p12文件传递给数据块。
有一个更简单的选择。
对于这种情况,kubernetes_secret_v1资源有一个binary_data参数,它与Terraform语言中的filebase64函数很好地配对:
resource "kubernetes_secret_v1" "app_keystore" {
metadata {
name = "test-keystore"
namespace = "test"
}
type = "Opaque"
binary_data = {
"test.p12" = filebase64("decoded_p12.p12")
}
}