作者:张华  发表于:2015-12-31
版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

用外部物理路由器意味着不使用neutron-l3-agent, 故定义网络时需指定--router:external=True

neutron net-create phy_net -- --router:external=True --provider:network_type flat --provider:physical_network physnet1

上例使用了flat网络。故要求配置bridge_mappings = physnet1:br-phy (bridge_mapping仅针对flat与vlan有效)。

不配置bridge_mappings属性创建虚机会失败(报bind_failed错误)。报bind_failed错误可能还会有一个原因就是neutron.conf里的agent_down_time设置得过小,导致心跳觉得它dead从而在bind里找不到agent所致。

/etc/neutron/plugins/ml2/ml2_conf.ini:
[ml2]
tenant_network_types = flat,vlan,gre,vxlan
type_drivers = local,flat,vlan,gre,vxlan
mechanism_drivers = openvswitch
[ovs]
bridge_mappings = physnet1:br-phy

使用devstack安装时的配置參数是:

Q_ML2_TENANT_NETWORK_TYPE=flat,vlan,gre,vxlan
OVS_BRIDGE_MAPPINGS=physnet1:br-phy

眼下唯独l3-agent与dhcp-agent提供了metadata服务。

metadata namespace proxy识别不同tenant下来的元数据流量,通过unix socket与metadata agent相连。 metadata agent向nova-metadata-api传递一些须要的HTTP Headers代理訪问nova-metadata-api服务。假设我们不使用l3-agent与dhcp-agent提供的metadata服务的话。我们自己写的程序要必须做识别namespace与传递HTTP headers两件事情。

所以我们要想使用metadata服务还是应该使用l3-agent与dhcp-agent提供的metadata服务

使用dhcp-agent提供的metadata服务的配置例如以下:

demo@openstack:~$ grep -r '^enable_' /etc/neutron/dhcp_agent.ini
enable_isolated_metadata = True
enable_metadata_network = True demo@openstack:~$ grep -r '^enable_' /etc/neutron/l3_agent.ini
enable_metadata_proxy = False

另外,上述的enable_isolated_metadata = True 意味着必须是真正的隔离网络,所以非隔离网络是指有一个port指向subnet。且这个port的gateway ip是subnet的gateway ip。所以有下列三种方式处理:

  • 使用--no-gateway创建真正的隔离网络:subnet-create net1 172.17.17.0/24 --no-gateway --name=sub1
  • 或者不创建neutron router。通过--router:external=True使用外部路由:neutron net-create phy_net -- --router:external=True --provider:network_type flat --provider:physical_network physnet1
  • 配置强制使用metadata服务。 force_metadata=True

使用l3-agent提供的metadata服务的配置例如以下, 不使用dhcp-agent能够停掉dhcp-agent进程也就不须要配置以下和dhcp-agent的配置了。但须要设置dhcp_agent_notification=False避免依赖):

demo@openstack:~$ grep -r '^enable_' /etc/neutron/dhcp_agent.ini
enable_isolated_metadata = True
enable_metadata_network = False demo@openstack:~$ grep -r '^enable_' /etc/neutron/l3_agent.ini
enable_metadata_proxy = True

如今使用外部dhcpserver, 所以我们能够使用l3-agent来只提供metadata服务,但正常的l3流量仍然走外部路由器。

neutron subnet-create --allocation-pool start=172.16.1.102,end=172.16.1.126 --gateway 172.16.1.2 phy_net 172.16.1.101/24 --enable_dhcp=False --name=phy_subnet_without_dhcp

那么虚机必须配置静态路由:metadata流量走neutron-l3-agent(如neuton提供的gateway: 172.16.1.2),正常的l3流量走外部路由器(如外部网关的IP: 172.16.1.1)。有两种方式能够做到:

1, 做镜像时就将静态路由写死在镜像里。

2, 使用外部dhcpserver提供的静态路由功能。比如使用dnamsq的话。配置应该例如以下:

# 不清楚为什么以下对openstack的虚机一定要使用qbr59bbcb56-86,我使用br-phy没有成功。但用它成功了。

sudo ifconfig qbr59bbcb56-86 172.16.1.99/24
sudo dnsmasq --strict-order --bind-interfaces  -i qbr59bbcb56-86 --dhcp-range=set:tag0,172.16.1.100,172.16.1.109,2h --dhcp-optsfile=/home/demo/opts -d

demo@openstack:~/devstack$ route -n |grep qbr
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 qbr59bbcb56-86 demo@openstack:~$ cat /home/demo/opts
tag:tag0,option:classless-static-route,169.254.169.254/32,172.16.1.2,0.0.0.0/0,172.16.1.1
tag:tag0,249,169.254.169.254/32,172.16.1.2,0.0.0.0/0,172.16.1.1
tag:tag0,option:router,172.16.1.1

确保虚机同意来自172.16.1.0/24网段的dhcp响应:

-A neutron-openvswi-i59bbcb56-8 -s 172.16.1.0/24 -p udp -m udp --sport 67 --dport 68 -j RETURN

-A neutron-openvswi-o59bbcb56-8 -p udp -m udp --sport 68 --dport 67 -m comment --comment "Allow DHCP client traffic." -j RETURN

$ sudo udhcpc eth0
udhcpc (v1.20.1) started
WARN: '/usr/share/udhcpc/default.script' should not be used in cirros. Replaced by cirros-dhcpc.
Sending discover...
Sending select for 172.16.1.100...
Lease of 172.16.1.100 obtained, lease time 7200
WARN: '/usr/share/udhcpc/default.script' should not be used in cirros. Replaced by cirros-dhcpc.
$

demo@openstack:~$ sudo dnsmasq --strict-order --bind-interfaces  -i qbr59bbcb56-86 --dhcp-range=set:tag0,172.16.1.100,172.16.1.109,2h --dhcp-optsfile=/home/demo/opts -d
dnsmasq: started, version 2.68 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth
dnsmasq-dhcp: DHCP, IP range 172.16.1.100 -- 172.16.1.109, lease time 2h
dnsmasq-dhcp: DHCP, sockets bound exclusively to interface qbr59bbcb56-86
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 192.168.100.1#53
dnsmasq: read /etc/hosts - 5 addresses
dnsmasq-dhcp: read /home/demo/opts
dnsmasq-dhcp: DHCPDISCOVER(qbr59bbcb56-86) fa:16:3e:79:1e:2c
dnsmasq-dhcp: DHCPOFFER(qbr59bbcb56-86) 172.16.1.100 fa:16:3e:79:1e:2c
dnsmasq-dhcp: DHCPREQUEST(qbr59bbcb56-86) 172.16.1.100 fa:16:3e:79:1e:2c
dnsmasq-dhcp: DHCPACK(qbr59bbcb56-86) 172.16.1.100 fa:16:3e:79:1e:2c

改用sudo cirros-dhcpc up eth0成功。

$ sudo cirros-dhcpc up eth0
udhcpc (v1.20.1) started

demo@openstack:~/devstack$ ping -c 1 172.16.1.100
PING 172.16.1.100 (172.16.1.100) 56(84) bytes of data.
64 bytes from 172.16.1.100: icmp_seq=1 ttl=64 time=0.400 ms
--- 172.16.1.100 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.400/0.400/0.400/0.000 ms

demo@openstack:~$ ssh cirros@172.16.1.100
The authenticity of host '172.16.1.100 (172.16.1.100)' can't be established.
RSA key fingerprint is fe:f2:85:fd:81:96:3c:94:78:a4:be:b0:41:59:ca:37.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.100' (RSA) to the list of known hosts.
cirros@172.16.1.100's password:
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.1      0.0.0.0         UG    0      0        0 eth0
169.254.169.254 172.16.1.2      255.255.255.255 UGH   0      0        0 eth0
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:79:1e:2c brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.100/24 brd 172.16.1.255 scope global eth0
    inet6 fe80::f816:3eff:fe79:1e2c/64 scope link
       valid_lft forever preferred_lft forever

虚机的虚数据流量通过上面的静态路由走到l3-agent节点上之后。以下的iptables rule会将metadata流量导到9697端口的neutron-ns-metadata-proxy进程上。(若是dhcp-agent提供的metadata server,端口是80,所以也就不须要这个规则了)。

至此。流程已通。

demo@openstack:~$ sudo ip netns exec qrouter-05591292-1191-4f50-9503-215b6962aaec iptables-save |grep 9697
-A neutron-vpn-agen-PREROUTING -d 169.254.169.254/32 -i qr-+ -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697
-A neutron-vpn-agen-INPUT -p tcp -m tcp --dport 9697 -j DROP

demo@openstack:~$ ps -ef|grep metadata
demo      9648  9615  1 09:54 pts/15   00:01:28 python /usr/local/bin/neutron-metadata-agent --config-file /etc/neutron/neutron.conf --config-file=/etc/neutron/metadata_agent.ini
demo     10057     1  0 09:54 ?

00:00:00 /usr/bin/python /usr/local/bin/neutron-ns-metadata-proxy --pid_file=/opt/stack/data/neutron/external/pids/05591292-1191-4f50-9503-215b6962aaec.pid --metadata_proxy_socket=/opt/stack/data/neutron/metadata_proxy --router_id=05591292-1191-4f50-9503-215b6962aaec --state_path=/opt/stack/data/neutron --metadata_port=9697 --metadata_proxy_user=1000 --metadata_proxy_group=1000 --verbose

用外部物理路由器时与外部dhcp服务时怎样使用metadata服务(by quqi99)的更多相关文章

  1. 用外部物理路由器时使用Neutron dhcp-agent提供的metadata服务(by quqi99)

    作者:张华  发表于:2015-12-29版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 环境搭 ...

  2. 转 检查rac服务时,发现ons服务offline

    检查rac服务时,发现ons服务offline 时间:2014-12-23 11:17:37  作者:solgle  来源:www.solgle.com  查看:4075  评论:0         ...

  3. net start Mysql 启动服务时 ,显示"Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误

    一.问题 有时候,输入net start Mysql 启动服务时 mysql>net start Mysql 显示 Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误 二.原因 ...

  4. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  5. 【黑金原创教程】【TimeQuest】【第六章】物理时钟与外部模型

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  6. 运行在VMware上的Linux虚拟机如何使用NAT模式连接物理机的外部网络

    在VMware Workstation中,默认有3个虚拟交换机,分别是VMnet0(使用桥接网络).VMnet1(仅主机网络)和VMnet8(NAT网络). 首先说一下为什么要用NAT模式,如果你的物 ...

  7. css pre如果同时运用了css的border-radius、 overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡

    pre如果同时运用了css的border-radius. overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡. 解决方法:去掉css中border-radius. ...

  8. 服务设计模式一:Web服务概述

    目录 1. Web服务是什么 2.为什么要使用Web服务 3.Web服务考虑的因素和替代方案 4.SOA是什么 Web服务是什么? 所谓服务,通俗的理解就是别人帮你做一些事情,比如说,腰酸背痛了,找个 ...

  9. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

随机推荐

  1. iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)

    一个瀑布流的实现有三种方式: 继承自UIScrollView,仿写UITableView的dataSource和delegate,创造一个缓存池用来实现循环利用cell 写多个UITableview( ...

  2. 移动web开发(四)——X-UA-Compatible

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> IE=edge告诉 ...

  3. C#学习笔记(28)——委托排序(2)自定义排序

    说明(2017-11-21 15:24:50): 1. 定义一个排序方法,参数是字符串数组,和委托.MySort(nums, string.Compare),调用时只需要更换里面的委托方法就行,或者直 ...

  4. java工具类POI导出word

    1.新建一个word,里面填写内容,如: 2.导出wordjava类 /** * POI导出word测试 * @throws Exception */ @RequestMapping(value=&q ...

  5. java基础篇---Servlet过滤器

    Servlet过滤器从字面上的字意理解为景观一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的 ...

  6. mongo源码学习(二)db.cpp之mongoDbMain方法分析

    mongo后台进程的入口:mongo/src/mongo/db/dbmain.cpp,wmain(for windows)和main函数,main函数也很简单,就是委托给db.cpp中的mongoDb ...

  7. Beans

    PHP之所以被人称为"世界上最好的语言",很大程度上是因为学会语法后就可以直接运用其开发Web应用了吧,而Java基本上不可能.在Java的语言特性的背后,还拖着由Sun公司和社区 ...

  8. Android——黑名单管理

    DBHelper.java package com.example.chenshuai.test; import android.content.Context; import android.dat ...

  9. sqoop 常用命令整理(一)

    这些内容是从sqoop的官网整理出来的,是1.4.3版本的Document,如果有错误,希望大家指正. 1.使用sqoop导入数据 sqoop import --connect jdbc:mysql: ...

  10. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...