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

使用Ansible创建EKS集群时为何需指定security_groups?

关于Ansible community.aws.eks_cluster模块必填security_groups的问题解答

问题重现

使用以下Ansible Playbook片段创建EKS集群:

- name: Create EKS cluster
  community.aws.eks_cluster:
    name: "{{ eks_cluster.name }}"
    state: present
    version: "{{ eks_cluster.version }}"
    role_arn: "{{ eks_role_created.iam_role.arn }}"
    subnets:
      - "{{ subnet1_id }}"
      - "{{ subnet2_id }}"
    wait: true
  register: eks_creation_result

执行时触发错误:

fatal: [localhost]: FAILED! => {"changed": false, "msg": "state is present but all of the following are missing: security_groups"}

核心疑问拆解

  1. security_groups字段定位:你的理解是正确的,该字段对应集群级附加安全组,而非节点组安全组。AWS创建EKS时确实会自动生成一个默认安全组负责控制平面基础通信,但模块要求的是额外的附加安全组。

  2. 模块必填要求与AWS机制的关系:
    两者并不冲突。AWS允许EKS集群同时拥有默认安全组+附加安全组,而Ansible此模块是自身参数校验逻辑强制要求必须指定至少一个附加安全组——哪怕是一个仅含基础规则的占位安全组。

  3. 填了安全组后AWS仍自动生成新安全组的原因:
    你指定的security_groups是附加安全组,AWS自动生成的是集群默认安全组,二者为互补关系:默认安全组负责EKS控制平面的基础通信规则,附加安全组则用于添加你自定义的额外流量规则(比如允许外部访问API Server、自定义集群内部通信策略等)。

解决方案

必须满足模块的参数校验要求,操作步骤如下:

  • 提前创建一个安全组(可以是仅开放必要端口的实用安全组,也可以是临时占位的空安全组)
  • 将该安全组ID填入security_groups参数,修改后的Playbook示例:
- name: Create EKS cluster
  community.aws.eks_cluster:
    name: "{{ eks_cluster.name }}"
    state: present
    version: "{{ eks_cluster.version }}"
    role_arn: "{{ eks_role_created.iam_role.arn }}"
    subnets:
      - "{{ subnet1_id }}"
      - "{{ subnet2_id }}"
    security_groups:
      - "{{ custom_cluster_sg_id }}"
    wait: true
  register: eks_creation_result

补充说明

即使使用最新版的community.aws.eks_cluster模块,这个必填校验仍然存在——这是模块的设计逻辑,而非AWS API的限制。若认为该设计不合理,可向community.aws项目提交issue反馈。

内容的提问来源于stack exchange,提问作者Tony Chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:22:50