OVS
OVS通过建立gre网络隧道打通各个主机间的容器网络,其本质是在原有的报文上再封装一层gre报头,发送到目标主机上后进行解包获得实际的报文。网络传输方式如下图所示:

原图链接
跨节点通讯
pod的请求包经过docker0网桥到达br0
br0根据目标地址将请求包转入对应的gre端口
转入gre端口中的请求包再封装一层gre报头,以当前物理主机的接口地址为源地址,以目标主机的接口地址为目标地址
请求到达目标主机后进行解包,获得实际的请求报文
目标主机将请求报文转入docker0网桥,到达目标容器
网络初始化
安装openvswitch
yum install openvswitch -y
关闭selinux
...
SELINUX=disabled
...
启动openvswitch服务
systemctl start ovsdb-server
systemctl start ovs-vswitchd
创建ovs网桥
ovs-vsctl add-br br0
创建GRE隧道端口,绑定到ovs网桥上,并指定对端主机地址
ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre option:remote_ip=192.168.1.2
将ovs网桥接入到docker0网桥
brctl addif docker0 br0
启动ovs与docker0网桥
ip link set dev br0 up
ip link set dev docker0 up
将pod网段内的请求转入docker0网桥
ip route add 172.17.0.0/16 dev docker0
源主机只知道自身的docker0地址段,并不知道其他主机上的docker0地址段,因此需要在源主机上添加一条路由规则,将所有目标为pod地址段的请求转入到docker0网桥中
最后更新于