[英]Terraform Kubernetes Secrets not applying due to Namespace
我正在學習 terraform 並嘗試將 kubernetes 基礎架構轉換為 terraform。
我有一個 terraform 腳本,它創建一個給定的namespace
,然后從本地文件創建秘密。 由於命名空間的創建速度不夠快,大多數文件無法正確創建。
在繼續使用 terraform 腳本之前,是否有正確的方法來創建和等待名稱空間的確認? 比如depends_on
等?
我目前的做法:
resource "kubernetes_namespace" "namespace" {
metadata {
name = "specialNamespace"
}
}
resource "kubernetes_secret" "api-env" {
metadata {
name = var.k8s_name_api_env
namespace = "specialNamespace"
}
data = {
".api" = file("${path.cwd},${var.local_dir_path_api_env_file}")
}
}
resource "kubernetes_secret" "password-env" {
metadata {
name = var.k8s_name_password_env
namespace = "specialNamespace"
}
data = {
".password" = file("${path.cwd},${var.local_dir_path_password_env_file}")
}
}
resource "kubernetes_secret" "tls-crt-env" {
metadata {
name = var.k8s_name_tls_crt_env
namespace = "specialNamespace"
}
data = {
"server.crt" = file("${path.cwd},${var.local_dir_path_tls_crt_env_file}")
}
}
resource "kubernetes_secret" "tls-key-env" {
metadata {
name = var.k8s_name_tls_key_env
namespace = "specialNamespace"
}
data = {
"server.key" = file("${path.cwd},${var.local_dir_path_tls_key_env_file}")
}
}
由於有一種方法可以從kubernetes_namespace
資源中獲取metadata
的name
屬性,因此我建議您使用它。 例如,對於kubernetes_secret
資源:
resource "kubernetes_secret" "api-env" {
metadata {
name = var.k8s_name_api_env
namespace = kubernetes_namespace.namespace.metadata[0].name
}
data = {
".api" = file("${path.cwd},${var.local_dir_path_api_env_file}")
}
}
另外,請注意,大多數資源也有_v1
版本(例如,命名空間 [1]、秘密 [2] 等),所以我強烈建議使用這些資源。
[1] https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace_v1
[2] https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/secret_v1
比如depends_on等?
確切地。 在這里,您應該使用depends_on:
resource "kubernetes_secret" "api-env" {
depends_on = [resource.kubernetes_namespace.namespace]
...
}
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.