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

CDK部署EKS集群时Custom资源ETIMEDOUT超时失败求助

问题原因与解决方案

核心原因

你的问题根源在于CDK通过Vpc.fromLookup识别子网类型时的逻辑限制:

  • CDK默认根据子网路由表判断类型:仅指向互联网网关(IGW)的子网被标记为Public,指向NAT网关的为Private,无上述路由的则被归类为Isolated。
  • 你的子网通过中转网关(Transit Gateway)实现互联网访问,不符合CDK默认的子网类型判定规则,因此被误标记为Isolated。

这种误判导致CDK在部署EKS集群的自定义资源(如负责配置AwsAuth的Lambda函数)时,做出了错误的网络配置:

  1. 为Lambda函数分配的安全组默认不允许对外出站访问;
  2. 由于子网被标记为Isolated,CDK不为Lambda分配弹性公网IP(EIP);
  3. 最终Lambda无法通过中转网关访问所需的AWS服务端点(如STS、EKS控制平面),触发ETIMEDOUT错误(你看到的34.223.18.133是AWS服务的公共端点IP,大概率是STS或EKS相关服务)。

解决方法

方法1:手动指定子网类型

在通过Subnet.fromSubnetId获取子网时,手动指定子网类型为PRIVATE_WITH_EGRESS,覆盖CDK的自动判定:

const az1Subnet = aws_ec2.Subnet.fromSubnetId(
  this,
  "az1Subnet",
  "subnet-abc",
  { subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS }
);
const az2Subnet = aws_ec2.Subnet.fromSubnetId(
  this,
  "az2Subnet",
  "subnet-xyz",
  { subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS }
);

这样CDK会将子网视为具有出站访问能力的私有子网,为Lambda函数配置正确的网络权限。

方法2:为自定义资源Lambda添加出站权限

显式配置EKS集群的自定义资源Lambda的安全组,允许HTTPS(443端口)出站访问:

const cluster = new aws_eks.Cluster(this, "MyCluster", {
  // 保留现有配置...
  kubectlLambdaRole: new aws_iam.Role(this, "KubectlRole", {
    assumedBy: new aws_iam.ServicePrincipal("lambda.amazonaws.com"),
    managedPolicies: [
      aws_iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")
    ]
  }),
  kubectlSecurityGroup: new aws_ec2.SecurityGroup(this, "KubectlSG", {
    vpc: existingVpc,
    allowAllOutbound: true // 可按需限制到AWS服务IP范围,增强安全性
  })
});

同时确保子网的路由表已配置通过中转网关访问互联网的规则,且安全组允许与中转网关的通信。

方法3:调整EKS端点访问配置

将endpointAccess设为PUBLIC_AND_PRIVATE,并确保:

  • EKS集群的公共端点访问控制列表(ACL)允许Lambda所在子网的IP范围;
  • Lambda所在子网能通过中转网关访问互联网。

额外注意事项

  • 修改配置后,需清理cdk.context.json中的旧VPC信息,重新运行cdk synth获取正确的VPC元数据;
  • 若启用工作节点,需确保节点安全组允许与EKS控制平面通信,且节点能通过中转网关拉取容器镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:27:30