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

如何通过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的ARN
  • kubernetesVersion:对应高层的version参数

内容的提问来源于stack exchange,提问作者Ashish Tanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:04:53