0

我正在尝试创建一些可重用的 Terraform 模块,在集群上提供 Kubernetes 资源。我的模块没有显式配置 Kubernetes 提供程序,期望配置的提供程序将由“根”模块创建。我相信这符合Terraform 最佳实践

但是,如果根模块“忘记”提供已配置的 Kubernetes 提供程序,Terraform 似乎会默认提供一个,并且默认行为是使用当前在执行用户的kubeconfig. 如果用户没有注意,他们可能会无意中最终修改错误集群上的资源。

有没有办法防止这种行为并有效地说“你必须明确地传递一个提供者才能使用这个模块”?

4

1 回答 1

2

我想出的最佳选择是在模块中创建一个 Kubernetes 提供程序,例如:

# Prevents this module from loading a default context from local kubeconfig when calling module forgets to define a Kubernetes provider
provider "kubernetes" {
  load_config_file = false
}

然后,只要调用模块提供不同的实例,例如:

provider "kubernetes" {
  # properly configure stuff here
}

module "my-module" {
  source              = "blah"
  providers = {
    kubernetes = kubernetes
  }
  etc.
}

您可以避免意外使用默认提供程序。

这很好,但在你习惯这种模式之前有点不明显。

于 2019-11-14T16:01:26.040 回答