Terraform EKS模块中cluster_security_group_id作用及RDS访问问题
问题解答
1. cluster_security_group_id 的实际用途
这个参数指定的安全组是绑定到EKS集群控制平面的弹性网络接口(ENI)上的,核心作用是管控控制平面与工作节点之间的管理通信:比如API Server和节点kubelet的交互、控制平面到节点的运维流量等。它完全不关联Pod的网络流量,所以你把data-sg赋值给这个参数,只会让控制平面使用该安全组,Pod根本不会加入这个组,这就是你看不到Pod在data-sg里的原因。
2. 需要在data-sg中允许哪个安全组的入站流量
要让EKS Pod访问RDS,得根据你使用的CNI插件类型来配置:
- 默认AWS VPC CNI:Pod的网络流量通过节点的主ENI或辅助ENI转发,出站流量的源安全组就是EKS工作节点的安全组。你需要在
data-sg中添加入站规则,允许节点安全组的对应端口(比如PostgreSQL的5432)流量。 - 使用Security Group for Pods功能:如果你给Pod单独配置了安全组,就需要把Pod的安全组加入
data-sg的入站规则。 - 其他CNI(如Calico):多数情况下依然依赖节点安全组,但如果是自定义网络模式,需要确认CNI的流量转发逻辑,通常还是需要允许节点安全组的入站。
你之前添加cluster_primary_security_group_id无效,是因为这个安全组是EKS默认创建的集群主安全组(仅当create_cluster_security_group=true时生成),和Pod的流量没有关联。
额外排查点
- 确认RDS和EKS节点在同一个VPC内,且RDS的子网与节点子网有网络连通性
- 检查VPC的网络ACL是否允许节点子网到RDS子网的对应端口流量
- 确认节点安全组本身允许出站到RDS的5432端口
内容的提问来源于stack exchange,提问作者user4601931
相关产品推荐
相关产品推荐

