码迷,mamicode.com
首页 > Web开发 > 详细

用外部物理路由器时与外部dhcp服务时如何使用metadata服务(by quqi99)

时间:2015-12-31 12:56:26      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

作者:张华  发表于: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


目前只有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


现在使用外部dhcp服务器, 所以我们可以使用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, 使用外部dhcp服务器提供的静态路由功能。例如使用dnamsq的话,配置应该如下:

sudo /usr/sbin/dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=br-phy --except-interface=lo --dhcp-optsfile=/tmp/opts --leasefile-ro --dhcp-authoritative --dhcp-range=set:tag0,172.16.1.0,static,86400s --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

cat /tmp/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


虚机的虚数据流量通过上面的静态路由走到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)

标签:

原文地址:http://blog.csdn.net/quqi99/article/details/50440347

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!