
文章插图
在同一节点上的Pod会通过Veth设备将一端连接到网桥,且它们的IP地址是通过网桥动态获取的,和网桥IP属于同一网段 。此外,同一节点上的所有Pod默认路由都指向网桥,网桥会负责将所有非本地地址的流量进行转发 。因此,同一节点上的Pod可以直接通信 。
2.不同节点的Pod通信Kubernetes要求集群Pod的地址唯一,因此集群中的每个节点都会分配一个子网,以保证Pod的IP地址在整个集群内部不会重复 。在不同节点上运行的Pod通过IP地址互相访问,该过程需要通过集群网络插件实现,按照底层依赖大致可分为Overlay模式、路由模式、Underlay模式三类 。
- Overlay模式是在节点网络基础上通过隧道封装构建的独立网络,拥有自己独立的IP地址空间、交换或者路由的实现 。VXLAN协议是目前最流行的Overlay网络隧道协议之一 。
- 路由模式采用VPC路由表的方式与底层网络相结合,能够更加便捷地连接容器和主机,在性能上会优于Overlay的隧道封装 。
- Underlay模式是借助驱动程序将节点的底层网络接口直接暴露给容器使用的一种网络构建技术,享有较高的性能,较为常见的解决方案有IP VLAN等 。

文章插图
四、网络插件本文只介绍Calico,因为Flannel我也没用过,云上的K8S网络插件基本都是云厂商结合自己的VPC网络实现的,更不在介绍范围内了 。
k8s网络插件主要分为:underlay和overlay,calico 主要分为3种模式:BGP、IPIP、VXLAN,BGP属于underlay、IPIP和VXLAN属于overlay 。
Calico 是一种开源网络和网络安全解决方案,适用于容器,虚拟机和基于主机的本机工作负载 。Calico 支持广泛的平台,包括 Kubernetes,Docker,OpenStack 和裸机服务 。Calico 后端支持多种网络模式 。
本文主要分析calico的ipip模式,旨在理解IPIP网络模式下产生的calixxxx,tunl0等设备以及跨节点网络通信方式 。ipip模式主要原理就是在pod ip的基础上再封装一层node ip,这样在通过对应的路由规则,就可以转发到对应的目的地 。
1.网络初窥我采用的CNI插件Calico,例如,通过ip addr命令可以看到K8S Node节点下有许多cali打头的虚拟网卡,同时,还有tunl0这种IP隧道,可以看到采用的是Calico的IPIP模式 。

文章插图
通过route -n命令也能看到每个pod会对应一个虚拟网卡,访问别的网段会通过tunl0这个隧道发出去 。

文章插图
2.Calico的IPIP模式:IPIP 模式:Calico默认使用这种方式 。在原有 IP 报文中封装一个新的 IP 报文,新的 IP 报文中将源地址 IP 和目的地址 IP 都修改为对端宿主机 IP 。开启时将Node路由之间做一个tunnel,再把两个网络连接起来的模式,会在各Node节点上创建一个名为tunl0的虚拟网络接口 。
IP模式下的通信流程,见如下2个图:

文章插图

文章插图
在K8S-Node上执行ip addr可以看到以下信息,其中包含了tunl0和calixxxxxx:
# 回环地址1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever# 物理网卡2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:95:32:45 brd ff:ff:ff:ff:ff:ffinet 10.20.1.22/24 brd 10.20.1.255 scope global noprefixroute ens192valid_lft forever preferred_lft forever# Docker03: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:4f:0d:6a:48 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever# cali打头的Calico网卡4: cali7533706c752@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group defaultlink/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 07: cali6bf54ec99f4@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group defaultlink/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 38: calif0a8819d7b4@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group defaultlink/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 49: cali2299828844c@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group defaultlink/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 510: cali7c84f4d310b@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group defaultlink/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 6# Calico IP隧道使用的Tunl0网卡15: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0inet 10.21.230.0/32 brd 10.21.230.0 scope global tunl0valid_lft forever preferred_lft forever
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 爱上AI伴侣,“AI情”是不是爱情?
- 何炅被保姆实名举报,更多内幕被揭开,堪称现实版农夫与蛇
- 刘宇宁疑似偷偷跑去杭州与杨超越玩密室逃脱,粉丝吐槽是和小女友约会
- 怎么与孩子沟通 怎么与孩子沟通的书籍
- 生苹果与熟苹果吃有什么区别 苹果生吃和煮熟了吃有什么区别
- baby与小海绵教室互动画面曝光,疑搞明星特权被嘲,儿子正脸曝光
- 霸总配萝莉!曝48岁小李子再添新欢,与25岁超模女友夜店拥吻被拍
- 林心如与身孕8个月Selina嬉游,骑车梳公主头,完全不像47岁!
- 同是“香港之子”却终生不合作,这37年,成龙与周润发活得可真累
- 单纯的蛋白粉和复合蛋白粉的区别 蛋白粉与复合蛋白粉有什么区别
