You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform创建EKS PersistentVolume时报dial tcp i/o timeout错误

报错信息

执行资源创建操作时返回报错:

https://***.eks.amazonaws.com/api/v1/persistentvolumes: dial tcp *****:443: i/o timeout
问题场景

通过Terraform为AWS EKS集群部署存储资源时,EBS卷已创建成功,但创建PersistentVolume资源时触发上述报错,涉及的Terraform配置如下:

resource "kubernetes_persistent_volume" "api-application-pv" {
  metadata {
    name            = "api-application-pv"
  }
  spec {
    capacity = {
      storage = "2Gi"
    }
    
    access_modes    = ["ReadWriteMany"]
    
    persistent_volume_source {
      aws_elastic_block_store {
        volume_id   = aws_launch_template.default.arn
      }
    }
  }
}

resource "kubernetes_persistent_volume_claim" "api-application-pvc" {
  metadata {
    name            = "api-application-pvc"
  }
  spec {
    resources {
      requests = {
        storage     = "2Gi"
      }
    }
    access_modes    = ["ReadWriteMany"]
    storage_class_name = "gp2"
   volume_name = "${kubernetes_persistent_volume.api-application-pv.metadata.0.name}"
  }
  
  wait_until_bound = false
  depends_on = [kubernetes_persistent_volume.api-application-pv]
}
resource "aws_launch_template" "default" {
  name_prefix            = "eks-stage-template"
  description            = "eks-stage-template"
  update_default_version = true

  block_device_mappings {
    device_name = "/dev/xvda"

    ebs {
      volume_size           = 50
      volume_type           = "gp2"
      delete_on_termination = true
      encrypted             = true
    }
  } 
}
报错原因

报错分为两类触发原因,需分别排查:

  • 基础网络连通性故障:运行Terraform的执行节点无法和EKS集群API Server的443端口建立TCP连接,常见触发场景包括:
    • 公网执行Terraform时,EKS API Server关联的安全组未放通执行节点公网IP的443入站流量
    • VPC内网执行Terraform时,路由表、安全组规则拦截了执行节点到EKS API端点的访问流量,VPC端点配置错误也会导致该问题
  • Terraform存储配置逻辑错误:现有配置存在多处不符合EKS EBS存储使用规则的问题,会间接加剧资源创建异常:
    • PV引用的存储ID错误:aws_elastic_block_store块下的volume_id填写的是EC2启动模板的ARN,并非独立EBS数据卷的ID,启动模板中定义的块设备是EKS节点的系统盘,无法作为PV持久化存储使用
    • 访问模式配置不兼容:EBS为块存储类型,仅支持ReadWriteOnce单节点读写访问模式,配置ReadWriteMany多节点读写模式不符合EBS的能力边界
    • PVC配置冲突:手动创建静态PV绑定场景下,PVC指定了gp2动态存储类,会和静态PV的绑定逻辑产生冲突
解决方案

按以下顺序排查修复:

  1. 先修复EKS API连通性问题
    • 核对网络访问规则:公网执行时,在EKS集群安全组添加入站规则,允许执行Terraform节点的公网IP访问443端口;内网执行时,确认VPC路由表、安全组放通执行节点到EKS API端点的443流量,使用VPC端点访问EKS的场景需同步核对端点的安全组、关联路由配置
    • 连通性校验:在执行Terraform的节点上执行命令curl -k https://<替换为实际EKS API端点地址>:443/version,能正常返回Kubernetes版本信息即为连通正常
  2. 修正Terraform存储配置
    • 创建独立的EBS数据卷供PV挂载使用,注意EBS卷需和EKS工作节点部署在同一可用区:
      resource "aws_ebs_volume" "api_application_ebs" {
        availability_zone = "替换为EKS节点所在可用区,例如us-east-1a"
        size              = 2
        type              = "gp2"
        encrypted         = true
      }
      
    • 修正PV配置,替换错误的volume_id引用,同步修改访问模式为EBS兼容的类型:
      resource "kubernetes_persistent_volume" "api-application-pv" {
        metadata {
          name = "api-application-pv"
        }
        spec {
          capacity = {
            storage = "2Gi"
          }
          access_modes = ["ReadWriteOnce"]
          persistent_volume_source {
            aws_elastic_block_store {
              volume_id = aws_ebs_volume.api_application_ebs.id
              fs_type   = "ext4"
            }
          }
        }
      }
      
    • 修正PVC配置,移除冲突的存储类配置,同步修改访问模式:
      resource "kubernetes_persistent_volume_claim" "api-application-pvc" {
        metadata {
          name = "api-application-pvc"
        }
        spec {
          resources {
            requests = {
              storage = "2Gi"
            }
          }
          access_modes = ["ReadWriteOnce"]
          volume_name  = kubernetes_persistent_volume.api-application-pv.metadata[0].name
        }
        wait_until_bound = false
        depends_on = [kubernetes_persistent_volume.api-application-pv]
      }
      
    • 配置修正后重新执行terraform plan和terraform apply即可完成资源创建。

内容的提问来源于stack exchange,提问作者Hema Sri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:15:54