K8s集群某节点出现异常,新分配到node上面的pod不能ping通外部pod,同节点pod、宿主机IP也不行,外部pod也不可以ping通IP

文章描述了一个K8s集群中节点出现网络异常的问题,新部署的pod无法ping通外部及内部pod。经过排查,问题定位在节点的网络配置上,特别是IP和DHCP问题。云平台虚拟机的两张网卡中,弹性地址消失且DHCP超时,路由表缺少全局路由。通过云平台后台重启虚拟机恢复了网络正常。旧pod能正常工作可能是因为Calico维护了部分路由信息。
K8s集群某节点出现异常,新分配到node上面的pod不能ping通外部pod,同节点pod、宿主机IP也不行,外部pod也不可以ping通IP
首先对问题pod进行排查,发现他不能解析域名和svc,网路模式是IPVS的,集群内部可以ping通svc地址,我们中间件的pod来的,一开始怀疑是dns解析问题,查看了pod内部的dns解析文件内容
cat /etc/resolv.conf

IP地址和集群的dns地址一致,通过该节点其他pod对这个问题pod进行ping,发现还是不通,ping同节点其他pod是正常的,问题定位在这个pod上面,接着怀疑是svc未绑定问题,查看endpoint发现是绑定了pod的地址的,问题pod每次ping都是地址不可达,后将其切换至其他节点发现运行正常,也可以正常ping通其他pod,问题在节点上面,删建了一个deployment的pod,在该节点重新启动后故障现象和之前一样,问题现象明确:

1.问题节点旧pod是正常的,对外访问ping没问题
2.问题节点新建pod是异常的,网络模式像是none的,当时也去节点的docker inspect 容器 上面去查过这个容器的网络模式是host的和其他容器一致,ping不出去,也进不来,端口telnet也是一样
3.迁到其他节点没问题,问题在node上面

最终在网络上面发现IP出现问题,环境是云平台虚拟机,上面有2张网卡,一张是内网的,一张平台上的弹性地址,发现这个弹性地址不见了,查看网卡内容,该网卡是dhcp的,网卡状态UP,查看systemctl status NetworkManage,发现一直提示IPV4 DHCP timeout类型错误,查看路由表,发现全局路由默认是走这张网卡的,异常节点的路由表是没有全局路由的,0.0.0.0是不存在的,所以导致ping出去地址不可达,因为pod也是默认走这个网卡出去的,至此问题溯源成功,联系云平台进行虚机后台重启,启动后网卡正常,pod访问正常。(注:一定要云平台后台关机重启,测试过reboot启动后还是不行)
###这里没分析到为什么旧的pod是正常网络的,可以ping出去,也正是这个问题一开始干扰了问题排查思路,应该是calico网卡维护了一部分路由表信息吧??

Kubernetesk8s集群中,如果某个主机上的所有Pod无法过域名访问其他Pod,这常表明DNS解析存在问题。以下是可能的原因及解决方案: ### 可能原因分析 1. **CoreDNS未正常运行** Kubernetes默认使用CoreDNS作为集群内的DNS服务提供者。检查CoreDNS Pod的状态是否正常。 2. **Node网络配置问题** 某些节点上可能存在网络插件(如Flannel、Calico等)配置错误或冲突的问题。 3. **ServiceAccount权限足** 如果某些Pod使用的ServiceAccount缺少必要的DNS相关权限,也可能导致无法解析域名。 4. **Resolv.conf文件配置异常** Pod内部的`/etc/resolv.conf` 文件可能指向了正确的DNS服务器地址。 5. **iptables规则缺失或损坏** 节点上的iptables规则若设置当,则可能导致流量转发失败。 --- ### 解决方案步骤 #### 第一步:验证CoreDNS状态 ```bash kubectl get pods -n kube-system | grep coredns ``` 确保所有的CoreDNS Pods都处于"Running"状态。如果是,请查看日志排查故障: ```bash kubectl logs <coredns-pod-name> -n kube-system ``` #### 第二步:测试DNS功能 进入受影响的一个Pod内尝试ping一些常见的服务名比如"kube-dns.kube-system.svc.cluster.local": ```bash kubectl exec -it <problematic-pod-name> -- nslookup kube-dns.kube-system.svc.cluster.local ``` 观察是否存在超时或其他错误信息。 #### 第三步:确认Network Plugin工作情况 重启相关的网络组件例如flannel daemonset: ```bash kubectl rollout restart daemonset/<network-plugin-name> -n kube-system ``` #### 第四步:手动修改resolv.conf (仅作临时调试) 可以短暂地将Pod里的`nameserver`改为公共可用值(如Google DNS `8.8.8.8`)做对比试验: 编辑`/etc/resolv.conf`内容为: ``` nameserver 8.8.8.8 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5 ``` #### 第五步:检查防火墙/IPTables策略 保证该node下的iptables允许到Cluster IP段和服务端口的数据包流。必要时刷整个节点的相关表项。 --- ### 预防措施建议 - 定期监控CoreDNS性能指标; - 使用成熟的CNI插件并保持更至稳定版本; - 建立详尽的日志记录便于快速定位类似问题;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值