EKS部署Nginx Ingress自动添加安全组规则的作用及管理方法
EKS NLB自动注入节点安全组规则说明及管理方案
三类自动添加规则的具体作用
你看到的三类带kubernetes.io/rule/nlb/前缀的入站规则,均为K8s AWS云控制器管理器(CCM)在创建Network Load Balancer时自动添加的后端通信必要规则,和Bitnami的Nginx Ingress Chart本身没有直接关系:
kubernetes.io/rule/nlb/health={load-balancer-name}前缀的TCP规则
这类是NLB健康检查放通规则。跨可用区部署的NLB会从每个所在子网的IP段发起健康探测,源地址为对应子网的CIDR,目标端口为Nginx Ingress Service对应的NodePort临时端口。你看到的两个不同端口,分别对应Ingress暴露的HTTP、HTTPS两个服务端口的NodePort映射,每个子网一条规则是为了覆盖所有可用区NLB节点的探测源地址。kubernetes.io/rule/nlb/client={load-balancer-name}前缀的全网源TCP规则
这类是NLB后端流量转发规则。当Nginx Ingress的Service配置externalTrafficPolicy: Cluster时,NLB会对入站流量做源地址转换,转发到集群任意节点的对应NodePort,再由kube-proxy路由到实际运行的Ingress Pod,这条规则用于放通所有公网源到节点NodePort的入向流量。如果将流量策略改为Local,这类规则的源地址会自动收窄为NLB所在子网的CIDR段,不会放通全网。kubernetes.io/rule/nlb/mtu前缀的ICMP规则
这是路径MTU发现(PMTUD)的必要规则。AWS NLB和后端节点之间默认使用9001 MTU的巨型帧传输,当公网客户端发送的数据包大小超过链路MTU(常规公网链路为1500)时,节点需要返回Type 3 Code 4(目标不可达:需要分片)的ICMP报文通知NLB调整报文大小,缺少这条规则会出现大请求丢包、长连接超时等问题。
规则残留原因及规范化管理方案
卸载后规则残留的原因
这些规则的生命周期由AWS CCM管理,不属于Helm Chart的资源管理范围。Helm卸载时只会删除K8s集群内的Service、Ingress等自定义资源,如果卸载时CCM组件异常、或者节点已经被提前销毁,CCM无法触发安全组规则的删除逻辑,就会导致规则残留在节点安全组上。
Bitnami Nginx Ingress Helm Chart配置方案
通过Chart参数配置可以完全接管这类规则的生命周期,避免自动注入和残留:
- 安装Chart时关闭CCM自动修改节点安全组的能力,设置参数:
service: annotations: service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-groups: "false" - 提前手动或通过IaC创建好三类必要的后端安全组规则,在Chart参数中指定预配置的安全组作为NLB后端安全组:
service: annotations: service.beta.kubernetes.io/aws-load-balancer-backend-security-groups: "sg-xxxxxx,sg-yyyyyy" - 如果需要保留CCM自动管理规则的能力,要确保集群中AWS CCM组件正常运行,卸载Chart前不要先删除节点组或CCM的工作负载,给CCM留出触发清理逻辑的时间窗口。
Terraform规范化管理方案
完全通过Terraform管理安全组规则可以彻底避免孤儿规则残留:
- 显式关闭CCM自动管理后端安全组的能力,在Terraform管理的Ingress Helm Release配置中传入上述关闭自动管理的注解参数
- 在托管节点组关联的安全组中,通过
aws_security_group_rule资源定义三类必要规则:- 健康检查规则:以所有公有子网CIDR为源地址,放通Ingress Service对应的NodePort端口段TCP入站
- 客户端流量规则:根据
externalTrafficPolicy配置选择源段,Cluster模式放通0.0.0.0/0到对应NodePort的TCP入站,Local模式仅放通NLB所在子网CIDR到对应NodePort的TCP入站 - MTU探测规则:放通源
0.0.0.0/0的ICMP Type 3 Code 4入站
- 针对已经存在的历史残留规则,可以通过Terraform自定义数据源,过滤所有描述匹配
kubernetes.io/rule/nlb/*且对应NLB已经被删除的孤儿规则,统一纳入Terraform管理后批量清理。
内容的提问来源于stack exchange,提问作者rpf3
相关产品推荐
相关产品推荐

