问题标签 [terraform-provider-kubernetes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
321 浏览

terraform - Terraform 导入失败,因为 Kubernetes 提供程序依赖于数据源

使用 Terraform,我正在创建一个 Kubernetes 集群,安装nginx-ingress-controllerHelm 图表,然后为我的域添加一个 Route53 托管区域(包括指向由入口 Helm 图表创建的负载均衡器的通配符记录。

为此,我使用两个单独的 Terraform 文件,我的过程应该如下 -

  1. 将 Terraform 文件 1 用于applyVPC、EKS 集群和节点组。
  2. 使用 Helm CLI 安装nginx-ingress-controller图表(有一个与此问题无关的附加要求,这意味着 Terraform 无法安装 Helm 图表)。
  3. 将图表部署到的命名空间导入nginx-ingress-controllerTerraform 文件 2 的状态
  4. 使用 Terraform 文件 2 到applyRoute53 托管区域并记录入口所需。

我认为这会起作用,但是 Terraformimport命令有一个严重的限制 -

Terraform 在读取配置文件时的唯一限制是导入提供程序配置不能依赖于非变量输入。例如,提供者配置不能依赖于数据源。

因为我使用的是依赖数据源的 Kubernetes 提供程序,所以我遇到了这个限制。

考虑到以下因素,有没有一种方法可以使用 Terraform?

  • 我需要输出由applyTerraform 文件 2 创建的 Route53 托管区域的 NS 记录的值。因此,我不能在 Terraform 文件 1 中包含这些资源,因为apply如果模块的输出存在,​​则会失败/尚不存在的资源。
  • 必须导入命名空间,以便在destroy为 Terraform 文件 2 运行时将其销毁。如果不是,destroy则在为 Terraform 文件 1 运行时它将失败,因为 VPC 由于网络接口和安全性而无法删除由nginx-ingress-controllerHelm 图表创建的组。
  • 数据源提供的令牌aws_eks_cluster_auth仅持续 15 分钟(aws-iam-authenticator 无法提供更长的令牌),因此从 Terraform 文件 1 输出令牌是不合适的,因为它可能在使用时已经过期通过 Terraform 文件 2。

更新

我尝试使用基于exec 的凭据插件,因为这意味着不需要数据源,但这会导致 Terraform 直接失败。在这种情况下,Terraform 似乎在创建之前尝试创建配置文件module.kubernetes-cluster,因此集群不存在。

此提供程序配置 -

产生此错误 -

0 投票
2 回答
101 浏览

terraform - 为 Kubernetes 命名空间标签使用动态值

我正在使用 Terraform 管理我的本地 Kubernetes 集群命名空间,并希望在它们上包含一些自定义标签/注释。这是为了使审计更容易,而且我们有依赖标签/注释的变异 webhook。

我正在尝试做这样的事情(伪代码)

我的 var.namespaces 变量构造如下

我试图结束

我觉得一些本地人和动态块的混合将是解决方案,但我似乎无法以一种有效的方式将它们固定在一起

请问有什么建议吗?

0 投票
0 回答
111 浏览

terraform - Terraform 不会升级提供程序

我正在尝试将 terraform kubernetes 提供程序升级到最新版本 2.7.1。以下是当前 terraform 配置的摘录:

按照这些说明,我尝试了:

  1. 将版本更改为>= 2.5.0
  2. 将版本更改为2.7.1(甚至2.5.1,仅用于测试);

并运行terraform init -upgrade。不幸的是,尝试 (1) 没有效果,并且 (2) 给出了错误:

我尝试使用上述方法启动一个新项目(在一个空目录中),并且它正确安装了 version 2.7.1,因此我认为问题在于预先存在的 terraform 状态。如何升级提供程序?