perrynzhou

专注于系统组件研发

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个容器通信结束