Docke 使用Open vSwitch实现跨主机通信
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,--xxong亲自验证目前市面上主流的解决方法有flannel, weave, Pipework, Open vSwitch等。Open vSwitch实现比较简单,成熟且功能强大,所以很适合作为解决
千家信息网最后更新 2025年12月04日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安全错误
数据库的锁怎样保障安全
上海科技宽带互联网
网络安全售后工程师
个人电脑变成网站服务器
衡阳县网络安全宣传周活动
安卓软件开发费脑子
服务器主板型号分类
台州市乐橙软件开发
2020网络安全知多少答案
建筑智能控制网络技术四个总线
在数据库服务器上怎么进数据库
服务器配置多个ssl
上饶市智宸网络技术有限公司
人文数据库
台湾学术期刊在线数据库账号密码
添加打印服务器
沈阳erp软件开发需要多少钱
服务器硬件
服务器需要双电源吗
mysql 创建新数据库表
飞腾服务器单价
服务器如何节能
不属于软件开发时期
江苏制作网络技术设备
九江网络安全认证体系
cf高清大区连接服务器失败
个人介绍范文 软件开发
北京好比特网络技术有限公司
数据库何时用外键关联
经营范围网络技术的研究
asp中的数据库文件