如何在CloudFormation模板中指定现有节点安全组创建EKS工作节点
如何让EKS工作节点引用现有安全组(CloudFormation实现)
其实很简单,核心就是在你的CloudFormation模板里,明确指定EKS节点组使用你已有的安全组ID,同时移除原本自动创建安全组的配置就行。下面一步步来:
1. 先确认现有安全组满足EKS节点要求
这步很关键,不然节点可能连不上集群或者功能异常。你的现有安全组至少要包含这些规则:
- 入站规则:允许同一安全组内的所有通信(节点间互访需要),允许来自EKS控制平面的HTTPS(443)请求;如果需要SSH登录,还要开放22端口给你的IP段。
- 出站规则:允许到EKS控制平面的443端口,允许到AWS ECR、S3的访问(用于拉取容器镜像和kubelet配置),以及常规的互联网出站流量(按需调整)。
2. 修改CloudFormation模板
根据你用的节点组类型(是AWS官方的AWS::EKS::NodeGroup资源,还是旧的Auto Scaling Launch Configuration),分两种情况调整:
情况一:使用AWS::EKS::NodeGroup(推荐的新方式)
首先,添加一个参数来接收现有安全组的ID(这样模板更灵活,不用硬编码):
Parameters: ExistingNodeSGId: Type: AWS::EC2::SecurityGroup::Id Description: 输入你要复用的现有节点安全组ID
然后,在你的AWS::EKS::NodeGroup资源里,添加SecurityGroups属性,指定这个现有安全组ID,同时删除模板中原本创建新安全组的AWS::EC2::SecurityGroup资源(如果有的话):
Resources: MyEKSNodeGroup: Type: AWS::EKS::NodeGroup Properties: ClusterName: !Ref MyEKSCluster NodeRole: !Ref EKSNodeIamRole Subnets: !Ref PrivateSubnets # 关键:指定现有安全组 SecurityGroups: - !Ref ExistingNodeSGId # 其他配置比如实例类型、扩容策略保留不变 ScalingConfig: MinSize: 2 MaxSize: 5 DesiredSize: 2 AmiType: AL2_x86_64
情况二:使用旧的Auto Scaling Launch Configuration
如果你的模板是用AWS::AutoScaling::LaunchConfiguration来创建节点,那直接在这个资源的SecurityGroups里指定现有安全组ID即可:
Resources: EKSNodeLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: !Ref EKSNodeAmi InstanceType: t3.medium # 替换成现有安全组ID SecurityGroups: - !Ref ExistingNodeSGId IamInstanceProfile: !Ref EKSNodeInstanceProfile UserData: !Base64 Fn::Sub: | #!/bin/bash set -o xtrace /etc/eks/bootstrap.sh ${MyEKSCluster}
3. 验证和部署
部署修改后的模板前,先确认:
- 现有安全组和EKS集群在同一个VPC下
- 安全组的规则符合EKS节点的运行要求
- 模板中没有残留创建新安全组的代码
部署完成后,你可以在EKS控制台的节点组详情里,查看安全组是否已经是你指定的那个,也可以登录节点检查网络连通性是否正常。
内容的提问来源于stack exchange,提问作者Arundathi G Vardhan
相关产品推荐
相关产品推荐

