如何解决没有至少一个私有子网,无法在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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。