EKS集群使用Calico CNI时StatefulSet(STS) Pod DNS解析异常求助
EKS集群Calico v3.20.0下StatefulSet Pod DNS解析异常解决方案
问题根因
Calico v3.20.0 VXLAN模式下存在已知的端点同步bug,StatefulSet默认关联Headless Service时,DNS流量无法匹配到正确的CNI转发规则。Deployment无强制绑定Headless Service的逻辑,因此配置hostNetwork: true可以生效,该逻辑对StatefulSet不适用。
修复方案
方案1:升级Calico补丁版本(优先推荐)
- Calico v3.20.x分支的v3.20.6及以上补丁版本已修复该STS端点同步问题,无需修改现有工作负载配置,直接升级集群内Calico相关组件的镜像版本即可
- 升级完成后重启所有异常的StatefulSet Pod,验证DNS解析恢复正常
方案2:v3.20.0版本临时适配(无需升级Calico)
- 单独配置
hostNetwork: true对STS无效,需要同步修改STS的dnsPolicy字段为ClusterFirstWithHostNet,配置示例:
apiVersion: apps/v1 kind: StatefulSet spec: template: spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet containers: # 原有容器配置保持不变
- 检查STS绑定的Headless Service是否添加了
publishNotReadyAddresses: true配置,未配置的情况下会出现DNS解析到未就绪IP导致解析失败的问题 - 检查Calico网络策略规则,确认已放行kube-system命名空间下CoreDNS服务的53端口UDP/TCP流量,避免STS Pod的DNS请求被拦截
方案3:调整Calico VXLAN模式
- 如果上述方案均无效,修改Calico VXLAN配置,将
vxlanMode从Always调整为CrossSubnet - 重启calico-node守护进程集的所有Pod,待所有节点Calico组件恢复正常后,验证STS Pod的DNS解析状态
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

