CentOS7启用firewall的Calico CNI Kubernetes集群DNS解析失败
Kubernetes集群DNS解析失败故障解决方案
故障根因
DNS解析请求被firewalld拦截:Calico为每个Pod创建的veth接口均以cali为前缀,此类接口未加入firewalld信任域,默认规则拦截了从这类接口进入的UDP 53端口DNS查询请求,对应dmesg日志中IN=calixxxx的FINAL_REJECT记录可佐证该结论。
解决方案
方案1:批量将所有cali前缀接口加入信任域(推荐)
CentOS 7的firewalld支持用+作为后缀通配符匹配接口,无需逐个添加接口:
- 永久添加规则:
firewall-cmd --permanent --add-interface=cali+ --zone=trusted
- 重载防火墙使配置生效:
firewall-cmd --reload
方案2:单独放行DNS服务端口
如果无需将所有Pod接口加入信任域,可直接放行DNS所需端口:
firewall-cmd --permanent --add-port=53/udp firewall-cmd --permanent --add-port=53/tcp firewall-cmd --reload
效果验证
配置完成后执行DNS解析测试:
kubectl exec -it dnsutils -- nslookup kubernetes.default
返回正常解析结果即故障修复。
内容的提问来源于stack exchange,提问作者Karthik Prasad
相关产品推荐
相关产品推荐

