安装架构介绍

本文旨在通过自己搭建类似neutron (openvswitch + gre) 实现SDN 的环境,学习了解其工作原理,模拟核心原理,比如:同一租户自定义网络 instance 互通,手动为instance 分配 floating ip 等相关内容。
<ignore_js_op>

虚拟网络

需要新建3个虚拟网络Net0、Net1和Net2,其在virtual box 中对应配置如下。
  1. Net0:
  2. Network name: VirtualBox  host-only Ethernet Adapter#2
  3. Purpose: administrator / management network
  4. IP block: 10.20.0.0/24
  5. DHCP: disable
  6. Linux device: eth0
  7. Net1:
  8. Network name: VirtualBox  host-only Ethernet Adapter#3
  9. Purpose: public network
  10. DHCP: disable
  11. IP block: 172.16.0.0/24
  12. Linux device: eth1
  13. Net2:
  14. Network name: VirtualBox  host-only Ethernet Adapter#4
  15. Purpose: Storage/private network
  16. DHCP: disable
  17. IP block: 192.168.4.0/24
  18. Linux device: eth2

复制代码

虚拟机

需要新建2个虚拟机VM1和VM2,其对应配置如下。
  1. VM1:
  2. Name : network1
  3. vCPU:1
  4. Memory :1G
  5. Disk:30G
  6. Network:net1,net2,net3
  7. VM2:
  8. Name: compute1
  9. vCPU:1
  10. Memory :1G
  11. Disk:30G
  12. Networks:net1,net2,net3

复制代码

Linux interface设置

  1. network1
  2. eth0:10.20.0.201   (management network)
  3. eht1:172.16.0.201   (public/external network)
  4. eht2:192.168.4.201  (private network,gre tunning)
  5. compute1
  6. eth0:10.20.0.202   (management network)
  7. eht1:(disabled)
  8. eht2:192.168.4.202  (private network,gre tunning)

复制代码

模拟安装网络节点(Network1)

模拟Network 节点相关实现,比如L3、dhcp-agent实现,为了模拟多节点网络情况,这里Network同时也模拟一个计算节点,模拟M2 openvswitch 实现,上面运行instance1。

网络接口配置

  1. vi /etc/sysconfig/network-scripts/ifcfg-eth0
  2. DEVICE=eth0
  3. TYPE=Ethernet
  4. ONBOOT=yes
  5. NM_CONTROLLED=yes
  6. BOOTPROTO=static
  7. IPADDR=10.20.0.201
  8. NETMASK=255.255.255.0
  9. vi /etc/sysconfig/network-scripts/ifcfg-eth1
  10. DEVICE=eth1
  11. TYPE=Ethernet
  12. ONBOOT=yes
  13. NM_CONTROLLED=yes
  14. BOOTPROTO=static
  15. IPADDR=172.16.0.201
  16. NETMASK=255.255.255.0
  17. vi /etc/sysconfig/network-scripts/ifcfg-eth2
  18. DEVICE=eth2
  19. TYPE=Ethernet
  20. ONBOOT=yes
  21. NM_CONTROLLED=yes
  22. BOOTPROTO=static
  23. IPADDR=192.168.4.201
  24. NETMASK=255.255.255.0

复制代码

重启网络服务

  1. service network restart

复制代码

安装需要用到的包

  1. yum install libvirt openvswitch python-virtinst xauth tigervnc -y

复制代码

移除默认的libvirt 网络,方便清晰分析网络情况

  1. virsh net-destroy default
  2. virsh net-autostart --disable default
  3. virsh net-undefine default

复制代码

设置允许ipforwarding

  1. vi /etc/sysctl.conf
  2. net.ipv4.ip_forward=1
  3. net.ipv4.conf.all.rp_filter=0
  4. net.ipv4.conf.default.rp_filter=0

复制代码

立即生效

  1. sysctl -p

复制代码

启动openvswitch

  1. service openvswitch start
  2. chkconfig openvswitch on

复制代码

创建一个linux bridge

  1. brctl addbr qbr01
  2. ip link set qbr01 up

复制代码

创建一个instance,并连接到qbr01 Bridge,网络接口部分配置如下

  1. <interface type='bridge'>
  2. <source bridge='qbr01'/>
  3. <target dev='tap01'/>
  4. <model type='virtio'/>
  5. <driver name='qemu'/>
  6. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  7. </interface>

复制代码

可以参考附件./gre/instance1.xml创建

  1. cp ~/gre/ /var/tmp/
  2. cd /var/tmp/gre
  3. mv cirros-0.3.0-x86_64-disk.img instance1.img
  4. virsh define instance1.xml
  5. virsh start instance1
  6. virsh vncdisplay instance1
  7. vncviewer :0

复制代码

启动console 以后,登录添加ip 地址 192.168.1.11

  1. ip addr add 192.168.1.11/24 dev eth0
  2. route add default gw 192.168.1.1

复制代码

创建一个内部bridge br-int, 模拟 OpenStack integrated bridge

  1. ovs-vsctl add-br br-int
  2. ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.4.202

复制代码

创建一个veth peer,连接Linux Bridge 'qbr01' 和 OpenvSwich Bridge 'br-ini'

  1. ip link add qvo01 type veth peer name qvb01
  2. brctl addif qbr01 qvb01
  3. ovs-vsctl add-port br-int qvo01
  4. ovs-vsctl set port qvo01 tag=100
  5. ip link set qvb01 up
  6. ip link set qvo01 up

复制代码

查看现在network1上的 br-int

  1. ovs-vsctl show

复制代码

模拟安装计算节点(compute1)

网络接口配置

  1. vi /etc/sysconfig/network-scripts/ifcfg-eth0
  2. DEVICE=eth0
  3. TYPE=Ethernet
  4. ONBOOT=yes
  5. NM_CONTROLLED=yes
  6. BOOTPROTO=static
  7. IPADDR=10.20.0.202
  8. NETMASK=255.255.255.0
  9. vi /etc/sysconfig/network-scripts/ifcfg-eth1
  10. DEVICE=eth1
  11. TYPE=Ethernet
  12. ONBOOT=yes
  13. NM_CONTROLLED=yes
  14. BOOTPROTO=static
  15. IPADDR=172.16.0.202
  16. NETMASK=255.255.255.0
  17. vi /etc/sysconfig/network-scripts/ifcfg-eth2
  18. DEVICE=eth2
  19. TYPE=Ethernet
  20. ONBOOT=yes
  21. NM_CONTROLLED=yes
  22. BOOTPROTO=static
  23. IPADDR=192.168.4.202
  24. NETMASK=255.255.255.0

复制代码

重启网络服务

  1. service network restart

复制代码

安装需要用到的包

  1. yum install libvirt openvswitch python-virtinst xauth tigervnc

复制代码

移除libvirt 默认的网络

  1. virsh net-destroy default
  2. virsh net-autostart --disable default
  3. virsh net-undefine default

复制代码

设置允许ipforwarding

  1. vi /etc/sysctl.conf
  2. net.ipv4.ip_forward=1
  3. net.ipv4.conf.all.rp_filter=0
  4. net.ipv4.conf.default.rp_filter=0

复制代码

立即生效

  1. sysctl -p

复制代码

启动openvswitch

  1. service openvswitch start
  2. chkconfig openvswitch on

复制代码

创建一个linux bridge

  1. brctl addbr qbr02
  2. ip link set qbr02 up

复制代码

创建一个vm,并连接到qbr02

上gre目录到compute1 节点,可以参考附件./gre/instance2.xml创建

  1. cp ~/gre/ /var/tmp/
  2. cd /var/tmp/gre
  3. mv cirros-0.3.0-x86_64-disk.img instance2.img
  4. virsh define instance2.xml
  5. virsh start instance2
  6. virsh vncdesplay instance2
  7. vncviewer :0

复制代码

启动console 以后,登录添加ip得知 192.168.1.12

  1. ip addr add 192.168.1.12/24 dev eth0
  2. route add default gw 192.168.1.1

复制代码

创建一个内部bridge br-int, 模拟 OpenStack integrated bridge

  1. ovs-vsctl add-br br-int
  2. ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.4.201

复制代码

创建一个veth peer,连接Linux Bridge 'qbr02' 和 OpenvSwich Bridge 'br-ini'

  1. ip link add qvo02 type veth peer name qvb02
  2. brctl addif qbr02 qvb02
  3. ovs-vsctl add-port br-int qvo02
  4. ovs-vsctl set port qvo02 tag=100
  5. ip link set qvb02 up
  6. ip link set qvo02 up

复制代码

查看现在network1 上的 br-int

  1. ovs-vsctl show

复制代码

检查是否能连通instance1,在instance2的控制台

  1. ping 192.168.1.11

复制代码

通过 Network Namespace 实现租户私有网络互访

添加一个namespace,dhcp01用于隔离租户网络。

  1. ip netns add dhcp01

复制代码

为私有网络192.168.1.0/24 ,在命名空间dhcp01 中 创建dhcp 服务

  1. ovs-vsctl add-port br-int tapdhcp01 -- set interface tapdhcp01 type=internal
  2. ovs-vsctl set port tapdhcp01 tag=100
  3. ip link set tapdhcp01 netns dhcp01
  4. ip netns exec dhcp01 ip addr add 192.168.1.2/24 dev tapdhcp01
  5. ip netns exec dhcp01 ip link set tapdhcp01 up

复制代码

检查网络是否连通,在namespace 访问instance1 和 instance2

  1. ip netns exec dhcp01 ping 192.168.1.12
  2. ip netns exec dhcp01 ping 192.168.1.11

复制代码

通过 Network Namespace 和Iptables 实现L3 router

ovs-vsctl add-br br-ex

重新配置eth1 和 br-ex

  1. vi /etc/sysconfig/network-scripts/ifcfg-eth1
  2. DEVICE=eth1
  3. ONBOOT=yes
  4. BOOTPROTO=none
  5. PROMISC=yes
  6. MTU=1546
  7. vi /etc/sysconfig/network-scripts/ifcfg-br-ex
  8. DEVICE=br-ex
  9. TYPE=Bridge
  10. ONBOOT=yes
  11. BOOTPROTO=none
  12. IPADDR0=172.16.0.201
  13. PREFIX0=24

复制代码

重启启动网络服务

  1. ovs-vsctl add-port br-ex eth1 && service network restart

复制代码

检查网络,配置后是否连通

  1. ping 172.16.0.201

复制代码

添加一个namespace,router01 用于路由和floating ip 分配

  1. ip netns add router01

复制代码

在br-int添加一个接口,作为私有网络192.168.1.0/24的网关

  1. ovs-vsctl add-port br-int qr01 -- set interface qr01 type=internal
  2. ovs-vsctl set port qr01 tag=100
  3. ip link set qr01 netns router01
  4. ip netns exec router01 ip addr add 192.168.1.1/24 dev qr01
  5. ip netns exec router01 ip link set qr01 up
  6. ip netns exec router01 ip link set lo up

复制代码

在br-ex中添加一个接口,用于私网192.168.1.0/24设置下一跳地址

  1. ovs-vsctl add-port br-ex qg01 -- set interface qg01  type=internal
  2. ip link set qg01  netns router01
  3. ip netns exec router01 ip addr add 172.16.0.100/24 dev qg01
  4. ip netns exec router01 ip link set qg01 up
  5. ip netns exec router01 ip link set lo up

复制代码

模拟分配floating ip 访问instance1

为instance1 192.168.1.11 分配floating ip,172.16.0.101

  1. ip netns exec router01 ip addr add 172.16.0.101/32 dev qg01
  2. ip netns exec router01  iptables -t nat -A OUTPUT -d 172.16.0.101/32  -j DNAT --to-destination 192.168.1.11
  3. ip netns exec router01  iptables -t nat -A PREROUTING -d 172.16.0.101/32 -j DNAT --to-destination 192.168.1.11
  4. ip netns exec router01  iptables -t nat -A POSTROUTING -s 192.168.1.11/32 -j SNAT --to-source 172.16.0.101
  5. ip netns exec router01  iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 172.16.0.100

复制代码

测试floating ip

  1. ping 172.16.0.101

复制代码

如果需要清除nat chain

  1. iptables -t nat -F

Neutron SDN 手动实现手册的更多相关文章

  1. neutron之SDN简单测试

    title: Neutron SDN 手动实现手册 date: 2017-04-13 23:37 tags: Network 本文旨在通过自己搭建类似neutron (openvswitch + gr ...

  2. 基于Neutron的Kubernetes SDN实践经验之谈

    首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景. CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范.参数规 ...

  3. 通过手动安装来启动ZStack

    当您使用手动安装手册完成ZStack的安装之后,您可以继续进行一些必要的配置 以便用它来自动云环境.ZStack的管控工具zstack-ctl会安装到每一个ZStack管理节点,您可以使用它来控制本地 ...

  4. gentoo 安装

    加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...

  5. 为什么说Neutron不是SDN?

    http://vuejs.com.cn/ 这里面有个canvans 画图的js 代码.有意思,研究一下. Neutron 介绍:https://www.ibm.com/developerworks/c ...

  6. Openstack neutron:SDN现状

    目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF -  ...

  7. [cloud][sdn] neutron了解

    了解 neutron 文档:https://yeasy.gitbooks.io/openstack_understand_neutron/content/ LB讲的不细.DVR讲的不清晰. 读了全文之 ...

  8. openstack stein部署手册 9. neutron

    # 安装程序包 yum -y install openstack-neutron-linuxbridge ebtables ipset # 变更配置文件 mv /etc/neutron/neutron ...

  9. [cloud][sdn] LBaaS/neutron / Octavia

    清晰/浅显: http://www.cnblogs.com/sammyliu/p/4656176.html IBM:写的一般般,价值不大 https://www.ibm.com/developerwo ...

随机推荐

  1. for语句联系 -小九九乘法表

    public class a { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ...

  2. java资料——线性表(转)

    线性表 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单, ...

  3. mongo 内存限制wiredTigerCacheSizeGB = 10

    [root@iZ2zed126f44v90yv59ht3Z rabbitmq]# cat /usr/local/mongodb/mongodb.confport = 27017dbpath = /us ...

  4. 使用RAID与LVM磁盘阵列技术。

    7.2 LVM逻辑卷管理器 前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了.换句话说,当 ...

  5. java- 控制double输出的小数点位数

    像C语言直接  printf("%f.02",float); 非常简单,还可以控制输出的缩距,很是方便. Java就不一样了,但是java也有它的方便之处 下面用列子来解释,用到的 ...

  6. Css样式兼容IE6,IE7,FIREFOX的写法

    根据FF和IE对一些符号识别的差异,我们可以单独对FF以及IE定义样式,例子: 区别IE6与FF:          background:orange;*background:blue;   区别I ...

  7. 关于Cocos2d-x中物理世界的物体乱跳的问题的解决

    这是电脑短时间内帧率低,无法满足游戏配置的帧率引起的. 解决方法: 第一种: 1.打开AppDelegate.cpp文件 2.把director->setAnimationInterval(1. ...

  8. 常用命令——sed详解

    以下内容参考:http://qifuguang.me/2015/09/21/sed命令详解/ sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在 ...

  9. PHP与ASP.NET的优劣比较

    PHP与ASP.NET的比较 表 1 PHP 4 PHP5 ASP.NET 软件价格 免费 免费 免费 平台价格 免费 免费 $$ 速度 强 强 弱 效率 强 强 弱 安全性 强 强 强 平台 强 强 ...

  10. php Laravel 框架之建立后台目录

    今天研究了在Laravel框架中的控制器中加入后台的目录.发现了一些小的规律,拿来和大家分享一下吧. 通常情况下,我们是直接在controllers目录中加入我们的控制器,然后再routes.php ...