如何在Terraform中导入生成的Kubernetes集群的名称空间

时间:2019-09-10 07:06:28

标签: kubernetes import terraform kubernetes-namespace

在我的terraform配置文件中,我在GKE上创建了一个Kubernetes集群,并在创建时设置了一个Kubernetes提供程序来访问该集群并执行各种操作,如设置名称空间。

问题在于,在群集中创建了一些没有terraform的新名称空间,现在由于无法连接到群集,我尝试将这些名称空间导入我的状态似乎失败了,我认为这是由于以下原因(取自Terraform的import命令的官方文档):

  

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

我用来导入名称空间的命令非常简单:

terraform import kubernetes_namespace.my_new_namespace my_new_namespace

我也尝试使用-provdier=""-config="",但无济于事。

我的Kubernetes提供程序配置是这样的:

provider "kubernetes" {
  version = "~> 1.8"

  host  = module.gke.endpoint
  token = data.google_client_config.current.access_token

  cluster_ca_certificate = base64decode(module.gke.cluster_ca_certificate)
}

我要导入的名称空间资源的一个示例是:

resource "kubernetes_namespace" "my_new_namespace" {
  metadata {
    name = "my_new_namespace"
  }
}

导入命令将导致以下结果:

  

错误:获取http://localhost/api/v1/namespaces/my_new_namespace:拨打tcp [:: 1]:80:连接:连接被拒绝

很显然,它注定要失败,因为它试图达到localhost而不是实际的群集IP和配置。

此用例是否有解决方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

(1) 在您的 kubeconfig 文件中为您的 GKE 集群创建一个条目。

gcloud container clusters get-credentials cluster-name

见:https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#generate_kubeconfig_entry

(2) 将 terraform Kubernetes provider 指向您的 kubeconfig:

provider "kubernetes" {
  config_path = "~/.kube/config"
}