网站首页 > 技术文章 正文
承接上文容器网络四-k8s flannel vxlan
calico使用纯的三层路由去实现容器互联,对比flannel的vxlan模式而言的话,这种形式没有一个封包、解包的操作,更加高效。
这两台主机,一台是192.168.64.5,网络段是192.168.64,另一台是192.168.64.6,这两台属于同一个局域网之内。
192.168.64.5这台主机里面有一个叫red的网络命名空间,把前32位作为一个网络段,本身作为一个单独的局域网。
192.168.64这台主机也是一样的,有一个blue的网络命名空间。
192.168.64.5上有一对veth网络设备,一头连接red网络命名空间,一头连接主机。
看下包的流转过程
比如在red网络命名里,ping 172.17.9.2,red的网络命名空间里有一个路由:default via 169.254.1.1 dev veth-red onlink,从red网络命名空间的veth-red网络设备出来,下一跳地址是169.254.1.1,即到达主机的veth网卡上,然后看下主机的路由规则,看下转发到哪个网卡上,
172.17.8.2 dev veth-red-br scope link
172.17.9.0/24 via 192.168.64.6 dev enp0s1
目的ip是172.17.9.2,网络段是172.17.9,根据目的ip匹配路由规则,
172.17.9.0/24 via 192.168.64.6 dev enp0s1
它的下一跳地址是192.168.64.6,并且从本地主机的enp0s1网卡上出去,192.168.64.6这个ip是另外一台主机的ip地址。
也就是说这个IP网络包,到了veth设备之后,会转发到enp0s1网卡上,然后由enp0s1网卡去寻找192.168.64.6这个ip的mac地址,得到mac地址后,将ip网络包转发到这台主机上,转发到这台主机上之后,可以看到这台主机有一个路由规则,
172.17.8.0/24 via 192.168.64.5 dev enp0s1
172.17.9.2 dev veth-blue-br scope link
如果是172.17.9.2这个ip的话,就会从veth-blue-br网络设备进去,即当ip网络包到达这台主机之后,他会转发到veth-blue-br这个网络设备上,然后又会到达另外一端网络设备即blue网络命名空间里的veth-blue设备,这个veth设备的ip刚好是172.17.9.2,到达之后,它发现目的ip就是它自己,然后按相似的路程,把ip网络响应包按这个规则也返回给red网络命名空间,那这个过程就ping通了,这也是在局域网内实现不同网络命名空间,不同网络段实现互联的一个方式。
比较巧妙的一点就是将到达主机上的这个veth设备的下一跳地址设置成了目的主机的ip地址。
因为是同一个局域网内,所以它能够带来到目的主机的一个网卡上面去,在到达目的主机的网卡上之后,通过ip forward的功能,能够实现不同网卡之间去转发协议包。
但如果这两台主机不是同一个局域网的话,那怎么实现不同局域网之间容器互联呢?
在calico里,同一个局域网之内下一跳地址设的是目的ip地址并且是从enp0s1这个和外界链接的网卡出去的,而在不同局域网,它会在两台主机上面都创建一个隧道的网络设备。隧道的网络设备其实类似vxlan,它能够对原始的协议包去进行封装包裹一层,包裹上主机上面的和外界相连的那个ip,用这个ip去承载协议包。也就是说,在这台主机上会有一个隧道的设备,比如一个tun的设备,然后在另一台主机上又有一个隧道的设备。将到达主机上veth设备(veth-red-br)的网络包,下一跳地址将会到达这台主机上面的一个隧道设备A上,通过这个隧道的设备去发往目的主机的隧道设备B上,隧道设备B对协议包去进行解包。不同局域网内之间,calico是通过隧道的设备,在不同局域网之间,在不同网卡之间实现网络协议包的流转。
猜你喜欢
- 2024-10-23 容器工程师:引领容器技术潮流,塑造行业未来!
- 2024-10-23 11张图带你彻底了解Kubernetes架构,绝对要收藏的!
- 2024-10-23 深入理解Kubernetes网络策略 kubernetes的网络方案
- 2024-10-23 Kubernetes 网络、监控技术全面解读
- 2024-10-23 Docker术语大全,建议收藏! docker简单介绍
- 2024-10-23 Cilium eBPF 网络解析 bt文件解析
- 2024-10-23 在生产环境中,阿里云如何构建高性能云原生容器网络?
- 2024-10-23 kubernetes系列教程(十二)详解DaemonSet控制器
- 2024-10-23 kubernetes 集群组件介绍 kubernetes集群搭建
- 2024-10-23 如何做容器化集群管理?保障容器能被有序访问是关键
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)