最后更新于
最后更新于
OVS通过建立gre网络隧道打通各个主机间的容器网络,其本质是在原有的报文上再封装一层gre报头,发送到目标主机上后进行解包获得实际的报文。网络传输方式如下图所示:
原图
由于gre是建立点对点的网络隧道,对于每个需要联通的节点都需要创建相应的gre端口,假设节点数为n,打通所有节点间的网络需要创建n*(n-1)个端口
pod的请求包经过docker0网桥到达br0
br0根据目标地址将请求包转入对应的gre端口
转入gre端口中的请求包再封装一层gre报头,以当前物理主机的接口地址为源地址,以目标主机的接口地址为目标地址
请求到达目标主机后进行解包,获得实际的请求报文
目标主机将请求报文转入docker0网桥,到达目标容器
安装openvswitch
关闭selinux
启动openvswitch服务
创建ovs网桥
创建GRE隧道端口,绑定到ovs网桥上,并指定对端主机地址
将ovs网桥接入到docker0网桥
启动ovs与docker0网桥
将pod网段内的请求转入docker0网桥
源主机只知道自身的docker0地址段,并不知道其他主机上的docker0地址段,因此需要在源主机上添加一条路由规则,将所有目标为pod地址段的请求转入到docker0网桥中