SDN手动实现租户内instance互通

本文详细介绍了一种通过搭建类似Neutron(OpenVSwitch+GRE)的环境来实现软件定义网络(SDN)的方法。主要步骤包括配置网络接口、安装必要软件包、设置IP转发、启动Open vSwitch等。并通过创建Linux Bridge和Open vSwitch桥接,实现了租户内实例间的互联互通。
一 实验目的
本文旨在通过自己搭建类似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 restart
2 修改主机名为network1
[root@network1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=network1
3 安装需要的包
[root@network1 ~]# yum install libvirt openvswitch python-virtinst xauth tigervnc -y
4 移除默认的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 undefined
5 设置允许ipforwarding
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
6 立即生效
[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 = 4294967296
7 启动openvswitch
service openvswitch start
chkconfig openvswitch on
8 创建一个linux bridge
brctl addbr qbr01
ip link set qbr01 up
9 准备虚拟机文件
[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 :0
11 启动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 eth0
12 创建一个内部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.0
2 修改主机名为network1
[root@computer1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=computer1
3 安装需要的包
[root@computer11 ~]# yum install libvirt openvswitch python-virtinst xauth tigervnc -y
4 移除默认的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 undefined
5 设置允许ipforwarding
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
6 立即生效
[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 = 4294967296
7 启动openvswitch
service openvswitch start
chkconfig openvswitch on
8 创建一个linux bridge
brctl addbr qbr02
ip link set qbr02 up
9 准备虚拟机相关文件
[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 :0
11 启动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 eth0
12 创建一个内部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
13 建一个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"
六 验证

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值