我可以通过 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 有两个相关的安全组:
节点使用的一种,AWS称之为“集群安全组”。它由 EKS 自动设置。除非您想要 (a) 更严格的默认规则 (b) 打开您的节点以进行维护任务(例如:ssh 访问),否则您不需要弄乱它。这就是您通过 cluster.connections
.
访问的内容
入口负载均衡器安全组。这是一个由 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 如何处理任务通信。
相关文档:
我想知道是否可以从 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 有两个相关的安全组:
节点使用的一种,AWS称之为“集群安全组”。它由 EKS 自动设置。除非您想要 (a) 更严格的默认规则 (b) 打开您的节点以进行维护任务(例如:ssh 访问),否则您不需要弄乱它。这就是您通过
访问的内容cluster.connections
.入口负载均衡器安全组。这是一个由 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 如何处理任务通信。
相关文档: