Neutron SDN 手动实现手册
安装架构介绍

虚拟网络
- Net0:
- Network name: VirtualBox host-only Ethernet Adapter#2
- Purpose: administrator / management network
- IP block: 10.20.0.0/24
- DHCP: disable
- Linux device: eth0
- Net1:
- Network name: VirtualBox host-only Ethernet Adapter#3
- Purpose: public network
- DHCP: disable
- IP block: 172.16.0.0/24
- Linux device: eth1
- Net2:
- Network name: VirtualBox host-only Ethernet Adapter#4
- Purpose: Storage/private network
- DHCP: disable
- IP block: 192.168.4.0/24
- Linux device: eth2
复制代码
虚拟机
- VM1:
- Name : network1
- vCPU:1
- Memory :1G
- Disk:30G
- Network:net1,net2,net3
- VM2:
- Name: compute1
- vCPU:1
- Memory :1G
- Disk:30G
- Networks:net1,net2,net3
复制代码
Linux interface设置
- network1
- eth0:10.20.0.201 (management network)
- eht1:172.16.0.201 (public/external network)
- eht2:192.168.4.201 (private network,gre tunning)
- compute1
- eth0:10.20.0.202 (management network)
- eht1:(disabled)
- eht2:192.168.4.202 (private network,gre tunning)
复制代码
模拟安装网络节点(Network1)
模拟Network 节点相关实现,比如L3、dhcp-agent实现,为了模拟多节点网络情况,这里Network同时也模拟一个计算节点,模拟M2 openvswitch 实现,上面运行instance1。
网络接口配置
- vi /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- TYPE=Ethernet
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=static
- IPADDR=10.20.0.201
- NETMASK=255.255.255.0
- vi /etc/sysconfig/network-scripts/ifcfg-eth1
- DEVICE=eth1
- TYPE=Ethernet
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=static
- IPADDR=172.16.0.201
- NETMASK=255.255.255.0
- vi /etc/sysconfig/network-scripts/ifcfg-eth2
- DEVICE=eth2
- TYPE=Ethernet
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=static
- IPADDR=192.168.4.201
- NETMASK=255.255.255.0
复制代码
重启网络服务
- service network restart
复制代码
安装需要用到的包
- yum install libvirt openvswitch python-virtinst xauth tigervnc -y
复制代码
移除默认的libvirt 网络,方便清晰分析网络情况
- virsh net-destroy default
- virsh net-autostart --disable default
- virsh net-undefine default
复制代码
设置允许ipforwarding
- vi /etc/sysctl.conf
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
复制代码
立即生效
- sysctl -p
复制代码
启动openvswitch
- service openvswitch start
- chkconfig openvswitch on
复制代码
创建一个linux bridge
- brctl addbr qbr01
- ip link set qbr01 up
复制代码
创建一个instance,并连接到qbr01 Bridge,网络接口部分配置如下
- <interface type='bridge'>
- <source bridge='qbr01'/>
- <target dev='tap01'/>
- <model type='virtio'/>
- <driver name='qemu'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
- </interface>
复制代码
可以参考附件./gre/instance1.xml创建
- cp ~/gre/ /var/tmp/
- cd /var/tmp/gre
- mv cirros-0.3.0-x86_64-disk.img instance1.img
- virsh define instance1.xml
- virsh start instance1
- virsh vncdisplay instance1
- vncviewer :0
复制代码
启动console 以后,登录添加ip 地址 192.168.1.11
- ip addr add 192.168.1.11/24 dev eth0
- route add default gw 192.168.1.1
复制代码
创建一个内部bridge br-int, 模拟 OpenStack integrated bridge
- ovs-vsctl add-br br-int
- 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'
- ip link add qvo01 type veth peer name qvb01
- brctl addif qbr01 qvb01
- ovs-vsctl add-port br-int qvo01
- ovs-vsctl set port qvo01 tag=100
- ip link set qvb01 up
- ip link set qvo01 up
复制代码
查看现在network1上的 br-int
- ovs-vsctl show
复制代码
模拟安装计算节点(compute1)
网络接口配置
- vi /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- TYPE=Ethernet
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=static
- IPADDR=10.20.0.202
- NETMASK=255.255.255.0
- vi /etc/sysconfig/network-scripts/ifcfg-eth1
- DEVICE=eth1
- TYPE=Ethernet
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=static
- IPADDR=172.16.0.202
- NETMASK=255.255.255.0
- vi /etc/sysconfig/network-scripts/ifcfg-eth2
- DEVICE=eth2
- TYPE=Ethernet
- ONBOOT=yes
- NM_CONTROLLED=yes
- BOOTPROTO=static
- IPADDR=192.168.4.202
- NETMASK=255.255.255.0
复制代码
重启网络服务
- service network restart
复制代码
安装需要用到的包
- yum install libvirt openvswitch python-virtinst xauth tigervnc
复制代码
移除libvirt 默认的网络
- virsh net-destroy default
- virsh net-autostart --disable default
- virsh net-undefine default
复制代码
设置允许ipforwarding
- vi /etc/sysctl.conf
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
复制代码
立即生效
- sysctl -p
复制代码
启动openvswitch
- service openvswitch start
- chkconfig openvswitch on
复制代码
创建一个linux bridge
- brctl addbr qbr02
- ip link set qbr02 up
复制代码
创建一个vm,并连接到qbr02
上gre目录到compute1 节点,可以参考附件./gre/instance2.xml创建
- cp ~/gre/ /var/tmp/
- cd /var/tmp/gre
- mv cirros-0.3.0-x86_64-disk.img instance2.img
- virsh define instance2.xml
- virsh start instance2
- virsh vncdesplay instance2
- vncviewer :0
复制代码
启动console 以后,登录添加ip得知 192.168.1.12
- ip addr add 192.168.1.12/24 dev eth0
- route add default gw 192.168.1.1
复制代码
创建一个内部bridge br-int, 模拟 OpenStack integrated bridge
- ovs-vsctl add-br br-int
- 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'
- ip link add qvo02 type veth peer name qvb02
- brctl addif qbr02 qvb02
- ovs-vsctl add-port br-int qvo02
- ovs-vsctl set port qvo02 tag=100
- ip link set qvb02 up
- ip link set qvo02 up
复制代码
查看现在network1 上的 br-int
- ovs-vsctl show
复制代码
检查是否能连通instance1,在instance2的控制台
- ping 192.168.1.11
复制代码
通过 Network Namespace 实现租户私有网络互访
添加一个namespace,dhcp01用于隔离租户网络。
- ip netns add dhcp01
复制代码
为私有网络192.168.1.0/24 ,在命名空间dhcp01 中 创建dhcp 服务
- ovs-vsctl add-port br-int tapdhcp01 -- set interface tapdhcp01 type=internal
- ovs-vsctl set port tapdhcp01 tag=100
- ip link set tapdhcp01 netns dhcp01
- ip netns exec dhcp01 ip addr add 192.168.1.2/24 dev tapdhcp01
- ip netns exec dhcp01 ip link set tapdhcp01 up
复制代码
检查网络是否连通,在namespace 访问instance1 和 instance2
- ip netns exec dhcp01 ping 192.168.1.12
- ip netns exec dhcp01 ping 192.168.1.11
复制代码
通过 Network Namespace 和Iptables 实现L3 router
ovs-vsctl add-br br-ex
重新配置eth1 和 br-ex
- vi /etc/sysconfig/network-scripts/ifcfg-eth1
- DEVICE=eth1
- ONBOOT=yes
- BOOTPROTO=none
- PROMISC=yes
- MTU=1546
- vi /etc/sysconfig/network-scripts/ifcfg-br-ex
- DEVICE=br-ex
- TYPE=Bridge
- ONBOOT=yes
- BOOTPROTO=none
- IPADDR0=172.16.0.201
- PREFIX0=24
复制代码
重启启动网络服务
- ovs-vsctl add-port br-ex eth1 && service network restart
复制代码
检查网络,配置后是否连通
- ping 172.16.0.201
复制代码
添加一个namespace,router01 用于路由和floating ip 分配
- ip netns add router01
复制代码
在br-int添加一个接口,作为私有网络192.168.1.0/24的网关
- ovs-vsctl add-port br-int qr01 -- set interface qr01 type=internal
- ovs-vsctl set port qr01 tag=100
- ip link set qr01 netns router01
- ip netns exec router01 ip addr add 192.168.1.1/24 dev qr01
- ip netns exec router01 ip link set qr01 up
- ip netns exec router01 ip link set lo up
复制代码
在br-ex中添加一个接口,用于私网192.168.1.0/24设置下一跳地址
- ovs-vsctl add-port br-ex qg01 -- set interface qg01 type=internal
- ip link set qg01 netns router01
- ip netns exec router01 ip addr add 172.16.0.100/24 dev qg01
- ip netns exec router01 ip link set qg01 up
- ip netns exec router01 ip link set lo up
复制代码
模拟分配floating ip 访问instance1
为instance1 192.168.1.11 分配floating ip,172.16.0.101
- ip netns exec router01 ip addr add 172.16.0.101/32 dev qg01
- ip netns exec router01 iptables -t nat -A OUTPUT -d 172.16.0.101/32 -j DNAT --to-destination 192.168.1.11
- ip netns exec router01 iptables -t nat -A PREROUTING -d 172.16.0.101/32 -j DNAT --to-destination 192.168.1.11
- ip netns exec router01 iptables -t nat -A POSTROUTING -s 192.168.1.11/32 -j SNAT --to-source 172.16.0.101
- 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
- ping 172.16.0.101
复制代码
如果需要清除nat chain
- iptables -t nat -F
Neutron SDN 手动实现手册的更多相关文章
- neutron之SDN简单测试
title: Neutron SDN 手动实现手册 date: 2017-04-13 23:37 tags: Network 本文旨在通过自己搭建类似neutron (openvswitch + gr ...
- 基于Neutron的Kubernetes SDN实践经验之谈
首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景. CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范.参数规 ...
- 通过手动安装来启动ZStack
当您使用手动安装手册完成ZStack的安装之后,您可以继续进行一些必要的配置 以便用它来自动云环境.ZStack的管控工具zstack-ctl会安装到每一个ZStack管理节点,您可以使用它来控制本地 ...
- gentoo 安装
加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...
- 为什么说Neutron不是SDN?
http://vuejs.com.cn/ 这里面有个canvans 画图的js 代码.有意思,研究一下. Neutron 介绍:https://www.ibm.com/developerworks/c ...
- Openstack neutron:SDN现状
目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF - ...
- [cloud][sdn] neutron了解
了解 neutron 文档:https://yeasy.gitbooks.io/openstack_understand_neutron/content/ LB讲的不细.DVR讲的不清晰. 读了全文之 ...
- openstack stein部署手册 9. neutron
# 安装程序包 yum -y install openstack-neutron-linuxbridge ebtables ipset # 变更配置文件 mv /etc/neutron/neutron ...
- [cloud][sdn] LBaaS/neutron / Octavia
清晰/浅显: http://www.cnblogs.com/sammyliu/p/4656176.html IBM:写的一般般,价值不大 https://www.ibm.com/developerwo ...
随机推荐
- C语言 · 学生信息(P1102)
算法训练 P1102 时间限制:1.0s 内存限制:256.0MB 定义一个学生结构体类型student,包括4个字段,姓名.性别.年龄和成绩.然后在主函数中定义一个结构体数组(长度 ...
- 关于JXL读写以及修改EXCEL文件<转>
首先引用网上的文章,谈谈JXL与POI的区别 POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API. Java Excel俗称jxl是一开放源码项目,通过它Ja ...
- 小任务tasklet应用
一个使用tasklet的中断程序首先会通过执行中断处理程序来快速完成上半部分的工作,接着通过调度tasklet使得下半部分的工作得以完成,但是下半部分何时执行属于内核的工作. 由于tasklet依靠软 ...
- java-关于getClass().getClassLoader()
源地址:http://blog.sina.com.cn/s/blog_6ec6be0e01011xof.html InputStream is = getClass().getClassLoader( ...
- 如何修复U盘提示被写保护的问题
最近一客户来店里说新买的U盘没用多久,在复制文件时提示:该磁盘已被写保护! 打不开U盘,并且也不能格式化,在DOS下重新给U盘分区也没用. 今天鼎盛电脑科技服务部的工程师就帮大家解决这个问题. 首先客 ...
- R中利用apply、tapply、lapply、sapply、mapply、table等函数进行分组统计
apply函数(对一个数组按行或者按列进行计算): 使用格式为: apply(X, MARGIN, FUN, ...) 其中X为一个数组:MARGIN为一个向量(表示要将函数FUN应用到X的行还是列) ...
- 13 款最棒的 jQuery 图像 360° 旋转插件
在 web 页面上使用 jQuery 图像 360 度旋转插件是最美也是最方便的显示图像的方式.这些超级棒的 360° 图像选择插件允许用户更详细的分析产品或者文章.jQuery 图像旋转插件可以让用 ...
- 【转】java基本数据类型vs封装数据类型
1.基本概念 说java是面向对象的语言是正确的,但是她不纯,基本数据类型就不是对象. 基本数据类型可以大致分为三类:数据型:int.short.long.byte.float.double字符型:c ...
- oop-Inheritance & Polymorphism
本文主要作为java学习笔记,方便以后查看,大部分内容都源于以下网站: http://www.ntu.edu.sg/home/ehchua/programming/index.html#Game 本文 ...
- 第二百八十二节,MySQL数据库-MySQL视图
MySQL数据库-MySQL视图 1.视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 2.也 ...