Terraform创建Kubernetes持久存储时报dial tcp连接拒绝错误如何解决
问题根因
你为kubernetes provider配置了自定义别名provider_kubernetes,但你的kubernetes_persistent_volume_claim、kubernetes_persistent_volume等K8s资源未显式指定使用该别名的provider,Terraform会默认调用无别名的默认kubernetes provider实例。未配置默认实例参数时,provider默认会请求本地80端口的K8s API,因此触发了连接localhost被拒绝的报错,请求确实没有触达你创建的远端K8s集群。
修复方案
- 方案1:给所有K8s相关资源显式绑定带别名的provider,示例配置如下:
resource "kubernetes_persistent_volume_claim" "your_pvc" { # 新增该行绑定自定义provider provider = kubernetes.provider_kubernetes metadata { name = "your-pvc-name" # 其余原有metadata配置 } spec { # 其余原有存储配置 } }
所有kubernetes_开头的资源都需要加上上述provider绑定配置。
- 方案2:如果你的整个Terraform配置中仅使用这一个Kubernetes provider,直接删除provider配置中的
alias = "provider_kubernetes"行即可,无别名的provider会作为默认实例被所有K8s资源自动调用,无需额外绑定。
额外配置建议
可在kubernetes provider配置中新增依赖声明,确保集群创建完成后再初始化provider,避免集群还未就绪就读取空的kube_config参数:
provider "kubernetes" { alias = "provider_kubernetes" host = module.kubernetes-service.kube_config.0.host username = module.kubernetes-service.kube_config.0.username password = module.kubernetes-service.kube_config.0.password client_certificate = base64decode(module.kubernetes-service.kube_config.0.client_certificate) client_key = base64decode(module.kubernetes-service.kube_config.0.client_key) cluster_ca_certificate = base64decode(module.kubernetes-service.kube_config.0.cluster_ca_certificate) # 新增依赖 depends_on = [module.kubernetes-service] }
内容的提问来源于stack exchange,提问作者Alam
相关产品推荐
相关产品推荐

