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

AWS CDK初始化含隔离子网的VPC用于Fargate集群时报错

问题:使用@aws-cdk/1.174.0部署EKS Fargate集群时VPC子网类型报错

在使用@aws-cdk/1.174.0版本创建包含PUBLIC和PRIVATE_ISOLATED子网的VPC后,部署EKS Fargate集群时触发错误,提示VPC中不存在'Private'子网组,可用子网类型为Isolated、Deprecated_Isolated、Public。

用户代码如下:

this.vpc = new ec2.Vpc(this, `horizonCloudVpc`, {
    cidr: '10.0.0.0/16',
    vpcName: `horizonCloudVpc-${envName}`,
    enableDnsHostnames: true,
    enableDnsSupport: true,
    maxAzs: 2,
    subnetConfiguration: [
      {
        name: 'public-subnet',
        subnetType: ec2.SubnetType.PUBLIC,
        cidrMask: 24,
      },
      {
        name: 'isolated-subnet',
        subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
        cidrMask: 24,
      },
    ]
});

const clusterAdmin = new Role(this, 'eksClusterMasterRole', {
    roleName: `clusterMasterRole-${envName}`,
    assumedBy: new AccountRootPrincipal(),
});

const cluster = new eks.FargateCluster(this, 'horizonCloudEks', {
  version: eks.KubernetesVersion.V1_21,
  vpc: vpc,
  clusterName: `horizonCloudEks-${envName}`,
  endpointAccess: eks.EndpointAccess.PUBLIC,
  mastersRole: clusterAdmin,
});

报错信息:

/home/runner/work/horizon/horizon/cdk/node_modules/@aws-cdk/aws-ec2/lib/vpc.ts:606
      throw new Error(`There are no '${subnetType}' subnet groups in this VPC. Available types: ${availableTypes}`);
            ^
Error: There are no 'Private' subnet groups in this VPC. Available types: Isolated,Deprecated_Isolated,Public

解决方案

你的推测完全正确,EKS Fargate集群默认依赖PRIVATE_WITH_NAT类型的子网(对应报错里的'Private'子网组)。原因是Fargate Pod需要访问公网拉取镜像、连接AWS服务等,而PRIVATE_ISOLATED子网没有NAT网关,无法出站访问公网,满足不了Fargate的网络需求。

方法一:添加PRIVATE_WITH_NAT子网(推荐)

修改VPC的子网配置,新增PRIVATE_WITH_NAT类型的子网:

this.vpc = new ec2.Vpc(this, `horizonCloudVpc`, {
    cidr: '10.0.0.0/16',
    vpcName: `horizonCloudVpc-${envName}`,
    enableDnsHostnames: true,
    enableDnsSupport: true,
    maxAzs: 2,
    subnetConfiguration: [
      {
        name: 'public-subnet',
        subnetType: ec2.SubnetType.PUBLIC,
        cidrMask: 24,
      },
      {
        name: 'private-nat-subnet', // 新增带NAT的私有子网
        subnetType: ec2.SubnetType.PRIVATE_WITH_NAT,
        cidrMask: 24,
      },
      {
        name: 'isolated-subnet',
        subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
        cidrMask: 24,
      },
    ]
});

如果不需要PRIVATE_ISOLATED子网,也可以直接将其替换为PRIVATE_WITH_NAT类型。

方法二:显式指定使用Public子网(不推荐生产环境)

如果临时测试需要,也可以在FargateCluster配置中强制指定使用Public子网,但这会让Pod直接暴露在公网,存在安全风险:

const cluster = new eks.FargateCluster(this, 'horizonCloudEks', {
  version: eks.KubernetesVersion.V1_21,
  vpc: vpc,
  clusterName: `horizonCloudEks-${envName}`,
  endpointAccess: eks.EndpointAccess.PUBLIC,
  mastersRole: clusterAdmin,
  vpcSubnets: [{ subnetType: ec2.SubnetType.PUBLIC }] // 强制指定Public子网
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:20:44