Docker容器跨主机通信之:OVS+GRE 一时失言乱红尘 2024-04-17 05:56 24阅读 0赞 # 一、概述 # 由于docker自身还未支持跨主机容器通信,需要借助docker网络开源解决方案 ## OVS ## OpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使用。 ## OpenVSwich ## OpenVSwich是一种开源软件,通过软件的方式实现二层交换机功能,专门管理多租赁云计算网络环境,提供虚拟网络中的访问策略、网络隔离、流量监控等。 既然是虚拟交换机,自然与传统的物理交换机有着相同的特性,操作中可以按照理解物理交换机的方式去操作,有助于对虚拟交换机的认识。 ## GRE隧道 ## GRE即通用路由协议封装,隧道技术是一种封装技术,将网络层协议(如IP)的数据报文进行封装,使这些封装的数据报文能够在另一个网络层协议中传输。可以看作是一个虚拟点到点连接,所以建立隧道时,要配置好隧道源地址和目的地址。 # 二、基于OVS+GRE的大二层通信 # ## 实验环境 ## <table> <tbody> <tr> <td>操作系统</td> <td>主机</td> <td>主机ip</td> <td>容器网段</td> </tr> <tr> <td>ubuntu-16.04.4-server-amd64</td> <td>主机1</td> <td>172.31.15.168</td> <td>172.17.43.1/24</td> </tr> <tr> <td>ubuntu-16.04.4-server-amd64</td> <td>主机2</td> <td>172.31.4.143</td> <td>172.17.42.1/24</td> </tr> </tbody> </table> ## 示意图 ## ![1341090-20190824173230925-1783133761.jpg][] ## 修改Docker0的网络地址 ## 编辑主机1上的 /etc/docker/daemon.json 文件,添加内容: { "bip": "172.17.43.1/24" } 编辑主机2上的 /etc/docker/daemon.json 文件,添加内容: { "bip":"172.17.42.1/24" } ## 重启docker服务 ## 主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效 systemctl restart docker ## 创建ovs bridge ## 主机1和主机2 操作: 安装 openvswitch apt install -y openvswitch-switch 创建bro网桥 ovs-vsctl add-br br0 查看bro网桥 root@ubuntu:~# ifconfig br0 br0 Link encap:以太网 硬件地址 1e:cc:2c:52:13:42 BROADCAST MULTICAST MTU:1500 跃点数:1 接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:0 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1 接收字节:0 (0.0 B) 发送字节:0 (0.0 B) ## 设置gre端口 ## 将gre0接口加入到网桥obr0, 远程IP写对端IP(创建一个GRE隧道并添加到网桥中) 主机1 执行: ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre option:remote_ip=172.31.4.143 **注意:172.31.4.143 是主机2的ip地址。** 主机2 执行: ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre option:remote_ip=172.31.15.168 **注意:172.31.15.168 是主机1的ip地址。** 主机1和主机2 操作: # 将br0网桥加入docker0网桥 brctl addif docker0 br0 # 启动br0网桥 ip link set dev br0 up # 启动docker0网桥 ip link set dev docker0 up # 添加路由条目 ip route add 172.17.0.0/16 dev docker0 **注意:由于主机1和主机2的网络掩码为24,因此16位就可以包含这2个网络了。** 查看网桥信息 root@ubuntu:~# brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242f148614e no br0 ## 启动容器测试 ## 主机1和主机2 操作: docker run -itd --name test busybox /bin/sh 查看容器信息 主机1 执行: docker inspect test 输出: ... "Gateway": "172.17.43.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.43.2", ... ping 主机2的docker ip root@ubuntu:~# ping 172.17.42.2 -c 2 PING 172.17.42.2 (172.17.42.2) 56(84) bytes of data. 64 bytes from 172.17.42.2: icmp_seq=1 ttl=63 time=0.505 ms 64 bytes from 172.17.42.2: icmp_seq=2 ttl=63 time=0.858 ms --- 172.17.42.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.505/0.681/0.858/0.178 ms 主机2 执行: ping 主机1的docker ip root@ubuntu:~# ping 172.17.43.2 -c 2 PING 172.17.43.2 (172.17.43.2) 56(84) bytes of data. 64 bytes from 172.17.43.2: icmp_seq=1 ttl=63 time=1.90 ms 64 bytes from 172.17.43.2: icmp_seq=2 ttl=63 time=0.641 ms --- 172.17.43.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.641/1.274/1.907/0.633 ms 本文参考链接: [https://blog.csdn.net/xialingming/article/details/83093031][https_blog.csdn.net_xialingming_article_details_83093031] [1341090-20190824173230925-1783133761.jpg]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/11/c45f80674b1047a280ba44d09e4acecb.jpg [https_blog.csdn.net_xialingming_article_details_83093031]: https://blog.csdn.net/xialingming/article/details/83093031
还没有评论,来说两句吧...