Запретить использование kubeconfig по умолчанию модулем Terraform

Я пытаюсь создать несколько многоразовых модулей Terraform, которые предоставляют ресурсы Kubernetes в кластере. Мои модули не настраивают явно поставщика Kubernetes, ожидая, что настроенный будет создан "корневым" модулем. Я считаю, что это соответствует лучшим практикам Terraform.

Однако, если корневой модуль "забывает" предоставить настроенного поставщика Kubernetes, похоже, что Terraform предоставит его по умолчанию, и с поведением по умолчанию, использующим любой контекст, который в настоящее время может быть настроен в исполняющем пользователе. kubeconfig. Если пользователь не обращает внимания, он может случайно изменить ресурсы не в том кластере.

Есть ли способ предотвратить такое поведение и сказать "вы должны явно передать поставщика для использования этим модулем"?

1 ответ

Лучший вариант, который я придумал, - создать поставщика 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.
}

вы можете избежать случайного использования провайдера по умолчанию.

Это нормально, но немного неочевидно, пока вы не привыкнете к шаблону.

Другие вопросы по тегам