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 ...
随机推荐
- jackson2.1.4 序列化 通过给定Class映射 与抽象类的映射
//如果已知想要序列化的类型 可以使用TypeReference来进行处理 //List<MyBean> result = mapper.readValue(src, new TypeRe ...
- [Django学习]视图
视图 视图接受Web请求并且返回Web响应 视图就是一个python函数,被定义在views.py中 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等 响应处理过程如下图: 1. UR ...
- iOS边练边学--自定义非等高的cell
一.使用xib或者storyboard自定义非等高的cell实现方式差不多,这里简单介绍一下通过xib文件实现的方法 <1.1>创建一个继承自UITableViewCell的子类,比如Ch ...
- Winform控件:保存文件对话框(SaveFileDialog)
SaveFileDialog用于保存文件 1.新建Winform窗体应用程序,命名为SaveFileDialogDemo. 2.在界面上添加一个按钮的控件(用于打开保存文件对话框),添加文本控件,用于 ...
- MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
工程需要加上各个路径: 库使用需要几个文件: 1.include 文件夹 c/c++ /常规/附加包含目录 Connector/c++ 的安装版里面的Include 文件夹.或者把 /driver以及 ...
- 获取touchstart,touchmove,touchend 坐标
简单说下如何用jQuery 和 js原生代码获取touchstart,touchmove,touchend 坐标值: jQuery 代码: $('#id').on('touchstart',funct ...
- oop-Inheritance & Polymorphism
本文主要作为java学习笔记,方便以后查看,大部分内容都源于以下网站: http://www.ntu.edu.sg/home/ehchua/programming/index.html#Game 本文 ...
- Servlet程序的入口点是?( )
Servlet程序的入口点是?( ) A.init() B.main() C.service() D.doGet() 解答:C
- e654. 获得文本的缩略图
Shape getTextShape(Graphics2D g2d, String str, Font font) { FontRenderContext frc = g2d.getFontRende ...
- CSS导入使用及引用的两种方法
方法一<link rel="stylesheet" type="text/css" href="test.css"> 方法二&l ...