k8s Calico生成pod的ip访问不通

2,421 阅读4分钟

问题描述

通过此博客记录一下当前遇到的问题,当通过deloy创建对应的pod时,发现master和node之间,ping时访问不通,查了很多资料,在这里记录一下解决思路

涉及的服务器

两台阿里云服务器,hostname分别为master和slave
master 内网ip: 10.0.4.9
slave 内网ip :10.0.4.2

问题出现的情况

通过命令查看生成的pod(在master节点查看) kubectl get pod -owide

image.png 通过截图看到我只有一个node节点(鄙人只是为了做测试,所以只买了两台),ping的时候发现不通

image.png

解决问题思路

既然ping不通,是不是火墙的问题,仔细看了一下自己的云服务器火墙,我是针对我本地的ip,包括master和slave的ip都开了。
查看一下本地master和slave的路由吧,也当学习了

1,ip route

可以看到,我是通过一个叫10.0.4.1去做默认网关代理的,有人说需要给生成的pod的ip要设置公网Ip,我觉得先按照这个方向去研究,看看能不能通过内网的方式去解决这个问题

image.png 然后我们知道10.0.4.1是Calico代理的一个ip,这个还是通过某位大神说的Calico原理看到的,其实工作原理也就是通过arp去找到对应的mac地址。然后找到对应的ip,查看下面的话是cpoy的。
当一个数据包的目的地址不是本机时,就会查询路由表,从路由表中查到网关后,它首先会通过 ARP 获得网关的 MAC 地址,然后在发出的网络数据包中将目标 MAC 改为网关的 MAC,而网关的 IP 地址不会出现在任何网络包头中。也就是说,没有人在乎这个 IP 地址究竟是什么,只要能找到对应的 MAC 地址,能响应 ARP 就行了
原文链接:blog.csdn.net/u012881331/…
通过arp命令就能精确找到对应的mac地址
arp -a | grep 10.0.4.1

image.png 也可以通过"ip n"去查路由表,当你ping的时候,就在这个路由表能找到对应的缓存mac地址,我是找到对应的10.0.4.1的地址
10.0.4.1 dev eth0 lladdr fe:ee:8f:bf:86:99 PERMANENT

查看Calico的模式

Calico为3.x版本,通过查看发现Calico支持BGP和IPIP模式,其中ipipMode:CrossSubnet为混合模式,默认是Always,感觉不是这个问题
Always:表示跨节点通信一直使用 IPIP 封装
CrossSubnet:表示在同一个二层,跨节点通信走本地路由,而跨三层的节点互相通信则会通过 IPIP 封装

image.png

发现问题情况

通过排查发现,在创建的tunl0 没有对应的ip,并且ifconfig的时候没有找到tunl0。但是通过命令ifconfig -E | grep tunl0是可以找到的,但是没有对应的ip地址
通过命令calicoctl get workloadendpoint --output=yaml 发现也没有对应的mac地址,怀疑是自己的calico安装有问题,有网上说是可以通过二进制的方式重装calico去解决这个问题,但是感觉很麻烦,找到一个方式去解决对应的问题,就是最简单的重装

重新安装calico

我是在master和slave都进行执行了相关的命令
1,先在master执行:kubectl delete -f calico.yaml命令
2,通过ifconfig查看涉及catico的网卡删除,涉及master和slave两个节点,例如:ifconfig cali3a84f71392a down
3,删除对应的目录位置,我只删除了Master的。进入 /etc/cni/net.d/进行对应的删除。
4,去githunb找对应的资源,我当时删除的是2.21.6,不知道是不是版本的问题,这次换了一个低版本的3.14.2,地址:docs.projectcalico.org/v3.14/manif… --no-check-certificate
5,执行命令:kubectl apply -f calico.yaml 赋予就可以了
6,把存量的deploy删除了,通过kubectl delete deploy xxx进行删除
7,然后在看ifconfig的tunl0发现已经有对应的ip了,然后通过创建deploy,ping一下啊对应的ip已经通了。感觉查了这么久,重装也是一个解决办法。

image.png

8,通过命令访问pod,ping对应的ip通了。我得总结一下具体的流程,也当学习了

image.png 9,通过ip route命令再次查看,发现有对应的ip段的访问路径了。感觉就是这个在路由里面没有导致的

image.png