【问题标题】:Retrieve token data from Kubernetes Service Account in Terraform从 Terraform 中的 Kubernetes 服务帐户检索令牌数据
【发布时间】:2019-09-28 12:37:19
【问题描述】:

我正在使用 terraform 创建一个 Kubernetes 服务帐户,并尝试从它创建的 Kubernetes Secret 中输出令牌。

resource "kubernetes_service_account" "ci" {
  metadata {
    name = "ci"
  }
}

data "kubernetes_secret" "ci" {
  metadata {
    name = "${kubernetes_service_account.ci.default_secret_name}"
  }
}

output "ci_token" {
  value = "${data.kubernetes_secret.ci.data.token}"
}

根据the docs,由于default_secret_name 的计算值,这应该使数据块延迟获取其值直到“应用”阶段,但是当我运行terraform apply 时,它给了我这个错误:

Error: Error running plan: 1 error(s) occurred:

* output.ci_token: Resource 'data.kubernetes_secret.ci' does not have attribute 'data.token' for variable 'data.kubernetes_secret.ci.data.token'

depends_on 添加到kubernetes_secret 数据块没有任何区别。

如果我注释掉 output 块,它会很好地创建资源,然后我可以取消注释,再次应用,一切正常,因为 Kubernetes Secret 已经存在。

我还提出了一个 Github 问题 here

更新

接受的答案确实解决了这个问题,但我省略了另一个输出以简化问题,这不适用于此解决方案:

output "ci_crt" {
  value = "${data.kubernetes_secret.ci.data.ca.crt}"
}
* output.ci_ca: lookup: lookup failed to find 'ca.crt' in:

${lookup(data.kubernetes_secret.ci.data, "ca.crt")}

由于a bug in Terraform,此特定问题是reported here,已在版本0.12 中修复。

【问题讨论】:

    标签: kubernetes terraform


    【解决方案1】:

    这行得通:

    resource "kubernetes_service_account" "ci" {
      metadata {
        name = "ci"
      }
    }
    
    data "kubernetes_secret" "ci" {
      metadata {
        name = kubernetes_service_account.ci.default_secret_name
      }
    }
    
    output "ci_token" {
      sensitive = true
      value = lookup(data.kubernetes_secret.ci.data, "token")
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2019-09-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 2013-04-16
      • 1970-01-01
      相关资源
      最近更新 更多