为什么创建 EKS 集群会自动创建我已经存在的安全组
Why creating EKS cluster auto-creates security groups I already have in place
我正在尝试通过 CloudFormation 创建 EKS 集群。我已经阅读了 Amazon 的所有 EKS Security Group guidelines 并且已经建立了我的安全组,因为我想要更清晰更整洁的命名并且能够预先定义这些和其他一些(BastionHost SG 和 RDS SG)之间的复杂性.
看在上帝的份上,我不明白为什么它总是自己创建集群安全组,而忽略了我在模板中作为参考传递的集群安全组,同样的事情也发生在 NodeGroup 的远程访问安全组中我在其中指定堡垒主机的安全组。它没有接受它,而是继续创建自己的新安全组,该安全组以我的 BastionHost 的安全组为源。
真的很困惑。我能克服这个吗?
更新:
所以我拥有 Amazon 为我的 EKS 建议的 3 个安全组。我们称它们为 cluster-sg、control-plane-sg 和 nodegroup-sg。还假设它们已按照上述指南进行配置,采用“推荐的”inbound/outbound 流量指南,而不是最低限度(尽管我认为这在这部分没有发挥重要作用)。此外还有一个单独的 EC2 实例的安全组,它是我的堡垒主机,我们称之为 bastion-sg.
我的 CloudFormation 模板如下所示:
EKSCluster:
Type: 'AWS::EKS::Cluster'
Properties:
Name: 'my-cluster'
Version: '1.17'
ResourcesVpcConfig:
SecurityGroupIds:
- !Ref clusterSG #do I need this cluster-sg here? do I need also nodegroup-sg? do I need both?
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
- !Ref PrivateSubnet3
RoleArn: !GetAtt ClusterInstanceRole.Arn
NodeGroupCluster:
Type: AWS::EKS::Nodegroup
Properties:
ClusterName: !Ref EKSCluster
DiskSize: !Ref ClusterDiskSize
InstanceTypes: !Ref NodeInstanceTypes
ForceUpdateEnabled: false
NodegroupName: 'cluster-nodegroup'
NodeRole: !GetAtt NodeInstanceRole.Arn #this is a resource that I haven't provided
RemoteAccess:
Ec2SshKey: !Ref EC2KeyPair
SourceSecurityGroups:
- !Ref bastionSG
ScalingConfig:
DesiredSize: !Ref DesiredNodeSize
MaxSize: !Ref MaximumNodeSize
MinSize: !Ref MinimumNodeSize
Subnets:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
- !Ref PrivateSubnet3
总而言之,问题有两个方面:
a) 我似乎缺少在配置和安全组方面放置什么的地方。即我有 3 个亚马逊为整个集群推荐的安全组,但只有两个地方接受了安全组。
b) 我尝试过的任何组合(根据我原来的 post)都没有考虑 cluster-sg 但会自动创建一个,这很不方便为了我的 IaaC 和自动部署理念。
我遇到了同样的问题。 EKS 控制平面位于 AWS 内某处的单独 VPC 上。当我们创建 EKS 集群时,它会自动创建一个 ENI,它将附加一个安全组,该安全组将用于控制平面和工作节点之间的通信。无论如何,集群的这个 SG 总是会被创建。现在,如果您在 cloudformation 脚本中将其他安全组作为 SG 的参数传递,它只会将这些安全组与创建的 ENI 附加在一起。如果您启动 Nodegroup NG-1 并将其附加到不同的安全组,请确保在集群 cloudformation 脚本中提供 SG,以便它可以将该安全组附加到 ENI 并打开相应的端口,以便工作节点可以与之通信集群。
我使用专用 SG 创建了启动模板,并使用相同的启动模板创建了一个 NodeGroup。此外,我在 CF 的集群脚本中提到了我的 Launchtemplate 的 SG,以确保我的节点可以与控制平面通信,否则节点组将无法启动。
简而言之,请记住以下几点:
-总会有集群创建的安全组
-ClusterSG 或您在 cf 集群脚本中传递的任何其他 SG 将附加到 EKS 在启动时创建的 ENI。
请参阅以下文档以获得更好的理解。
https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html
我正在尝试通过 CloudFormation 创建 EKS 集群。我已经阅读了 Amazon 的所有 EKS Security Group guidelines 并且已经建立了我的安全组,因为我想要更清晰更整洁的命名并且能够预先定义这些和其他一些(BastionHost SG 和 RDS SG)之间的复杂性.
看在上帝的份上,我不明白为什么它总是自己创建集群安全组,而忽略了我在模板中作为参考传递的集群安全组,同样的事情也发生在 NodeGroup 的远程访问安全组中我在其中指定堡垒主机的安全组。它没有接受它,而是继续创建自己的新安全组,该安全组以我的 BastionHost 的安全组为源。
真的很困惑。我能克服这个吗?
更新: 所以我拥有 Amazon 为我的 EKS 建议的 3 个安全组。我们称它们为 cluster-sg、control-plane-sg 和 nodegroup-sg。还假设它们已按照上述指南进行配置,采用“推荐的”inbound/outbound 流量指南,而不是最低限度(尽管我认为这在这部分没有发挥重要作用)。此外还有一个单独的 EC2 实例的安全组,它是我的堡垒主机,我们称之为 bastion-sg.
我的 CloudFormation 模板如下所示:
EKSCluster:
Type: 'AWS::EKS::Cluster'
Properties:
Name: 'my-cluster'
Version: '1.17'
ResourcesVpcConfig:
SecurityGroupIds:
- !Ref clusterSG #do I need this cluster-sg here? do I need also nodegroup-sg? do I need both?
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
- !Ref PrivateSubnet3
RoleArn: !GetAtt ClusterInstanceRole.Arn
NodeGroupCluster:
Type: AWS::EKS::Nodegroup
Properties:
ClusterName: !Ref EKSCluster
DiskSize: !Ref ClusterDiskSize
InstanceTypes: !Ref NodeInstanceTypes
ForceUpdateEnabled: false
NodegroupName: 'cluster-nodegroup'
NodeRole: !GetAtt NodeInstanceRole.Arn #this is a resource that I haven't provided
RemoteAccess:
Ec2SshKey: !Ref EC2KeyPair
SourceSecurityGroups:
- !Ref bastionSG
ScalingConfig:
DesiredSize: !Ref DesiredNodeSize
MaxSize: !Ref MaximumNodeSize
MinSize: !Ref MinimumNodeSize
Subnets:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
- !Ref PrivateSubnet3
总而言之,问题有两个方面: a) 我似乎缺少在配置和安全组方面放置什么的地方。即我有 3 个亚马逊为整个集群推荐的安全组,但只有两个地方接受了安全组。 b) 我尝试过的任何组合(根据我原来的 post)都没有考虑 cluster-sg 但会自动创建一个,这很不方便为了我的 IaaC 和自动部署理念。
我遇到了同样的问题。 EKS 控制平面位于 AWS 内某处的单独 VPC 上。当我们创建 EKS 集群时,它会自动创建一个 ENI,它将附加一个安全组,该安全组将用于控制平面和工作节点之间的通信。无论如何,集群的这个 SG 总是会被创建。现在,如果您在 cloudformation 脚本中将其他安全组作为 SG 的参数传递,它只会将这些安全组与创建的 ENI 附加在一起。如果您启动 Nodegroup NG-1 并将其附加到不同的安全组,请确保在集群 cloudformation 脚本中提供 SG,以便它可以将该安全组附加到 ENI 并打开相应的端口,以便工作节点可以与之通信集群。
我使用专用 SG 创建了启动模板,并使用相同的启动模板创建了一个 NodeGroup。此外,我在 CF 的集群脚本中提到了我的 Launchtemplate 的 SG,以确保我的节点可以与控制平面通信,否则节点组将无法启动。
简而言之,请记住以下几点:
-总会有集群创建的安全组
-ClusterSG 或您在 cf 集群脚本中传递的任何其他 SG 将附加到 EKS 在启动时创建的 ENI。
请参阅以下文档以获得更好的理解。
https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html