一 实验目的
本文旨在通过自己搭建类似neutron (openvswitch + gre) 实现SDN 的环境,学习了解其工作原理,模拟核心原理,比如:同一租户自定义网络 instance 互通,手动为instance 分配 floating ip 等相关内容。
二 实验原理图
三 实验要求
手动实现租户内instance互通
四 network1节点配置
1 网络接口配置
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 restart2 修改主机名为network1
[root@network1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=network13 安装需要的包
[root@network1 ~]# yum install libvirt openvswitch python-virtinst xauth tigervnc -y4 移除默认的libvirt 网络,方便清晰分析网络情况
[root@network1 ~]# virsh net-destroy default
Network default destroyed
[root@network1 ~]# virsh net-autostart --disable default
Network default unmarked as autostarted
[root@network1 ~]# virsh net-undefine default
Network default has been undefined5 设置允许ipforwarding
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=06 立即生效
[root@network1 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 42949672967 启动openvswitch
service openvswitch start
chkconfig openvswitch on8 创建一个linux bridge
brctl addbr qbr01
ip link set qbr01 up9 准备虚拟机文件
[root@network1 gre]# ls
instance1.img instance1.xml
[root@network1 gre]# pwd
/var/tmp/gre
[root@network1 gre]# cat instance1.xml
<domain type="qemu">
<uuid>23469de0-a3a0-4214-a60e-a45322bcc370</uuid>
<name>instance1</name>
<memory>524288</memory>
<vcpu>1</vcpu>
<sysinfo type="smbios">
<system>
<entry name="manufacturer">Red Hat Inc.</entry>
<entry name="product">OpenStack Nova</entry>
<entry name="version">2014.1.1-3.el6</entry>
<entry name="serial">b8d4ec5f-acd6-7111-c69b-600912a079bb</entry>
<entry name="uuid">23469de0-a3a0-4214-a60e-a45322bcc370</entry>
</system>
</sysinfo>
<os>
<type>hvm</type>
<boot dev="hd"/>
<smbios mode="sysinfo"/>
</os>
<features>
<acpi/>
<apic/>
</features>
<clock offset="utc"/>
<cpu mode="host-model" match="exact"/>
<devices>
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" cache="none"/>
<source file="/var/tmp/gre/instance1.img"/>
<target bus="virtio" dev="vda"/>
</disk>
<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>
<serial type="file">
<source path="/var/tmp/gre/instance1.log"/>
</serial>
<serial type="pty"/>
<input type="tablet" bus="usb"/>
<graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/>
<video>
<model type="cirrus"/>
</video>
</devices>
</domain>10 启动虚拟机
virsh define instance1.xml
virsh start instance1
vncviewer :011 启动console 以后,登录添加ip 地址 192.168.1.11
---注意,这一步最后做,在验证之前做,先保证192.168.4.201和192.168.4.202两个IP能够ping通
sudo ip addr add 192.168.1.11/24 dev eth012 创建一个内部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
[root@network1 ~]# ovs-vsctl show
0dd147b2-ef74-44e5-bbb4-52bcf29d3fef
Bridge br-int
Port "gre0"
Interface "gre0"
type: gre
options: {remote_ip="192.168.4.202"}
Port br-int
Interface br-int
type: internal
ovs_version: "2.1.3"13 创建一个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
ip a又多了两个port
五 computer1节点配置
1 网络接口配置
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.02 修改主机名为network1
[root@computer1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=computer13 安装需要的包
[root@computer11 ~]# yum install libvirt openvswitch python-virtinst xauth tigervnc -y4 移除默认的libvirt 网络,方便清晰分析网络情况
[root@network1 ~]# virsh net-destroy default
Network default destroyed
[root@network1 ~]# virsh net-autostart --disable default
Network default unmarked as autostarted
[root@network1 ~]# virsh net-undefine default
Network default has been undefined5 设置允许ipforwarding
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=06 立即生效
[root@computer1 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 42949672967 启动openvswitch
service openvswitch start
chkconfig openvswitch on8 创建一个linux bridge
brctl addbr qbr02
ip link set qbr02 up9 准备虚拟机相关文件
[root@computer1 gre]# ll
total 9540
-rw-r--r-- 1 root root 9761280 Mar 4 18:53 instance2.img
-rw-r--r-- 1 root root 1455 Mar 4 19:59 instance2.xml
[root@computer1 gre]# pwd
/var/tmp/gre
[root@computer1 gre]# cat instance2.xml
<domain type="qemu">
<uuid>23469de0-a3a0-4214-a60e-a45322bcc370</uuid>
<name>instance2</name>
<memory>524288</memory>
<vcpu>1</vcpu>
<sysinfo type="smbios">
<system>
<entry name="manufacturer">Red Hat Inc.</entry>
<entry name="product">OpenStack Nova</entry>
<entry name="version">2014.1.1-3.el6</entry>
<entry name="serial">b8d4ec5f-acd6-7111-c69b-600912a079bb</entry>
<entry name="uuid">23469de0-a3a0-4214-a60e-a45322bcc370</entry>
</system>
</sysinfo>
<os>
<type>hvm</type>
<boot dev="hd"/>
<smbios mode="sysinfo"/>
</os>
<features>
<acpi/>
<apic/>
</features>
<clock offset="utc"/>
<cpu mode="host-model" match="exact"/>
<devices>
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" cache="none"/>
<source file="/var/tmp/gre/instance2.img"/>
<target bus="virtio" dev="vda"/>
</disk>
<interface type='bridge'>
<source bridge='qbr02'/>
<target dev='tap02'/>
<model type='virtio'/>
<driver name='qemu'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type="file">
<source path="/var/tmp/gre/instance2.log"/>
</serial>
<serial type="pty"/>
<input type="tablet" bus="usb"/>
<graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/>
<video>
<model type="cirrus"/>
</video>
</devices>
</domain>10 启动虚拟机
virsh define instance2.xml
virsh start instance2
vncviewer :011 启动console 以后,登录添加ip 地址 192.168.1.12
---注意,这一步最后做,在验证之前做,先保证192.168.4.201和192.168.4.202两个IP能够ping通
sudo ip addr add 192.168.1.12/24 dev eth012 创建一个内部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.20113 建一个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[root@computer1 ~]# ovs-vsctl show
1c8f748b-0a08-411b-8cce-095d6a823abc
Bridge br-int
Port "gre0"
Interface "gre0"
type: gre
options: {remote_ip="192.168.4.201"}
Port "qvo02"
tag: 100
Interface "qvo02"
Port br-int
Interface br-int
type: internal
ovs_version: "2.1.3"六 验证
本文详细介绍了一种通过搭建类似Neutron(OpenVSwitch+GRE)的环境来实现软件定义网络(SDN)的方法。主要步骤包括配置网络接口、安装必要软件包、设置IP转发、启动Open vSwitch等。并通过创建Linux Bridge和Open vSwitch桥接,实现了租户内实例间的互联互通。
1755

被折叠的 条评论
为什么被折叠?



