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 ...
随机推荐
- for语句联系 -小九九乘法表
public class a { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ...
- java资料——线性表(转)
线性表 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单, ...
- mongo 内存限制wiredTigerCacheSizeGB = 10
[root@iZ2zed126f44v90yv59ht3Z rabbitmq]# cat /usr/local/mongodb/mongodb.confport = 27017dbpath = /us ...
- 使用RAID与LVM磁盘阵列技术。
7.2 LVM逻辑卷管理器 前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了.换句话说,当 ...
- java- 控制double输出的小数点位数
像C语言直接 printf("%f.02",float); 非常简单,还可以控制输出的缩距,很是方便. Java就不一样了,但是java也有它的方便之处 下面用列子来解释,用到的 ...
- Css样式兼容IE6,IE7,FIREFOX的写法
根据FF和IE对一些符号识别的差异,我们可以单独对FF以及IE定义样式,例子: 区别IE6与FF: background:orange;*background:blue; 区别I ...
- 关于Cocos2d-x中物理世界的物体乱跳的问题的解决
这是电脑短时间内帧率低,无法满足游戏配置的帧率引起的. 解决方法: 第一种: 1.打开AppDelegate.cpp文件 2.把director->setAnimationInterval(1. ...
- 常用命令——sed详解
以下内容参考:http://qifuguang.me/2015/09/21/sed命令详解/ sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在 ...
- PHP与ASP.NET的优劣比较
PHP与ASP.NET的比较 表 1 PHP 4 PHP5 ASP.NET 软件价格 免费 免费 免费 平台价格 免费 免费 $$ 速度 强 强 弱 效率 强 强 弱 安全性 强 强 强 平台 强 强 ...
- php Laravel 框架之建立后台目录
今天研究了在Laravel框架中的控制器中加入后台的目录.发现了一些小的规律,拿来和大家分享一下吧. 通常情况下,我们是直接在controllers目录中加入我们的控制器,然后再routes.php ...