0%
容器网络分析
容器二层网络分析
特点
- 容器IP和节点IP在同一个网段
- 二层协议通过ARP广播找到对方mac地址进行通信
基本环境
- 物理节点上会有一个虚拟网卡对(veth-pair)、虚拟网桥。虚拟网卡对,一个在容器内(veth0),另外一个虚拟网卡(veth1)在物理节点的连接虚拟网桥上的veth1.
- contain1的ip和node1的IP是同一个网段的
- container1的默认网关是node1的IP地址
- 两个节点之间是二层的交换机,通过ARP广播进行通信
- 容器启动时候,会在容器内设置该节点的mac地址
通信过程
- container-1和container-2进行通信,首先container-1的发起ARP广播,因为container-1是默认网关是node-1,container-1通过虚拟网桥把数据包发到了node-1上
- node-1 发现container-1 的目标IP不是自己的IP地址(这里涉及到了netfileter,这个模块是iptables的基础)container-1的目标IP是container-2的IP,在同一个网段可是认为是局域网,但是container-1的目标IP是容器,没有直接连接二层交换机。于是node-1进行ARP广播,询问谁是192.168.1.102,node-2接受到广播,发现不是自己的,node-2不会应答。但是node-2上有一个container-2的容器的IP却是192.168.1.102.
- 基于二层网络的容器必须有sdn的功能,二层网络的交换机上代答(伪造arp应答),有这个基础,node-1进行ARP广播后,二层交换机进行代答,告诉node-1的container-2的mac地址是node-2.
- container-1的数据,到了node-1,交换机告诉node-1,container-2的mac是node-2,于是node-1通过交换机把数据送到了node-2.在这里container-1发送给container-2的包的mac地址已经变更为node-2的mac地址。
- node-2接受到数据,发现数据不是自己的,走自己节点的路由表,发现自己有一条路由规则,凡是发往container-2的IP的数据都是走容器的虚拟网桥,虚拟网桥(docker-bridge)连接虚拟网卡对,通过这对虚拟网卡通过网桥把node-2的数据送到container-2里面,至此2个容器完成二层的通信。
性能
- 走二层没有包的封装,所以性能非常好
- 容器和节点之间可以直通
容器三层网络分析
特点
- 容器IP和节点IP在不同网段
- 三层协议通过IP层寻找对方节点,大部分基于BGP协议来做,BGP协议就是一个同步路由规则的广播协议
通信过程
- container-1发送数据到容器的默认网关(node-1的IP),node-1会收到数据包,此时经过netfilter模块。
- 此时calico bgp会下发一条理由规则,凡是发送container-2的IP数据包,通过某个网卡(eth0)发往一个网关(网关地址是node-2的IP),例如:172.138.1.102 –eth0 –>192.168.1.202 ,这样的规则
- 因为192.168.1.201和192.168.1.201分别是node1和node2的IP,此时数据包通过路由器,把数据发送给node-2
- node-2收到数据后,查找node-2的路由表,发现有一个条路由规则,凡是发送给72.138.1.102的数据都发往容器的网桥,然后经过容器网桥把数据送到container-2.至此2个容器通信结束