Terraform配置Kubernetes Provider访问EKS集群遇本地连接拒绝错误
排查Terraform Kubernetes Provider连接localhost而非EKS集群的问题
问题场景
在A工作区创建EKS集群后,在B工作区通过配置带alias的Kubernetes Provider尝试访问该集群资源,但执行terraform plan/apply时出现错误:
Get "http://localhost/api/v1/namespaces/***/***/***": dial tcp 127.0.0.1:80: connect: connection refused
但Provider配置的host字段明明是EKS集群的endpoint,并非localhost。
排查方向
1. Kubernetes资源未绑定指定的Provider
你给Provider设置了alias = "aws",Terraform不会自动将这个Provider作为默认使用。所有需要访问该EKS集群的Kubernetes资源(比如Deployment、Service、ConfigMap等)必须显式指定Provider别名,否则Terraform会调用默认的Kubernetes Provider——而未配置的默认Provider会尝试读取本地kubeconfig,若本地无有效配置就会 fallback到localhost:80。
示例:创建Deployment时必须指定Provider
resource "kubernetes_deployment" "demo" { provider = kubernetes.aws # 关键:绑定到你配置的带alias的Provider metadata { name = "demo-deployment" } spec { replicas = 1 # ... 其他部署配置 } }
2. 远程状态输出的集群信息无效
检查data.terraform_remote_state.kubernetes是否正确输出了EKS集群的endpoint和CA证书:
- 执行
terraform console,输入data.terraform_remote_state.kubernetes.outputs.eks_cluster_endpoint,查看返回值是否为有效的EKS地址(格式类似https://xxxx.eks.amazonaws.com) - 若返回为空或错误值,说明创建EKS集群的工作区未正确输出这些字段,需要在A工作区补充输出配置:
# A工作区(创建EKS集群的工作区)的输出配置 output "eks_cluster_endpoint" { value = aws_eks_cluster.my_eks.endpoint } output "cluster_certificate_authority_data" { value = aws_eks_cluster.my_eks.certificate_authority[0].data }
3. AWS EKS认证数据源配置错误
data.aws_eks_cluster_auth.default需要指定正确的EKS集群名称,否则无法获取有效的认证token,导致Provider初始化失败并 fallback到localhost:
data "aws_eks_cluster_auth" "default" { # 可从远程状态获取集群名称,或直接指定 name = data.terraform_remote_state.kubernetes.outputs.eks_cluster_name }
4. Provider核心配置字段验证
确认Provider的三个核心字段取值正确:
host必须是完整的HTTPS地址(EKS集群endpoint均为HTTPS)cluster_ca_certificate已通过base64decode正确解码token是有效的EKS认证token
可通过terraform console逐一验证这些字段的实际取值。
内容的提问来源于stack exchange,提问作者Rémy Ntshaykolo
相关产品推荐
相关产品推荐

