没有至少一个私有子网,无法在VPC中创建AWS-CDK EKS集群

问题描述

我正在尝试使用AWS CDK生成EKS集群。问题如下: 当我为不包含私有子网的EKS群集定义VPC时,//Remove foreign keys for Now DB::statement('SET FOREIGN_KEY_CHECKS = 0'); $this->call(RolesTableSeeder::class); $this->call(UsersTableSeeder::class); // Enable foreign keys DB::statement('SET FOREIGN_KEY_CHECKS = 1'); 抛出以下错误

Vpc的定义和用法

cdk synth

错误是:

jsii.errors.JSIIError:此中没有“私有”子网组 VPC。可用类型:公共

当我在群集定义中添加额外的专用子网时,例如

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",subnet_type=ec2.subnetType.PUBLIC
                    )
                ]
            ),

ec2.subnetConfiguration( name="subnet-3",subnet_type=ec2.subnetType.PRIVATE ) 效果很好。

我想知道是否可以在不创建专用子网的情况下生成EKS群集,因为我根本不需要它们,并且使用专用子网会产生额外费用。在terraform中可以肯定地做到,AWS CDK怎么办?

解决方法

不确定以下是根本原因,但确实有帮助。因此eks.Cluster的init方法包含一个参数-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集群。

P.S。上面的示例是在TypeScript中而不是Python

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

cluster = eks.Cluster(self,"airflow-eks",...
            vpc_subnets = eks_vpc.select_subnets(subnet_type=ec2.SubnetType.PUBLIC,one_per_az=True).subnets,...
        )
,

您可以通过将 assignPublicIp: true,添加到 FargateServiceProps 来尝试吗? 您可以参考github ticket #7062了解更多详情。

Java 实现如下

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