Kubernetes Flannel 主机ping不通Pod

在Kubernetes环境中,发现宿主机无法ping通Pod。通过对网络流量的抓包分析,发现在某些节点上iptables可能阻止了ICMP包的传递。通过检查并调整iptables规则,成功解决了宿主机与Pod间的网络通信问题。

Kubernetes Flannel 主机ping不通Pod

1 问题

Kubernetes搭建完成也使用了一段时间后,由于种种原因有些机器意外下线,然后又经过不同的人操作后。今天我突然发现宿主机ping不通。执行的测试例子如下:

#1.检查节点状态
kubectl get nodes #正常情况下所有节点都处于Ready状态
#2.创建测试文件 nginx-ds.yml,其内容如下:
apiVersion: v1
kind: Service
metadata:
  name: nginx-ds
  labels:
    app: nginx-ds
spec:
  type: NodePort
  selector:
    app: nginx-ds
  ports:
  - name: http
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      app: nginx-ds
  template:
    metadata:
      labels:
        app: nginx-ds
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        
#3.执行测试
kubectl create -f nginx-ds.yml #结果应该是每一个Slave节点都有一个nginx-ds的Pod在运行
#4.检查各节点的Pod IP连通性,编写测试脚本ping-test.sh,脚本内容如下:
#!/bin/bash
podIPs=`kubectl get pods -o wide -l app=nginx-ds | awk '{print  $6}' |grep -v IP`
count=0
for podIp in ${podIPs[@]}
do
  let count=0
  for i in `seq 1 11` ;do
    if ssh node$i  ping -c 1 $podIp |grep '100% packet loss' ;
    then
           echo "node$i ping $podIp error" ;
    else
           let count+=1
    fi
  done
  if [ $count == 11 ];then
    echo "all Slave node ping $podIp successful!";
  else
    echo "ping $podIp failed"
  fi
done

执行上面的例子后,输出的结果如下:
在这里插入图片描述

2 解决方案

通过上面的结果发现出问题的机器为node3、node6、node8、node9、node10,此处以node8和node10互相ping对方机器中运行的pod为例,发现依然是ping不通的,为了找到问题,我们使用tcpdump进行抓包,尝试寻找原因。过程如下:

  • 在node10中使用ping 10.244.7.178指令,然后在node8中使用sudo tcpdump,node10中的结果当然是ping不通了。而node8中的结果如下:
    在这里插入图片描述
    可以发现node8收到包了,但是node10却没有收到回复,我们也可以看到node10中有916个packets被dropped了。所以我猜测应该是iptalbes的问题,可能是ICMP包被iptables给drop了。
  • 接下来分别在node8和node10中执行如下指令:
    sudo iptables -P INPUT ACCEPT  && 
    sudo iptables -P OUTPUT ACCEPT && 
    sudo iptables -P FORWARD ACCEPT && 
    sudo iptables -A INPUT -p icmp
    
  • 执行指令后,在node10中使用ping 10.244.7.178发现就可以ping通了。

相关参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值