情景描述: 某资源池的上云环境,突然发现grafana无法访问了,后台查看grafana是运行正常的(我们是通过envoy网关代理granfan的域名),租户侧也开始打电话说生产环境出现服务无法链接mysql了,服务都是部署在k8s环境上,默认都是提供域名的方式进行链接。
处理过程: 通过查看grafana的日志发现确实是无法链接到coredns,测试域名解析也是偶尔解析成功,coredns我们启动的是多副本,出现这种情况,要么是多副本中有dns挂了,要么就是业务服务节点到coredns节点的calico路由不通。 第一步: 检查coredns的健康状态,经过排查,三个副本的dns运行是正常的,但是其中一个节点的dns解析有问题。 第二步: 检查业务故障节点到无法解析coredns节点的主机之间路由是否正常,发现其它节点上的calico路由到这个coredns的节点的calico路由是不通的。 通过如上两步基本锁定是calico的问题,发现coredns节点的calico运行是正常的,但是所在主机已经没有calico的虚拟网卡,calico-node无法添加路由,具体报错如下: 解决办法:将以下内容添加到 /etc/NetworkManager/conf.d/calico.conf中,可以阻止NetworkManager管理calico.vxlan
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico
然后重启systemctl restart NetworkManager,发现calico的虚拟网卡可以启动了,路由正常加载,到其它节点也可以正常互通。
注:NetworkManager会操作路由表,干扰到calico正常的路由下发。
具体可以参考如下链接:
https://github.com/projectcalico/calico/pull/3454
|