我可以通过 CDK 配置我的 EKS 集群的入站规则吗?

Can I configure my EKS cluster's inbound rules via CDK?

我想知道是否可以从 CDK 配置“public 访问源白名单”。我可以在网络选项卡下的控制台中查看和管理它,但在 the CDK docs 中找不到任何关于在部署期间设置白名单的信息。我尝试创建并分配一个安全组(下面的代码示例),但这没有用。此外,安全组被创建为“附加”安全组,而不是“集群”安全组。

declare const vpc: ec2.Vpc;
declare const adminRole: iam.Role;

const securityGroup = new ec2.SecurityGroup(this, 'my-security-group', {
    vpc,
    allowAllOutbound: true,
    description: 'Created in CDK',
    securityGroupName: 'cluster-security-group'
});

securityGroup.addIngressRule(
    ec2.Peer.ipv4('<vpn CIDR block>'),
    ec2.Port.tcp(8888),
    'allow frontend access from the VPN'
);

const cluster = new eks.Cluster(this, 'my-cluster', {
    vpc,
    clusterName: 'cluster-cdk',
    version: eks.KubernetesVersion.V1_21,
    mastersRole: adminRole,
    defaultCapacity: 0,
    securityGroup
});

更新: 我尝试了以下操作,它更新了 cluster 安全组,但我仍然能够访问前端当我不在 VPN 上时:

cluster.connections.allowFrom(
  ec2.Peer.ipv4('<vpn CIDER block>'),
  ec2.Port.tcp(8888)
);

更新 2: 我也试过了,即使我不在 VPN 上,我仍然可以访问我的应用程序的前端。但是我现在只能在 VPN 上使用 kubectl,这很好!这是向前迈出的一步,我至少以有用的方式提高了集群的安全性。

const cluster = new eks.Cluster(this, 'my-cluster', {
    vpc,
    clusterName: 'cluster-cdk',
    version: eks.KubernetesVersion.V1_21,
    mastersRole: adminRole,
    defaultCapacity: 0,
    endpointAccess: eks.EndpointAccess.PUBLIC_AND_PRIVATE.onlyFrom('<vpn CIDER block>')
});

一般来说,EKS 有两个相关的安全组:

  1. 节点使用的一种,AWS称之为“集群安全组”。它由 EKS 自动设置。除非您想要 (a) 更严格的默认规则 (b) 打开您的节点以进行维护任务(例如:ssh 访问),否则您不需要弄乱它。这就是您通过 cluster.connections.

    访问的内容
  2. 入口负载均衡器安全组。这是一个由 EKS 创建和管理的应用程序负载均衡器。在CDK中,可以这样创建:

const cluster = new eks.Cluster(this, 'HelloEKS', {
  version: eks.KubernetesVersion.V1_22,
  albController: {
    version: eks.AlbControllerVersion.V2_4_1,
  },
});

这将作为所有需要 Ingress 的内部服务的网关。您可以通过 cluster.albController 权限访问它,并像普通的 Application Load Balancer 一样向它添加规则。当 Ingress ALB 不存在时,我不知道 EKS 如何处理任务通信。

相关文档: