Docke 使用Open vSwitch实现跨主机通信
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,--xxong亲自验证目前市面上主流的解决方法有flannel, weave, Pipework, Open vSwitch等。Open vSwitch实现比较简单,成熟且功能强大,所以很适合作为解决
千家信息网最后更新 2026年11月02日Docke 使用Open vSwitch实现跨主机通信
--xxong亲自验证目前市面上主流的解决方法有flannel, weave, Pipework, Open vSwitch等。
Open vSwitch实现比较简单,成熟且功能强大,所以很适合作为解决docker底层网络互联互通的工具。
拓扑如下:
重点 我这里两个宿主机的系统分别是 : Master : centos7.2 node :centos6.10
Master 10.16.170.10 docker 192.168.18.0/24
Node 172.16.17.2 docker 192.168.42.0/24
鉴于centos6系统的限制 这里选择openvswitch-2.3.0的版本 下面有关于centos6安装时遇到的各种问题
具体的实现步骤如下:
1. 安装docker, bridge-utils和openvswitch[root@master ~]# yum install docker bridge-utils -y [root@master ~]# yum install wget openssl-devel -y [root@master ~]# yum groupinstall "Development Tools"[root@master ~]# adduser ovswitch[root@master ~]# su - ovswitch[ovswitch@master ~]$ wget http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz[ovswitch@master ~]$ tar -zxvpf openvswitch-2.3.0.tar.gz[ovswitch@master ~]$ mkdir -p ~/rpmbuild/SOURCES[ovswitch@master ~]$ sed 's/openvswitch-kmod, //g' openvswitch-2.3.0/rhel/openvswitch.spec > openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec[ovswitch@master ~]$ cp openvswitch-2.3.0.tar.gz rpmbuild/SOURCES/[ovswitch@master ~]$ rpmbuild -bb --without check ~/openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec 这里如果报错 No build ID found in.... 需要在openvswitch_no_kmod.spec文件中加入 %define __debug_install_post \ %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\%{nil}[ovswitch@master ~]$ exit[root@master ~]# yum localinstall /home/ovswitch/rpmbuild/RPMS/x86_64/openvswitch-2.3.0-1.x86_64.rpm -y 注意:相应的位置只有这一个rpm包 切记: 如果装1.9.3的版本的话 这里是有俩个包的 但是网上文档基本都只显示一个rpm包 也就是是说在这上一步 需要rpmbuild 一个openvswitch.spec否则,进行这一步时会报错 缺依赖; 并且,这里可能会提示你需要glibc2.14 ,表示glibc版本太低 需要升级glibc版本,我这边的话直接rpm 下载glibc来进行升级的 这里的话提供一个链接:https://www.cnblogs.com/dpf-learn/p/8763696.html[root@master ~]# mkdir /etc/openvswitch[root@master ~]# setenforce 02. docker master端配置如下[root@master ~]# systemctl start openvswitch.service && systemctl enable openvswitch.service[root@master ~]# ovs-vsctl add-br br0[root@master ~]# ip addr1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc fq state UP qlen 1000 link/ether 00:0c:29:97:92:e8 brd ff:ff:ff:ff:ff:ff inet 10.16.170.10/24 brd 255.255.255.0 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe97:92e8/64 scope link valid_lft forever preferred_lft forever3: docker0: mtu 1500 qdisc noqueue state UP link/ether 02:42:45:b7:c2:fd brd ff:ff:ff:ff:ff:ff inet 192.168.18.1/24 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:45ff:feb7:c2fd/64 scope link valid_lft forever preferred_lft forever5: vethcff8026@if4: mtu 1500 qdisc noqueue master docker0 state UP link/ether 32:4a:f5:b7:33:f7 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::304a:f5ff:feb7:33f7/64 scope link valid_lft forever preferred_lft forever6: ovs-system: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 8a:ac:8e:a1:68:2b brd ff:ff:ff:ff:ff:ff7: br0: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 82:ae:47:8e:30:4d brd ff:ff:ff:ff:ff:ff[root@master ~]# ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre option:remote_ip=172.16.17.2[root@master ~]# ovs-vsctl show4fe9a5b3-46ec-432c-a990-bb8e8fee96fe Bridge "br0" Port "gre0" Interface "gre0" type: gre options: {remote_ip="172.16.17.2"} Port "br0" Interface "br0" type: internal ovs_version: "2.3.2"[root@master ~]# brctl addif docker0 br0[root@master ~]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.024245b7c2fd no br0[root@master ~]# ip link set dev br0 up[root@master ~]# ip link set dev docker0 up[root@master ~]# ip addr1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc fq state UP qlen 1000 link/ether 00:0c:29:97:92:e8 brd ff:ff:ff:ff:ff:ff inet 10.16.170.10/24 brd 255.255.255.0 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe97:92e8/64 scope link valid_lft forever preferred_lft forever3: docker0: mtu 1500 qdisc noqueue state UP link/ether 02:42:45:b7:c2:fd brd ff:ff:ff:ff:ff:ff inet 192.168.18.1/24 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:45ff:feb7:c2fd/64 scope link valid_lft forever preferred_lft forever5: vethcff8026@if4: mtu 1500 qdisc noqueue master docker0 state UP link/ether 32:4a:f5:b7:33:f7 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::304a:f5ff:feb7:33f7/64 scope link valid_lft forever preferred_lft forever6: ovs-system: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 8a:ac:8e:a1:68:2b brd ff:ff:ff:ff:ff:ff7: br0: mtu 1500 qdisc noqueue master docker0 state UNKNOWN qlen 1000 link/ether 82:ae:47:8e:30:4d brd ff:ff:ff:ff:ff:ff inet6 fe80::80ae:47ff:fe8e:304d/64 scope link valid_lft forever preferred_lft forever8: gre0@NONE: mtu 1476 qdisc noop state DOWN qlen 1000 link/gre 0.0.0.0 brd 0.0.0.09: gretap0@NONE: mtu 1462 qdisc noop state DOWN qlen 1000 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff10: gre_sys@NONE: mtu 65490 qdisc fq master ovs-system state UNKNOWN qlen 1000 link/ether aa:3a:19:78:48:89 brd ff:ff:ff:ff:ff:ff inet6 fe80::a83a:19ff:fe78:4889/64 scope link valid_lft forever preferred_lft forever[root@master ~]# ip route add 192.168.42.0/24 dev docker0[root@master ~]# docker run -itd --name c1 docker.io/centos '/bin/bash'WARNING: IPv4 forwarding is disabled. Networking will not work.a326fb2eae1ecf1c0b1a26b4b947f20eb44864fc5232e253b582c8c7bb50522a[root@master ~]# vim /etc/sysctl.conf[root@master ~]# sysctl -pnet.core.default_qdisc = fqnet.ipv4.tcp_congestion_control = bbrnet.ipv4.ip_forward = 1[root@master ~]#(3) docker node端配置如下[root@node1 ~]# service openvswitch start && chkconfig openvswitch on[root@node1 ~]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.02429f5f947d no[root@node1 ~]# ovs-vsctl add-br br0[root@node1 ~]# ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre option:remote_ip=10.16.170.10这里如果写错ip 修改的话需要删除网桥: ovs-vsctl del-br br0[root@node1 ~]# brctl addif docker0 br0[root@node1 ~]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.02429f5f947d no br0[root@node1 ~]#[root@node1 ~]# ip link set dev br0 up[root@node1 ~]# ip link set dev docker0 up[root@node1 ~]# ip route add 192.168.18.0/24 dev docker0[root@node1 ~]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.02429f5f947d no br0[root@node1 ~]# ovs-vsctl showf0be12f7-1aa7-4b93-8d4f-5511b56efec7 Bridge "br0" Port "gre0" Interface "gre0" type: gre options: {remote_ip="10.16.170.10"} Port "br0" Interface "br0" type: internal ovs_version: "2.3.2"[root@node1 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf[root@node1 ~]# sysctl -p[root@node1 ~]# docker run -itd --name c2 docker.io/centos '/bin/bash'c9414017f86e6c362b9481ceffc658275b3557cf0991e84853066d4eccb37b0f[root@node1 ~]#(4) 测试[root@node1 ~]# docker attach c941[root@c9414017f86e /]# ping -c1 192.168.18.1PING 192.168.18.1 (192.168.18.1) 56(84) bytes of data.64 bytes from 192.168.18.1: icmp_seq=1 ttl=64 time=5.19 ms--- 192.168.18.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 5.194/5.194/5.194/0.000 ms[root@c9414017f86e /]# ping -c1 192.168.18.2PING 192.168.18.2 (192.168.18.2) 56(84) bytes of data.64 bytes from 192.168.1.2: icmp_seq=1 ttl=63 time=2.74 ms--- 192.168.18.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 2.742/2.742/2.742/0.000 ms[root@master ~]#docker exec -it 34fb bash 选择一台容器进入 [root@34fb4017f86 /]# ping -c1 192.168.42.1PING 192.168.42.1 (192.168.42.1) 56(84) bytes of data.64 bytes from 192.168.42.1: icmp_seq=1 ttl=64 time=0.051 ms--- 192.168.42.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.051/0.051/0.051/0.000 ms ok 搞定
版本
升级
选择
配置
强大
成熟
两个
主流
也就是
位置
功能
功能强大
只有
容器
宿主
宿主机
工具
市面
底层
拓扑
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技缩写
无线互联网科技
互联网科技上市公司
广西互联网科技公司
赫美联合互联网科技
科技互联网创业计划书
互联网科技生活的内容
哈尔滨秒房互联网科技有限公司
科技互联网的估值
广州慧亚互联网科技怎么样
智腾互联网科技有限公司
辽宁互联网新科技
中国互联网十大科技股排名
乌鲁木齐新华智原互联网科技学校
合肥互联网科技公司公章图片
互联网科技快讯热点
富国互联网科技002692
世界互联网科技成果奖
互联网公司属于科技吗
山东蛋芒互联网科技有限公司
互联网科技开发公司
互联网科技小贷
广州互联网络科技有限公司
甘肃拓世互联网科技有限公司
华中科技有哪些互联网大佬
互联网经济与金融科技
花神(南京)互联网科技有限公司
互联网行业科技股
安徽零酒互联网科技有限公司
山东蛋芒互联网科技有限公司