Amazon web services 在没有至少1个专用子网的VPC中,无法创建AWS-CDK EKS群集

Amazon web services 在没有至少1个专用子网的VPC中,无法创建AWS-CDK EKS群集,amazon-web-services,aws-cdk,amazon-eks,Amazon Web Services,Aws Cdk,Amazon Eks,我正在尝试使用AWS CDK生成EKS集群。问题如下: 当我为EKS集群定义VPC时,它不包含私有子网,cdk synth抛出下面的错误 专有网络的定义和使用: cluster = eks.Cluster(self, "airflow-eks", endpoint_access=eks.EndpointAccess.PUBLIC, vpc=ec2.Vpc(self, "airflow-eks-vpc", ci

我正在尝试使用AWS CDK生成EKS集群。问题如下: 当我为EKS集群定义VPC时,它不包含私有子网,
cdk synth
抛出下面的错误

专有网络的定义和使用:

cluster = eks.Cluster(self, "airflow-eks",
            endpoint_access=eks.EndpointAccess.PUBLIC,
            vpc=ec2.Vpc(self, "airflow-eks-vpc", cidr="172.16.0.0/22", max_azs=2,
                subnet_configuration=[
                    ec2.SubnetConfiguration(
                        name="subnet-1",
                        cidr_mask=27,
                        subnet_type=ec2.SubnetType.PUBLIC
                    ),
                    ec2.SubnetConfiguration(
                        name="subnet-2",
                        cidr_mask=27,
                        subnet_type=ec2.SubnetType.PUBLIC
                    )
                ]
            ),
错误是:

jsii.errors.JSIIError:此文件中没有“专用”子网组 专有网络。可用类型:公共

当我向集群定义中添加额外的私有子网时,如

ec2.SubnetConfiguration(
                        name="subnet-3",
                        cidr_mask=27,
                        subnet_type=ec2.SubnetType.PRIVATE
                    )
cdk-synth
运行良好


我想知道是否有可能在不创建私有子网的情况下生成EKS群集,因为我根本不需要它们,而且使用私有子网会产生额外的成本。在Terraform中,这是可以肯定的,那么AWS CDK呢?

不确定以下因素是否是根本原因,但它起到了帮助作用。因此,
eks.Cluster
init方法包含一个param-
vpcSubnets
,它是可选的,默认情况下包括所有公共和私有(!)子网。因此,当明确定义此参数时,即

const cluster = new eks.Cluster(stack,'my-ts-eks',
    {
        vpc: eks_vpc,
        vpcSubnets:[
            {
                subnetType: ec2.SubnetType.PUBLIC,
                onePerAz: true
            }
        ],
        defaultCapacity: 0,
        version: eks.KubernetesVersion.V1_17,
    });
EKS群集可以在没有专用子网的情况下创建

另外,上面的例子是用TypeScript而不是Python编写的

p.p.S在Python中,它看起来像:


您可以通过将
assignPublicIp:true
添加到FargateServiceProps来尝试它吗。 你可以参考更多细节

在Java中,实现如下

ApplicationLoadBalancedFargateService.Builder.create(this, "FargateServiceName").cluster(cluster)
            .assignPublicIp(true)
            .cpu(512) // Default is 256
            .
            .
            .
            .build();
ApplicationLoadBalancedFargateService.Builder.create(this, "FargateServiceName").cluster(cluster)
            .assignPublicIp(true)
            .cpu(512) // Default is 256
            .
            .
            .
            .build();