在前面的文章中,已经完成了devstack的安装。下面,我会介绍如何使用neutron

  • 首先创建两个neutron net, vmnet1 和vmnet2
  1. stack@ubuntu:~/devstack$ source openrc admin admin
  2. stack@ubuntu:~/devstack$ neutron net-list
  3. +--------------------------------------+---------+-------------------------------------------------------+
  4. | id | name | subnets |
  5. +--------------------------------------+---------+-------------------------------------------------------+
  6. | 5365b56f--40d4-b065-a9d50126b55b | private | fc3a839e-412c-4f0d-b1ed-87be1a7b0bf8 192.168.106.0/ |
  7. | a101e11f-7bbe-4f4d-a52e-5bb312d5f8b9 | public | 570e8b64--41f7--12d9bc54f195 172.24.4.0/ |
  8. +--------------------------------------+---------+-------------------------------------------------------+
  9. stack@ubuntu:~/devstack$ neutron net-create vmnet1
  10. Created a new network:
  11. +---------------------------+--------------------------------------+
  12. | Field | Value |
  13. +---------------------------+--------------------------------------+
  14. | admin_state_up | True |
  15. | id | 54028daa--4fc7-9f97-d400dc801e97 |
  16. | name | vmnet1 |
  17. | provider:network_type | vlan |
  18. | provider:physical_network | physnet1 |
  19. | provider:segmentation_id | |
  20. | router:external | False |
  21. | shared | False |
  22. | status | ACTIVE |
  23. | subnets | |
  24. | tenant_id | dcf6685a3e304e4c92af08bca762aa33 |
  25. +---------------------------+--------------------------------------+
  26. stack@ubuntu:~/devstack$ neutron net-create vmnet2
  27. Created a new network:
  28. +---------------------------+--------------------------------------+
  29. | Field | Value |
  30. +---------------------------+--------------------------------------+
  31. | admin_state_up | True |
  32. | id | 7b0394ec-34c0-48d3-a17d-82ef9bbc2cd9 |
  33. | name | vmnet2 |
  34. | provider:network_type | vlan |
  35. | provider:physical_network | physnet1 |
  36. | provider:segmentation_id | |
  37. | router:external | False |
  38. | shared | False |
  39. | status | ACTIVE |
  40. | subnets | |
  41. | tenant_id | dcf6685a3e304e4c92af08bca762aa33 |
  42. +---------------------------+--------------------------------------+
  43. stack@ubuntu:~/devstack$ neutron net-list
  44. +--------------------------------------+---------+-------------------------------------------------------+
  45. | id | name | subnets |
  46. +--------------------------------------+---------+-------------------------------------------------------+
  47. | 5365b56f--40d4-b065-a9d50126b55b | private | fc3a839e-412c-4f0d-b1ed-87be1a7b0bf8 192.168.106.0/ |
  48. | a101e11f-7bbe-4f4d-a52e-5bb312d5f8b9 | public | 570e8b64--41f7--12d9bc54f195 172.24.4.0/ |
  49. | 54028daa--4fc7-9f97-d400dc801e97 | vmnet1 | |
  50. | 7b0394ec-34c0-48d3-a17d-82ef9bbc2cd9 | vmnet2 | |
  51. +--------------------------------------+---------+-------------------------------------------------------+
  • 现在两个网络就创建好了,但现在其实这是两个独立的网络,是不互通的,接下来创建router: router-vmnet1-vmnet2
  1. stack@ubuntu:~/devstack$ neutron router-create router-vmnet1-vmnet2
  2. Created a new router:
  3. +-----------------------+--------------------------------------+
  4. | Field | Value |
  5. +-----------------------+--------------------------------------+
  6. | admin_state_up | True |
  7. | distributed | False |
  8. | external_gateway_info | |
  9. | ha | False |
  10. | id | 4bef86df-3b13-4b23-80f0-3a2bd8d0c746 |
  11. | name | router-vmnet1-vmnet2 |
  12. | routes | |
  13. | status | ACTIVE |
  14. | tenant_id | dcf6685a3e304e4c92af08bca762aa33 |
  15. +-----------------------+--------------------------------------+
  • 在vmnet1和vmnet2中,分别创建subnet
  1. stack@ubuntu:~/devstack$ neutron subnet-create 54028daa--4fc7-9f97-d400dc801e97 30.30.30.0/
  2. Created a new subnet:
  3. +-------------------+------------------------------------------------+
  4. | Field | Value |
  5. +-------------------+------------------------------------------------+
  6. | allocation_pools | {"start": "30.30.30.2", "end": "30.30.30.254"} |
  7. | cidr | 30.30.30.0/ |
  8. | dns_nameservers | |
  9. | enable_dhcp | True |
  10. | gateway_ip | 30.30.30.1 |
  11. | host_routes | |
  12. | id | c0be451f-91a1-4f9f-a29b-13adea79798e |
  13. | ip_version | |
  14. | ipv6_address_mode | |
  15. | ipv6_ra_mode | |
  16. | name | |
  17. | network_id | 54028daa--4fc7-9f97-d400dc801e97 |
  18. | tenant_id | dcf6685a3e304e4c92af08bca762aa33 |
  19. +-------------------+------------------------------------------------+
  20. stack@ubuntu:~/devstack$ neutron subnet-create 7b0394ec-34c0-48d3-a17d-82ef9bbc2cd9 40.40.40.0/
  21. Created a new subnet:
  22. +-------------------+------------------------------------------------+
  23. | Field | Value |
  24. +-------------------+------------------------------------------------+
  25. | allocation_pools | {"start": "40.40.40.2", "end": "40.40.40.254"} |
  26. | cidr | 40.40.40.0/ |
  27. | dns_nameservers | |
  28. | enable_dhcp | True |
  29. | gateway_ip | 40.40.40.1 |
  30. | host_routes | |
  31. | id | 0b9c9ad8--4c96-afda-ecb7e53dc519 |
  32. | ip_version | |
  33. | ipv6_address_mode | |
  34. | ipv6_ra_mode | |
  35. | name | |
  36. | network_id | 7b0394ec-34c0-48d3-a17d-82ef9bbc2cd9 |
  37. | tenant_id | dcf6685a3e304e4c92af08bca762aa33 |
  38. +-------------------+------------------------------------------------+
  • 接下来,给router加入interface,分别连接到vmnet1的subnet和vmnet2的subnet
  1. stack@ubuntu:~/devstack$ neutron router-interface-add 4bef86df-3b13-4b23-80f0-3a2bd8d0c746 subnet=c0be451f-91a1-4f9f-a29b-13adea79798e
  2. Added interface 8fc6f138-150c-47de-8c88-fa924ce2302d to router 4bef86df-3b13-4b23-80f0-3a2bd8d0c746.
  3. stack@ubuntu:~/devstack$ neutron router-interface-add 4bef86df-3b13-4b23-80f0-3a2bd8d0c746 subnet=0b9c9ad8--4c96-afda-ecb7e53dc519
  4. Added interface 4e830e98-e24b-45dd-bc6e-338e47b31b1b to router 4bef86df-3b13-4b23-80f0-3a2bd8d0c746.
  • 然后,我们看,Linux 网络配置上的变化,首先是network namespace, 你会发现名为qrouter-4bef86df-3b13-4b23-80f0-3a2bd8d0c746 的Linux Namespace创建成功
  1. stack@ubuntu:~/devstack$ sudo ip netns exec qrouter-4bef86df-3b13-4b23-80f0-3a2bd8d0c746 ip addr
  2. : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default
  3. link/loopback ::::: brd :::::
  4. inet 127.0.0.1/ scope host lo
  5. valid_lft forever preferred_lft forever
  6. inet6 ::/ scope host
  7. valid_lft forever preferred_lft forever
  8. : qr-4e830e98-e2: <BROADCAST,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default
  9. link/ether fa::3e:8c:4d:c7 brd ff:ff:ff:ff:ff:ff
  10. inet 40.40.40.1/ brd 40.40.40.255 scope global qr-4e830e98-e2
  11. valid_lft forever preferred_lft forever
  12. inet6 fe80::f816:3eff:fe8c:4dc7/ scope link
  13. valid_lft forever preferred_lft forever
  14. : qr-8fc6f138-: <BROADCAST,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default
  15. link/ether fa::3e::b5: brd ff:ff:ff:ff:ff:ff
  16. inet 30.30.30.1/ brd 30.30.30.255 scope global qr-8fc6f138-
  17. valid_lft forever preferred_lft forever
  18. inet6 fe80::f816:3eff:fe67:b514/ scope link
  19. valid_lft forever preferred_lft forever
  • 上图的qr-4e830e98-e2和qr-8fc6f138-15,可以理解为vmnet1和vmnet2的gateway, 同时它们也都连接在ovs的br-int bridge上,如下:
  1. stack@ubuntu:~/devstack$ sudo ovs-vsctl show
  2. .......
  3. Bridge br-int
  4. fail_mode: secure
  5. Port patch-tun
  6. Interface patch-tun
  7. type: patch
  8. options: {peer=patch-int}
  9. Port "qr-4e830e98-e2"
  10. tag:
  11. Interface "qr-4e830e98-e2"
  12. type: internal
  13. Port br-int
  14. Interface br-int
  15. type: internal
  16. Port "int-br-eth1"
  17. Interface "int-br-eth1"
  18. type: patch
  19. options: {peer="phy-br-eth1"}
  20. Port "qr-8fc6f138-15"
  21. tag:
  22. Interface "qr-8fc6f138-15"
  23. type: internal
  24. Port "qr-a6466103-17"
  25. tag:
  26. Interface "qr-a6466103-17"
  27. type: internal

从上面的输出可以看出"qr-4e830e98-e2" is tagged with 3, "qr-8fc6f138-15"is tagged with 2

  • 接下来,我要在vmnet1和vmnet2上分别创建一个virtual machine instance,看看openstack neutron中发生了什么!
  1. #注意,这个一定要先增加这个,不然,后面的vm启动无法得到IP, 参见我的异常处理部分
  2. stack@ubuntu:~/devstack$ nova secgroup-add-rule default icmp - - 0.0.0.0/
  3. stack@ubuntu:~/devstack$ nova secgroup-add-rule default tcp 0.0.0.0/0
    #创建两个vm
    stack@ubuntu:~/devstack$ nova boot --image 54bdfba1-27f7-4fae-99f1-cfbbca78c9bd --flavor m1.tiny --nic net-id=54028daa-9158-4fc7-9f97-d400dc801e97 vm1
    stack@ubuntu:~/devstack$ nova boot --image 54bdfba1-27f7-4fae-99f1-cfbbca78c9bd --flavor m1.tiny --nic net-id=7b0394ec-34c0-48d3-a17d-82ef9bbc2cd9 vm2
    #查看vm是否ready
    stack@ubuntu:~/devstack$ nova list
    +--------------------------------------+------+--------+------------+-------------+-------------------+
    | ID                                   | Name | Status | Task State | Power State | Networks          |
    +--------------------------------------+------+--------+------------+-------------+-------------------+
    | b22e706b-a1aa-4f73-9bd5-5f70bbf7e299 | vm1  | ACTIVE | -          | Running     | vmnet1=30.30.30.2 |
    | 1f4fad7d-8eb9-4011-b196-337dea3d7d66 | vm2  | ACTIVE | -          | Running     | vmnet2=40.40.40.2 |
    +--------------------------------------+------+--------+------------+-------------+-------------------+

现在这两个ip 30.30.30.2 和40.40.40.2是无法直接ping同的,因为是被Linux Namespace隔离的

  1. stack@ubuntu:~/devstack$ ping 30.30.30.2
  2. PING 30.30.30.2 (30.30.30.2) () bytes of data.
  3. ^C
  4. --- 30.30.30.2 ping statistics ---
  5. packets transmitted, received, % packet loss, time 3000ms
  6.  
  7. stack@ubuntu:~/devstack$ ping 40.40.40.2
  8. PING 40.40.40.2 (40.40.40.2) () bytes of data.
  9. ^C
  10. --- 40.40.40.2 ping statistics ---
  11. packets transmitted, received, % packet loss, time 3000ms
  • 你可以这样在主机上ssh到vm上,这里我们以ssh到vm1为例:首先确定vm1所在的network为vmnet1, vmnet1对应的namespace为qdhcp-54028daa-9158-4fc7-9f97-d400dc801e97,然后
  1. ip netns exec qqdhcp-54028daa-9158-4fc7-9f97-d400dc801e97 ssh cirros@30.30.30.2

密码为   cubswin:)

这样一个基于neutron network的devstack环境就搭建好了,大家有兴趣的话,可以一起探讨关于neutron跟多的东西,推荐大家几篇oracle上的文章,讲的深入浅出的,很不错

https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture

https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture1

https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture2

https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture3

https://blogs.oracle.com/ronen/entry/running_openstack_icehouse_with_zfs

OpenStack/devstack with Neutron on Ubuntu 14 (2)的更多相关文章

  1. OpenStack/devstack with Neutron on Ubuntu 14 (1)

    安装前,推荐安装一个全新的Ubuntu Server14.04,如果使用之前的ubuntu, 中间可能遇到各种的python包依赖,以及软件版本不对应的问题 环境准备,新建stack用户,给予sudo ...

  2. ubuntu 14.04安装 DevStack的脚本配置文件——localrc

    本文ubuntu 14.04安装 DevStack的脚本配置文件——localrc,本文件名已经逐渐被取代,但是出于后向兼容性,使用该文件仍然可以为stack.sh安装脚本指定安装DevStack时的 ...

  3. Ubuntu 14.04 安装 DevStack与遇到的的问题记录

    本文总结Ubuntu 14.04下部署DevStack的过程以及一些可能遇到的问题. 一.安装 以下的操作最好在普通用户下进行,至少在git clone devstack的时候使用普通用户,这样可以避 ...

  4. Ubuntu 14.04 LTS 安装 Juno 版 OpenStack Keystone

    本文介绍如何在Ubuntu 14.04 LTS 上安装Juno版的Keystone, 我们采用的是手动安装的方式, 同时仅针对OpenStack的身份与访问管理系统Keystone. 事实上OpenS ...

  5. 使用Devstack部署neutron网络节点

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

  6. Ubuntu 14.04 正式版 12.4

    安装Ubuntu 14.04后要做的5件事情 4月17日,开源免费系统Ubuntu官方正式宣布发布Ubuntu 14.04 LTS(代号Trusty Tahr)正式版.官方声称该版本主打云计算,在云平 ...

  7. OpenStack 网络服务 Neutron 私有网络构建(十九)

    本章内容基于之前提供者网络构建的基础上进行改动,之前文章参考如下: Openstack 网络服务 Neutron介绍和控制节点部署 (九) Openstack 网络服务 Neutron计算节点部署(十 ...

  8. Openstack 网络服务 Neutron介绍和控制节点部署 (九)

    Neutron介绍 neutron是openstack重要组件之一,在以前是时候没有neutron项目. 早期的时候是没有neutron,早期所使用的网络的nova-network,经过版本改变才有个 ...

  9. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

随机推荐

  1. Java中正则表达式的几种用法

    多数内容转载自:http://www.jb51.net/tools/regex.htm ,有改动 用到了java.util.regex包: 1. 验证 Pattern pattern = Patter ...

  2. iis的web站点配置

    1.下载好pageadmin网站系统,我下载的放在F:\web\site目录下(每个电脑或每个用户放置目录都不一样,你也可以放C:\myweb,或D:\xxx等等,只要下面对应目录设置一样即可),我们 ...

  3. JSP和JSTL

    JSP页面由Web服务器上的JSP引擎执行,该引擎会把JSP转成Servlet代码源文件,并以一般的Servlet方式载入执行:JSP引擎介绍客户端对JSP页面的请求,生成JSP页面给客户端的响应,该 ...

  4. ASP.NET 页面之间传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  5. linux下安装TensorFlow(centos)

    一.python安装 centos自带python2.7.5,这一步可以省略掉. 二.python-pip pip--python index package,累世linux的yum,安装管理pyth ...

  6. Spring集成MyBatis框架

    Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为 ...

  7. 使用php实现网站验证码功能【博主推荐】

             验证码是网站常用的一项安全措施,也是新人站长较难掌握的一项技能,这里我向大家介绍一简单有效的验证码实现方法. 开始之前 在正式开始之前我们需要打开php的gd2图形库支持(在php. ...

  8. Web Worker无阻塞UI的牛逼技术,html5,可惜无法敢于UI

    众所周知,JavaScript是单线程的,JS和UI更新共享同一个进程的部分原因是它们之间互访频繁,但由于共享同一个进程也就会造成js代码在运行的时候用户点击界面元素而没有任何响应这样的情况,这么糟糕 ...

  9. VS2008 + WDK 配置 及其编译错误

    VS2008 + SP1 + Win7 X64 1. 安装WDK,并配置系统环境变量:WDKROOT-D:\WinDDK\7600.16385.1 2. 启动VS2005,在菜单栏“工具”-“选项”内 ...

  10. WP8.1开发中ListView控件加载图列表的简单使用(1)

    我也是刚接触WP编程没几个月,就是在这段时间一直闲着没事,然后又比较喜欢WP这款系统,就学习了WP这方面的开发言语,自学是很困难的,掌握这方面的资料不多,很初级,就是自己在网上找资料学习过程中,看到别 ...