码迷,mamicode.com
首页 > 其他好文 > 详细

(八)Docker网络跨主机通讯vxlan和vlan

时间:2017-07-12 23:35:41      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:网络   dns   vlan   networking   vxlan   



基于OpenvSwitch实现跨主机通信:

环境描述:

计算机名称IP

Docker01

eth0:192.168.124.150/24

eth1:172.16.100.20/24

docker0:172.17.0.1/24(默认)



Docker02

eth0:192.168.124.15124

eth1:172.16.100.30/24

docker0:172.17.0.1/24(默认)



dockerothsrv

eth0:192.168.124.152/24

eth1:172.16.100.10/24

docker0:172.17.0.1/24(默认)




安装OpenvSwitch

检查内核文件

ll /lib/modules/`uname -r`/build
ll -d /usr/src/kernels/`un

技术分享

下载openvswitch源码包并制作RPM包

mkdir -p /root/rpmbuild/SOURCES
cd /root/rpmbuild/SOURCES
wget http://openvswitch.org/releases/openvswitch-2.5.2.tar.gz
tar -xzf openvswitch-2.5.2.tar.gz
sed ‘s/openvswitch-kmod, //g‘ openvswitch-2.5.2/rhel/openvswitch.spec > openvswitch-2.5.2/rhel/openvswitch_no_kmod.spec
cd /root
rpmbuild -bb --nocheck ./rpmbuild/SOURCES/openvswitch-2.5.2/rhel/openvswitch_no_kmod.spec

制作好的RPM安装包在/root/rpmbuild/RPMS/x86_64目录下

技术分享

在2台机器上都安装

yum -y localinstall ./openvswitch-2.5.2-1.x86_64.rpm

技术分享

启动服务和查看服务状态

systemctl start openvswitch
systemctl status openvswitch

技术分享

注意:需要关闭SELinux和防火墙。

为什么要在用户家目录下建立一个叫做rpmbuild的目录?

rpmbuild --showrc | grep topdir

技术分享

上图可以看到rpmbuild是制作RPM包默认的工作目录,在每个用户家目录下,这个目录通常没有,需要自己建立,这些信息是通过一个叫做%_topdir的宏变量定义的,虽然你可以修改但是官方推荐不要直接修改,而是在用户家目录下建立一个隐藏文件

touch .rpmmacros
#定义目录
%_topdir    PATH

在%_topdir目录下通常有以下6个目录:

目录说明宏名称
BUILD编译RPM包时的临时目录%_buildir
BUILDROOT编译后乘车的软件临时安装目录%_buildrootdir
RPMS最终生成的可安装RPM包存放目录%_rpmdir
SOURCES所有源代码和补丁文件存放目录%_sourcedir
SPECS存放SPECS文件的目录,很重要%_specdir
SRPMS
软件最终的RPM源码个数存放路径%_srcrpmdir


openvswitch核心组件及常用命令说明

组件说明
ovs-vswitchdOVS守护进程是OVS核心组件,实现交换功能和Linux内核模块协同完成基于流的交换。它和上层的controller通信遵从OPENFLOW协议,它与ovsdb-server通信使用OVSDB协议,它和内核模块通过netlink通信,它支持多个独立的datapath(网桥),通过更改flow table实现了绑定和VLAN等功能。
ovsdb-serverOVS轻量级的数据库服务器,用于整个OVS的配置信息,包括接口,交换内容,VLAN 等等。ovs-vswitchd 根据数据库中的配置信息工作。它于 manager 和 ovs-vswitchd 交换信息使用了OVSDB(JSON-RPC)的方式
ovsdb-client
ovsdb-tool
ovs-docker
ovs-dpctl一个工具,用来配置交换机内核模块,可以控制转发规则
ovs-vsctl主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库
ovsdmmonitorGUI工具来显示ovsdb-server中数据信息。(Ubuntu下是可以使用apt-get安装,可以远程获取OVS数据库和OpenFlow的流表)
ovs-controller一个简单的OpenFlow控制器
ovs-ofctl
用来控制OVS作为OpenFlow交换机工作时候的流表内容
ovs-pki
OpenFlow交换机创建和管理公钥框架
ovs-tcpdundump
tcpdump的补丁,解析OpenFlow的消息
ovs-appctl主要是向OVS守护进程发送命令的,一般用不上。 a utility that sends commands to running Open vSwitch daemons (ovs-vswitchd)


命令说明
ovs-vsctl add-br [BRNAME]创建名为BRNAME的网桥
ovs-vsctl list-br显示所有网桥
ovs-vsctl add-port [BRNAME] [NIC1] [NIC2]关联网络接口(NIC,可以是物理的也可以是虚拟的)到名为BRNAME的网桥。一个物理网卡作为网桥的一部分是无法再拥有IP的,你想象一下Hyper-V宿主机,创建虚拟网卡(其实这个网卡就是虚拟交换机上的一个接口)之后,你原来的物理网卡是不是没有IP了,而原来的IP就跑到那个虚拟网卡上了,但是你仍然可以通过那个IP访问宿主机。所以你一旦把一个物理网卡绑定到一个网桥,你就需要去掉原来网卡的IP,然后给那个和网桥同名的虚拟网卡配置上原来的IP。只不过在hyper-v中是自动完成的,你只需要指定基于那个网卡来创建虚拟交换机,其余的创建交换机、把物理网卡绑定到虚拟交换机、把原来物理网卡IP移植到虚拟网卡上。在Linux中你需要手动做这些步骤。你可以绑定多个网卡到网桥,但要注意广播风暴,解决办法就是开启生成树协议。
ovs-vsctl set bridge [BRNAME] stp_enable=true|false关闭或开启指定网桥的STP功能,也就是生成树功能
ovs-vsctl del-port [BRNAME] [NIC]解除物理网卡与网桥的绑定
ovs-vsctl add-bond [BRNDNAME] [NIC1] [NIC2]多网卡绑定,然后和指定网桥绑定,这样可以提高带宽,而且不会产生广播风暴。
ovs-vsctl del-br [BRNAME]删除一个名为BRNAME的网桥,如果这个网桥不存在则会有错误提示。那么你可以加上--if-exists参数。
ovs-vsctl list-ports [BRNAME]列出在名为BRNAME上绑定的接口
ovs-vsctl port-to-br [NIC]列出所有挂到该物理网卡上的网桥
ovs-vsctl show查看网桥绑定的接口


实验目标:

前提:如果你没有额外的为容器分配IP的工具则建议你使用docker默认产生的网桥也就是docker0,并且通过修改配置文件,增加--dip参数来设置不同主机上的docker0网桥IP,因为毕竟默认都是一样的。但如果使用这种方式,那么你的网络结构设置将会受到一定限制,不过对于中小企业来说已经够用了。如果你有其他分配IP机制,那么完全可以不用默认的docker0网桥而是通过openvswitch来新建功能更加强大的网桥。

比如你可以选修ovs+valn的方式,在宿主机上建立OVS网桥,把一个物理网口变成trunk口,允许所有VLAN或者指定VALN通过,容器获取的就是你物理网络中的不同VLAN的地址,当然你外部需要有一个DHCP服务器,不过你最多也只能使用4096个VLAN,对于中等规模的互联网公司也足够了,但是对于大型互联网公司或者公有云则有IP就有很大限制,通常会使用NVGRE或Vxlan等隧道技术。


拓扑如下:

技术分享


基于Vlan的夸主机通讯:


拓扑如下:

技术分享

本文出自 “小恶魔的家” 博客,请务必保留此出处http://littledevil.blog.51cto.com/9445436/1946741

(八)Docker网络跨主机通讯vxlan和vlan

标签:网络   dns   vlan   networking   vxlan   

原文地址:http://littledevil.blog.51cto.com/9445436/1946741

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!