如何通过AWS CDK Java将EKS集群认证模式改为API_AND_CONFIG_MAP
解决AWS CDK Java创建EKS集群时修改认证模式为API_AND_CONFIG_MAP的问题
方案1:修改高层Cluster对应的底层CfnCluster资源
你之前尝试的方法未生效,大概率是属性设置时机或方式不对。可以通过addPropertyOverride直接覆盖底层CloudFormation属性,确保认证模式被正确设置:
// 先创建高层Cluster实例 Cluster cluster = Cluster.Builder.create(this, "eks") .vpc(vpc) .version(KubernetesVersion.V1_24) .vpcSubnets(List.of(SubnetSelection.builder().subnetType(SubnetType.PRIVATE_ISOLATED).build())) .endpointAccess(EndpointAccess.PRIVATE) .clusterName(clusterName) .kubectlLayer(new KubectlLayer(this, kubectLayerName)) .defaultCapacity(0) .mastersRole(clusterAdmin) .placeClusterHandlerInVpc(true) .clusterHandlerEnvironment(Map.of("AWS_STS_REGIONAL_ENDPOINTS", "regional")) .kubectlEnvironment(Map.of("AWS_STS_REGIONAL_ENDPOINTS", "regional")) .build(); // 获取底层的CfnCluster资源并修改认证模式 CfnCluster cfnCluster = (CfnCluster) cluster.getNode().getDefaultChild(); cfnCluster.addPropertyOverride("AccessConfig", Map.of( "AuthenticationMode", "API_AND_CONFIG_MAP" ));
这种方式保留了高层Cluster的所有封装特性(比如kubectl配置、mastersRole关联等),只需补充修改认证模式的属性即可。
方案2:直接使用底层CfnCluster创建集群
如果需要完全控制底层CloudFormation资源,可以直接用CfnCluster,以下是对应你原有配置的示例:
// 1. 准备VPC相关资源:获取私有子网ID和安全组 List<String> privateSubnetIds = vpc.selectSubnets(SubnetSelection.builder() .subnetType(SubnetType.PRIVATE_ISOLATED) .build()).getSubnetIds(); // 创建专门的EKS集群安全组,或使用VPC默认安全组 SecurityGroup clusterSg = SecurityGroup.Builder.create(this, "EksClusterSg") .vpc(vpc) .allowAllOutbound(true) .build(); // 2. 创建底层CfnCluster CfnCluster cfnCluster = CfnCluster.Builder.create(this, "EksCluster") .name(clusterName) .kubernetesVersion("1.24") .roleArn(clusterAdmin.getRoleArn()) // 对应原有Cluster的VPC和子网配置 .resourcesVpcConfig(CfnCluster.ResourcesVpcConfigProperty.builder() .subnetIds(privateSubnetIds) .securityGroupIds(List.of(clusterSg.getSecurityGroupId())) .endpointPrivateAccess(true) // 对应EndpointAccess.PRIVATE .endpointPublicAccess(false) .build()) // 设置认证模式 .accessConfig(CfnCluster.AccessConfigProperty.builder() .authenticationMode("API_AND_CONFIG_MAP") .build()) .build(); // 注意:使用CfnCluster时,高层Cluster封装的kubectl、mastersRole自动关联等特性需要手动处理,比如: // - 手动配置KubectlLayer的权限 // - 自行通过IAM策略关联mastersRole的权限
关键参数对应说明
resourcesVpcConfig:对应高层Cluster的vpc、vpcSubnets、endpointAccess配置roleArn:对应mastersRole的ARNkubernetesVersion:对应高层的version参数
内容的提问来源于stack exchange,提问作者Ashish Tanna
相关产品推荐
相关产品推荐

