容器网络中可以了解到容器的网络通信原理。可以知道容器的网络包是需要经过veth到达docker0网桥,然后在宿主机上进行转发的。

由于 veth 接口是成对工作,在对外发送数据的时候,peer veth 接口都会 raise softirq 来完成一次收包操作,这样就会带来数据包处理的额外开销。

要减小容器的网络延时,可以使用ipvlan/macvlan网络接口来代替veth网络接口,Ipvlan/macvlan 直接在物理网络接口上虚拟出接口,在发送对外数据包的时候可以直接通过物理接口完成,没有节点内部类似 veth 的那种 softirq 的开销。容器使用 ipvlan/maclan 的网络接口,它的网络延时可以非常接近物理网络接口的延时。

但是使用ipvlan/macvlan直接将容器的网络接口挂载到物理网络接口上,这回导致k8s的service的iptables规则是无法生效的。