title: Neutron ovs+vxlan date: 2017-04-26 23:37 tags: Network


主机网卡配置

  1. controller:
  2. ens160:192.168.11.101/24((management network/public/external network))
  3. ens192:10.0.0.1/24(private networkvxlan tunning)
  4. compute01:
  5. ens160:192.168.11.102/24((management network/public/external network))
  6. ens192:10.0.0.2/24(private networkvxlan tunning)

controller安装配置

模拟Network 节点相关实现,比如L3、dhcp-agent实现,为了模拟多节点网络情况,这里Network同时也模拟一个计算节点,模拟M2 openvswitch 实现,上面运行instance1。

安装需要用到的包

  1. yum install libvirt openvswitch python-virtinst xauth tigervnc qemu-* -y

移除默认的libvirt 网络,方便清晰分析网络情况

  1. virsh net-destroy default
  2. virsh net-autostart --disable default
  3. virsh net-undefine default

设置允许ipforwarding

  1. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  2. echo "net.ipv4.conf.all.rp_filter=0" >> /etc/sysctl.conf
  3. echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf
  4. sysctl -p

启动openvswitch

  1. systemctl start openvswitch
  2. systemctl enable openvswitch

创建一个linux bridge

  1. brctl addbr qbr01
  2. ip link set qbr01 up

创建一个instance,并连接到qbr01 Linux Bridge 配置文件如下

  1. vim instance1.xml
  2. <domain type="qemu">
  3. <uuid>23469de0-a3a0-4214-a60e-a45322bcc370</uuid>
  4. <name>instance1</name>
  5. <memory>524288</memory>
  6. <vcpu>1</vcpu>
  7. <sysinfo type="smbios">
  8. <system>
  9. <entry name="manufacturer">Red Hat Inc.</entry>
  10. <entry name="product">OpenStack Nova</entry>
  11. <entry name="version">2014.1.1-3.el6</entry>
  12. <entry name="serial">b8d4ec5f-acd6-7111-c69b-600912a079bb</entry>
  13. <entry name="uuid">23469de0-a3a0-4214-a60e-a45322bcc370</entry>
  14. </system>
  15. </sysinfo>
  16. <os>
  17. <type>hvm</type>
  18. <boot dev="hd"/>
  19. <smbios mode="sysinfo"/>
  20. </os>
  21. <features>
  22. <acpi/>
  23. <apic/>
  24. </features>
  25. <clock offset="utc"/>
  26. <cpu mode="host-model" match="exact"/>
  27. <devices>
  28. <disk type="file" device="disk">
  29. <driver name="qemu" type="qcow2" cache="none"/>
  30. <source file="/home/sdn/instance1.img"/>
  31. <target bus="virtio" dev="vda"/>
  32. </disk>
  33. <source bridge='qbr01'/>
  34. <target dev='tap01'/>
  35. <model type='virtio'/>
  36. <driver name='qemu'/>
  37. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  38. </interface>
  39. <serial type="file">
  40. <source path="/home/sdn/instance1.log"/>
  41. </serial>
  42. <serial type="pty"/>
  43. <input type="tablet" bus="usb"/>
  44. <graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/>
  45. <video>
  46. <model type="cirrus"/>
  47. </video>
  48. </devices>
  49. </domain>

启动虚拟机

  1. mv cirros-0.3.4-x86_64-disk.img instance1.img
  2. virsh define instance1.xml
  3. virsh start instance1
  4. virsh vncdisplay instance1
  5. vncviewer :0

启动console 以后,登录添加ip 地址 172.16.10.11

  1. sudo ip addr add 172.16.10.11/24 dev eth0
  2. sudo route add default gw 172.16.10.1

创建一个内部bridge br-int, 模拟 OpenStack integrated bridge

  1. ovs-vsctl add-br br-int
  2. # gre隧道
  3. # ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.4.202
  4. # vxlan隧道
  5. ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=10.0.0.2
  6. # 创建一个veth peer,连接Linux Bridge 'qbr01' 和 OpenvSwich Bridge 'br-ini'
  7. # 创建一个网卡对
  8. ip link add qvo01 type veth peer name qvb01
  9. brctl addif qbr01 qvb01
  10. ovs-vsctl add-port br-int qvo01
  11. ovs-vsctl set port qvo01 tag=100
  12. ip link set qvb01 up
  13. ip link set qvo01 up

模拟安装计算节点(compute01)

  1. yum install libvirt openvswitch python-virtinst xauth tigervnc qemu-*

移除libvirt 默认的网络

  1. virsh net-destroy default
  2. virsh net-autostart --disable default
  3. virsh net-undefine default

设置允许ipforwarding

  1. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  2. echo "net.ipv4.conf.all.rp_filter=0" >> /etc/sysctl.conf
  3. echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf
  4. sysctl -p

启动openvswitch

  1. systemctl start openvswitch
  2. systemctl enable openvswitch

创建一个linux bridge

  1. brctl addbr qbr02
  2. ip link set qbr02 up

创建一个vm,并连接到qbr02

  1. cat instance2.xml
  2. <domain type="qemu">
  3. <uuid>23469de0-a3a0-4214-a60e-a45322bcc370</uuid>
  4. <name>instance2</name>
  5. <memory>524288</memory>
  6. <vcpu>1</vcpu>
  7. <sysinfo type="smbios">
  8. <system>
  9. <entry name="manufacturer">Red Hat Inc.</entry>
  10. <entry name="product">OpenStack Nova</entry>
  11. <entry name="version">2014.1.1-3.el6</entry>
  12. <entry name="serial">b8d4ec5f-acd6-7111-c69b-600912a079bb</entry>
  13. <entry name="uuid">23469de0-a3a0-4214-a60e-a45322bcc370</entry>
  14. </system>
  15. </sysinfo>
  16. <os>
  17. <type>hvm</type>
  18. <boot dev="hd"/>
  19. <smbios mode="sysinfo"/>
  20. </os>
  21. <features>
  22. <acpi/>
  23. <apic/>
  24. </features>
  25. <clock offset="utc"/>
  26. <cpu mode="host-model" match="exact"/>
  27. <devices>
  28. <disk type="file" device="disk">
  29. <driver name="qemu" type="qcow2" cache="none"/>
  30. <source file="/home/sdn/instance2.img"/>
  31. <target bus="virtio" dev="vda"/>
  32. </disk>
  33. <interface type='bridge'>
  34. <source bridge='qbr02'/>
  35. <target dev='tap02'/>
  36. <model type='virtio'/>
  37. <driver name='qemu'/>
  38. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  39. </interface>
  40. <serial type="file">
  41. <source path="/home/sdn/instance2.log"/>
  42. </serial>
  43. <serial type="pty"/>
  44. <input type="tablet" bus="usb"/>
  45. <graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/>
  46. <video>
  47. <model type="cirrus"/>
  48. </video>
  49. </devices>
  50. </domain>
  1. virsh define instance2.xml
  2. virsh start instance2
  3. virsh vncdisplay instance2
  4. vncviewer :0

启动console 以后,登录添加ip 地址 172.16.10.12

  1. sudo ip addr add 172.16.10.12/24 dev eth0
  2. sudo route add default gw 172.16.10.1

创建一个内部bridge br-int, 模拟 OpenStack integrated bridge

  1. ovs-vsctl add-br br-int
  2. # ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.4.201
  3. ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=10.0.0.1

创建一个veth peer,连接Linux Bridge 'qbr02' 和 OpenvSwich Bridge 'br-ini'

  1. ip link add qvo02 type veth peer name qvb02
  2. brctl addif qbr02 qvb02
  3. ovs-vsctl add-port br-int qvo02
  4. ovs-vsctl set port qvo02 tag=100
  5. ip link set qvb02 up
  6. ip link set qvo02 up

检查是否能连通instance1,在instance2的控制台

  1. # 结果是能ping通的
  2. ping 172.16.10.11

##通过 Network Namespace 实现租户私有网络互访 (在控制节点) 添加一个namespace,dhcp01用于隔离租户网络。

  1. ip netns add dhcp01

为私有网络172.16.10.0/24 ,在命名空间dhcp01 中 创建dhcp 服务

  1. ovs-vsctl add-port br-int tapdhcp01 -- set interface tapdhcp01 type=internal
  2. ovs-vsctl set port tapdhcp01 tag=100
  3. # 把br-int 上的tapdhcp01上的port连接到dhcp01 命名空间中
  4. ip link set tapdhcp01 netns dhcp01
  5. # 为dhcp01命名空间上的tapdhcp01端口分配一个 172.16.10.2/24的ip地址
  6. ip netns exec dhcp01 ip addr add 172.16.10.2/24 dev tapdhcp01
  7. ip netns exec dhcp01 ip link set tapdhcp01 up

检查网络是否连通,在namespace 访问instance1 和 instance2

  1. ip netns exec dhcp01 ping 172.16.10.12
  2. ip netns exec dhcp01 ping 172.16.10.11

##通过 Network Namespace 和Iptables 实现L3 router

  1. ovs-vsctl add-br br-ex

重新配置 ens160 和 br-ex

  1. vim /etc/sysconfig/network-scripts/ifcfg-ens160
  2. DEVICE=ens160
  3. TYPE=OVSPort
  4. DEVICETYPE=ovs
  5. OVS_BRIDGE=br-ex
  6. ONBOOT=yes
  7. vi /etc/sysconfig/network-scripts/ifcfg-br-ex
  8. DEVICE=br-ex
  9. ONBOOT=yes
  10. DEVICETYPE=ovs
  11. TYPE=OVSBridge
  12. BOOTPROTO=static
  13. IPADDR=192.168.11.101
  14. NETMASK=255.255.255.0
  15. GATEWAY=192.168.11.1
  16. DNS1=218.2.2.2

重启启动网络服务

  1. ovs-vsctl add-port br-ex ens160 && systemctl restart network

检查网络,配置后是否连通

  1. ping 192.168.11.1

添加一个namespace,router01 用于路由和floating ip 分配

  1. ip netns add router01

在br-int添加一个接口,作为私有网络172.16.10.0/24的网关

  1. ovs-vsctl add-port br-int qr01 -- set interface qr01 type=internal
  2. ovs-vsctl set port qr01 tag=100
  3. ip link set qr01 netns router01
  4. ip netns exec router01 ip addr add 172.16.10.1/24 dev qr01
  5. ip netns exec router01 ip link set qr01 up
  6. ip netns exec router01 ip link set lo up

在br-ex中添加一个接口,用于私网172.16.10.0/24设置下一跳地址

  1. ovs-vsctl add-port br-ex qg01 -- set interface qg01 type=internal
  2. ip link set qg01 netns router01
  3. ip netns exec router01 ip addr add 192.168.11.200/24 dev qg01
  4. ip netns exec router01 ip link set qg01 up
  5. ip netns exec router01 ip link set lo up

模拟分配floating ip 访问instance1

为instance1 172.16.10.11 分配floating ip,192.168.11.201

  1. ip netns exec router01 ip addr add 192.168.11.201/32 dev qg01
  2. ip netns exec router01 iptables -t nat -A OUTPUT -d 192.168.11.201/32 -j DNAT --to-destination 172.16.10.11
  3. ip netns exec router01 iptables -t nat -A PREROUTING -d 192.168.11.201/32 -j DNAT --to-destination 172.16.10.11
  4. ip netns exec router01 iptables -t nat -A POSTROUTING -s 172.16.10.11/32 -j SNAT --to-source 192.168.11.201
  5. ip netns exec router01 iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -j SNAT --to-source 192.168.11.200

################# 测试floating ip

  1. ping 192.168.11.201

如果需要清除nat chain

  1. iptables -t nat -F
  1. <!--
  2. ip netns exec router01 iptables -t nat -A OUTPUT -d 192.168.2.102/32 -j DNAT --to-destination 192.168.10.11
  3. ip netns exec router01 iptables -t nat -A PREROUTING -d 192.168.2.102/32 -j DNAT --to-destination 192.168.10.11
  4. ip netns exec router01 iptables -t nat -A POSTROUTING -s 192.168.10.11/32 -j SNAT --to-source 192.168.2.102
  5. ip netns exec router01 ip addr add 192.168.2.103/32 dev qg01
  6. ip netns exec router01 iptables -t nat -A OUTPUT -d 192.168.2.103/32 -j DNAT --to-destination 192.168.10.11
  7. ip netns exec router01 iptables -t nat -A PREROUTING -d 192.168.2.103/32 -j DNAT --to-destination 192.168.10.11
  8. ip netns exec router01 iptables -t nat -A POSTROUTING -s 192.168.10.11/32 -j SNAT --to-source 192.168.2.103
  9. ip netns exec router01 route add default gw 192.168.2.1
  10. ip netns exec router01 route -n -->

neutron ovs+vxlan的更多相关文章

  1. Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  2. 【Network】OVS VXLAN/GRE 实践

    参考资料: OVS/VXLAN/GRE参考 ovs vxlan IP overray_百度搜索 OVS操作总结-Neutron-about云开发 OpenStack OVS GRE/VXLAN网络_z ...

  3. OVS+VXLAN实现两个宿主机上的VM间的通信

    一.组网图 说明: 1.使用网络命名空间表示vm1和vm2. 因为我没有两台物理服务器. 2.使用virtualbox 的两条虚机模拟作为host1和host2. 二.配置指导 1.创建网桥 br0 ...

  4. Openstack Neutron OVS ARP Responder

    ARP – Why do we need it? In any environment, be it the physical data-center, your home, or a virtual ...

  5. ML2 配置 OVS VxLAN - 每天5分钟玩转 OpenStack(146)

    今天我们开始学习 OVS 如何实现 Neutron VxLAN,关于 VxLAN 的概念以及 Linux Bridge 实现,大家可以参考前面相关章节. Open vSwitch 支持 VXLAN 和 ...

  6. OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

    OVS 的数据流向都是由 Flow 规则控制的,今天我们就来分析 VxLAN 的 Flow 规则.提个醒:这可能是本教程最烧脑的一节,let's rock it ! 下面分析控制节点上的 flow r ...

  7. 关于VXLAN的认识-----ovs+vxlan多链路负载分担的实现方法

    一.应用环境 目前大部分网关或服务器设备常采用双链路同时接入多条ISP链路的方式来满足网络的负载均衡和主备切换等,实现该功能常用的方法是利用策略路由技术,根据链路的网络状况和权重配置在路由时动态选择不 ...

  8. OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)

    上一节创建了 vxlan100_net 并部署 instance,今天我们来分析底层网络结构. 控制节点 执行 ovs-vsctl show: br-int br-int 连接了如下 port: ta ...

  9. neutron openvswitch + vxlan 通讯

随机推荐

  1. Codeforces Round #245 (Div. 1)——Xor-tree

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012476429/article/details/25607945 题目链接 题意: 给一棵树n个 ...

  2. 008-shiro与spring web项目整合【二】认证、授权、session管理

    一.认证 1.添加凭证匹配器 添加凭证匹配器实现md5加密校验. 修改applicationContext-shiro.xml: <!-- realm --> <bean id=&q ...

  3. android 布局属性详解

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料. 第一类:属性值为true或falseandroid:layout_centerHrizontal ...

  4. Spark --idea无法new scala class

    问题: 无法新建Scala class 解决: 1.下载插件 setting-->Plugins-->安装scala插件-->提示重启idea-->自动提示你安装scala s ...

  5. 103. Binary Tree Zigzag Level Order Traversal -----层序遍历

      Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left ...

  6. 并查集模板 && 带权并查集模板

    不带权: ]; void init(void) { ;i<=n;i++) f[i]=i; } int fd(int x) { return f[x]==x?x:fd[x]=fd(f[x]); } ...

  7. git报错--RPC failed; curl 18 transfer closed with outstanding read data remaining

    遇到的问题一: error: RPC failed; curl 18 transfer closed with outstanding read data remaining         fata ...

  8. Apache 配置参数

    参数说明 1.Global Environment 全局环境配置,决定Apache服务器的全局参数3.Virtual Hosts—虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚 ...

  9. 基于HTML5和SVG的手机菜单动画

    在线演示 本地下载

  10. libc.so.6(GLIBC_2.14)(64bit) is needed by MySQL

    记一次粗心大意!解决办法在最下面! rpm安装MySQL时提升如下: warning: MySQL-client-5.6.41-1.el7.x86_64.rpm: Header V3 DSA/SHA1 ...