在我的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"
}
}
import命令将导致以下结果:
错误:获取http://localhost/api/v1/namespaces/my_new_namespace:拨号tcp [::1]:80:连接:连接被拒绝
很明显,它注定要失败,因为它试图访问localhost
,而不是实际的群集IP和配置。
此使用情形是否有变通方法?
先谢了。
2条答案
按热度按时间f3temu5u1#
问题出在动态数据提供程序上。
import
语句没有访问它的权限。对于导入过程,必须对提供程序值进行硬编码。
更改此内容:
致:
gcloud auth print-access-token
检索令牌。terraform state show module.gke.google_container_cluster.your_cluster_resource_name_here
检查创建的容器资源来检索IP和证书对于提供程序版本2+,必须删除
load_config_file
。就位后,导入并还原对提供程序的更改。
mwecs4sa2#
(1)在kubeconfig文件中为GKE集群创建一个条目。
参见:www.example.comhttps://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#generate_kubeconfig_entry
(2)将Terraform Kubernetes提供程序指向您的kubeconfig: