EKS升级后新节点在AWS Classic Load Balancer显示OutOfService问题咨询
问题根因说明
核心根因
- EKS的AWS云提供者组件对Classic Load Balancer(CLB)的后端节点放行校验,不只是对比安全组规则,更依赖安全组的集群关联标签以及集群登记的安全组列表,你手动创建的同规则安全组没有满足这两个前置条件,因此无法生效。
具体细节拆解
安全组标签校验逻辑
旧节点组的安全组是eksctl创建集群时自动生成的,默认携带集群专属关联标签,格式为kubernetes.io/cluster/<你的集群名称>,值为owned或shared,同时可能带有kubernetes:shared: true标签。AWS云提供者组件只有识别到这些标签的安全组,才会判定为集群合法的节点安全组,允许CLB的健康检查和业务流量进入。
你手动创建的安全组仅复制了出入站规则,没有同步这些标签,所以直接被校验逻辑拦截。集群安全组登记逻辑
EKS 1.17版本的集群元数据中会维护一个默认节点安全组列表,只有在列表内的安全组绑定的节点,才会被CLB后端健康检查逻辑判定为合法后端。旧安全组是集群创建时就登记在列表中的,你手动创建的安全组没有被加入该列表,就算规则完全一致也会导致健康检查失败,节点被标记为OutOfService。新节点组配置遗漏
你升级aws-cni后创建新节点组时没有显式指定关联集群原有节点安全组,eksctl默认会为新节点组生成独立的新安全组,该安全组既没有集群关联标签,也没有被加入CLB的入站白名单,天然无法通过CLB的健康检查。
验证方法
直接对比旧节点安全组和你手动创建的安全组的标签配置,即可确认是否缺少集群关联标签;同时查看CLB的入站规则,可确认其仅放行了旧安全组的流量,没有包含你手动创建的安全组。
修复方案
- 后续用eksctl创建新节点组时,在配置文件中显式指定关联集群原有节点安全组,不需要手动创建新安全组
- 如果要使用手动创建的安全组,给安全组添加和旧安全组完全一致的集群关联标签,再将该安全组添加到CLB的入站规则白名单中即可正常生效。
内容的提问来源于stack exchange,提问作者berrur
相关产品推荐
相关产品推荐

