OpenStack IceHouse 部署 - 5 - 网络节点部署

Neutron网络服务(网络节点)

 
 

目录

 [隐藏

参考

由于硬件条件所限并结合实际网络环境,本页并不是完全按照官方给出的指导[1]进行.

前置工作

调整内核参数

由于网络节点要承担起路由器的角色,必须把内核的转发功能打开,同时关闭反向路径过滤功能,编辑 /etc/sysctl.conf 修改其中的相关参数如下:

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

应用配置

# sysctl -p

安装

# apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent openvswitch-datapath-dkms neutron-l3-agent neutron-dhcp-agent

注意:Ubuntu installations using Linux kernel version 3.11 or newer do not require the openvswitch-datapath-dkms package.

配置

主要涉及以下配置文件

/etc/neutron/neutron.conf
neutron服务本身
/etc/neutron/plugins/ml2/ml2_conf.ini
ml2,二层网络插件
/etc/neutron/l3_agent.ini
虚拟网络路由服务
/etc/neutron/dhcp_agent.ini
虚拟网络DHCP
/etc/neutron/dnsmasq/dnsmasq-neutron.conf
DHCP服务具体配置,这里创建这个文件主要为了配置合适的网络MTU
/etc/neutron/metadata_agent.ini
元数据...
/etc/nova/nova.conf(控制节点上)
元数据...

keystone对接

编辑配置文件/etc/neutron/neutron.conf,在对应小节修改(或添加)相关字段如下

[DEFAULT]
...
auth_strategy = keystone
...
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_host = controller
auth_protocol = http
auth_port = 35357
admin_tenant_name = service
admin_user = neutron
admin_password = neutron_pass

这里假定neutron服务的keystone帐号密码为neutron_pass

rabbitmq对接

修改配置文件/etc/neutron/neutron.conf, 在对应小节修改(或添加)相关字段如下

[DEFAULT]
...
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = rabbit123

这里假定消息队列默认用户(guest)的密码为rabbit123

metadata服务对接

修改配置文件/etc/neutron/metadata_agent.ini, 修改配置文件相关字段如下:

[DEFAULT]
...
auth_url = http://controller:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutron
admin_password = neutron_pass
nova_metadata_ip = controller
metadata_proxy_shared_secret = metadatasceret

这里假定neutron服务的keystone帐号密码为neutron_pass,且在控制节点上配置的metadata_proxy_shared_secret为metadatasceret

ML2插件配置

首先修改配置文件/etc/neutron/neutron.conf指定使用的插件

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

注释掉所有[service_providers]下的内容 然后修改ml2插件单独的配置文件/etc/neutron/plugins/ml2/ml2_conf.ini,指定其使用openswitch,并采用GRE隧道,添加或修改相应的小节字段如下

[ml2]
...
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_gre]
...
tunnel_id_ranges = 1:1000

[ovs]
...
local_ip = 10.14.39.50
tunnel_type = gre
enable_tunneling = True

[securitygroup]
...
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True

其中[ovs]小节中local_ip指定的时GRE隧道通信使用的网络接口的ip地址,由于我们台式机只有一张网卡,所以和管理服务共用一个接口.

L3-agent

L3即三层网络(这里是ip网络),进行网络路由的层.修改配置文件 /etc/neutron/l3_agent.ini, 将相关字段小节添加(修改)如下:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True

关于linux网络命名空间在路由上的实际使用可以查看虚拟路由

DHCP-agent

这里DHCP服务主要用于虚拟网络中ip地址动态分配,并指定合适的MTU值,修改配置文件/etc/neutron/dhcp_agent.ini,编辑相关内如下:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True
...
# Override the default dnsmasq settings with this file
dnsmasq_config_file = /etc/neutron/dnsmasq/dnsmasq-neutron.conf

这里我们指定了dnsmasq服务的配置文件以覆盖默认配置,因为我们使用了GRE隧道,对于虚拟机来说MTU不再是默认的1500,必须进行修改,否则会造成数据传输卡顿,参见[2].

创建dnsmasq的配置文件/etc/neutron/dnsmasq/dnsmasq-neutron.conf,加入如下内容

# explicitly set the MTU when using a GRE Tunnel(or big data packets won't tx/rx normally)
dhcp-option-force=26,1454

# set the dns server for internal virtual machines
server=10.10.0.21

# set local domain name
domain=dblab

注意网上有些文章,给出MTU为1400的配置,这个值在虚拟机内使用VPN时也会造成网络传输问题,因为VPN隧道的MTU默认是1400,如果此时再指定虚拟以太网的MTU为1400则,大数据将无法收发,造成VPN能够连上,但依然无法访问网络的现象.

接口配置

(thumbnail)
单网卡接口配置方案

网络节点由于只有一个物理网络接口,但是按照三节点部署方案,在网络节点上需要用一个接口来接到外部网络,使得虚拟机能够访问外部网络,并且通过浮动IP配置,外部网络能够访问虚拟网络内的虚拟机.为此我们采用右图所示的配置方案.

首先我们按照官方指导创建两个neutron系统默认使用的openswitch网桥(br-ex, br-int)如下

# service openvswitch-switch restart

# ovs-vsctl add-br br-int

# ovs-vsctl add-br br-ex

接下来官方中,需要将一个连接在外网上的接口(比如eth2)加入到br-ex(该网桥就是负责外网与虚拟路由的连接)中,如下

# ovs-vsctl add-port br-ex eth2

很遗憾我们没有这样的另一个网络接口(网卡),如果把我们仅有的网络接口(eth0)加入到网桥中比如

# ovs-vsctl add-port br-ex eth0

很快就会发现,网络节点不能上网了,就连网关也ping不通了,因为加入到网桥的接口是作为二层接口来看待的,因此没有IP地址,也就是说我们现在的网络节点没有了IP地址了,沦落为一台二层设备了,不能进行任何的三层(IP网络)操作了.其实使用ovs-vsctl命令创建网桥时,会默认加入一个与网桥名同名的一个三层接口,对br-ex来说就是br-ex网络接口,可以通过ifconfig命令或以下命令查看:

admin@network:~$ sudo ovs-vsctl show
[sudo] password for admin: 
dbee7ef4-5fda-45ab-a441-bf3adcfe2835
    Bridge br-ex
        Port br-ex
            Interface br-ex
                type: internal
        Port "eth0"
            Interface "eth0"
...

因此我们可以将该接口的ip地址设成原来eth0的地址,即网络节点的地址10.14.39.50 / 24(在这之前确保eth0接口的地址已经被清零), 同时需要修改路由表,添加一条从br-ex接口上的默认路由(原先的默认路由会随着eth0地址的清空而被删除).至此网络节点的网络访问又恢复正常了,而且我们也向br-ex网桥中添加了一个接口eth0,这样至少可以使得虚拟机在校园网内被访问.

总的来说需要进行如下配置

# ovs-vsctl add-br br-int

# ovs-vsctl add-br br-ex

# ifconfig eth0 0

# ovs-vsctl add-port br-ex eth0

# ifconfig br-ex 10.14.39.50 netmask 255.255.255.0

# route add default gw 10.14.39.1 br-ex

如果网络节点拨了学校VPN的话请另外添加一条路由,使得其他校园内网能够正常访问,这对于其他节点主机也是一样的.

route add -net 10.0.0.0/8 gw 10.14.39.1 br-ex

服务更新

为了日后管理方便,在admin用户下创建两个脚本文件

openvswitch_restart.sh
#! /bin/bash
service openvswitch-switch restart
neutron_restart.sh
##! /bin/bash
service neutron-plugin-openvswitch-agent restart \
&& service neutron-l3-agent restart \
&& service neutron-dhcp-agent restart \
&& service neutron-metadata-agent restart

修改脚本权限

$ chmod +x openvswitch_restart.sh 
$ chmod +x neutron_restart.sh

运行脚本,重启服务以应用上述的配置

# ./openvswitch_restart.sh 
# ./neutron_restart.sh

服务验证

可以neutron客户端查看各个节点的agent状态(l2,l3,dhcp等)

admin@network:~$ . admin-openrc.sh 
admin@network:~$ neutron
(neutron) agent-list
+--------------------------------------+--------------------+----------+-------+----------------+
| id                                   | agent_type         | host     | alive | admin_state_up |
+--------------------------------------+--------------------+----------+-------+----------------+
| 276b1204-db1a-4157-867b-c442e82221fc | Open vSwitch agent | network  | :-)   | True           |
| 798ce163-c600-48a6-a0a4-0b8eeb03a752 | Metadata agent     | network  | :-)   | True           |
| bc34ff15-aa0d-4b7e-9efb-c4413264fa24 | L3 agent           | network  | :-)   | True           |
| be1e8354-ce08-480e-aea1-2e5a17a64c60 | DHCP agent         | network  | :-)   | True           |
| dda050ed-6e90-43de-852c-6bb5c4a5daae | Open vSwitch agent | compute1 | :-)   | True           |
+--------------------------------------+--------------------+----------+-------+----------------+

关注alive列,如果是":-)"则该服务正常,如果是XXX则说明该节点的相关服务出现问题.

附加配置

共享上网

为了使得虚拟机能够直接通过网络节点的VPN上外网(方便测试和虚拟机配置),我们需要修改网络节点上的路由表和虚拟路由的路由表。

iptables NAT

在拨通VPN连接后,系统一般会多出一个ppp0接口,需要将其他机器请求转发的包由这个网络接口送出,同时为了更好的伪装,我们修改报文的TTL数值,这使得外部无法区分本机发包和转发包。 首先使用iptables在nat表中加入一条如下

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

然后在mangle表中加入一条修改包TTL的规则,统一将报文TTL修改为64

sudo iptables -t mangle POSTROUTING -o ppp0 -j TTL --ttl-set 64

虚拟路由

先通过以下命令获得虚拟路由所在的命名空间

# ip netns
qrouter-e7286b63-5ea3-4470-9308-898be00b475b
qdhcp-e798d0d9-88a0-4f56-b412-599372e26409
qdhcp-a7b60bd2-b03f-4ea8-8b9e-ba0e022259c0
qdhcp-e2215146-953f-4fe0-b2fa-6864d44285a5

其中含有router的即为虚拟路由命名空间

删除原有默认路由(走10.14.39.1网关)

ip netns exec qrouter-e7286b63-5ea3-4470-9308-898be00b475b route del default

然后添加一条默认路由(走10.14.39.50,即刚刚配置了MASQUERADE规则的网络节点,即本机),该默认路由需要添加在指向10.14.39.0/24网段的那个接口上 查看虚拟路由接口:

root@network:/home/admin# ip netns exec qrouter-e7286b63-5ea3-4470-9308-898be00b475b ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

qg-f8c30f08-16 Link encap:Ethernet  HWaddr fa:16:3e:9d:a6:8e  
          inet addr:10.14.39.113  Bcast:10.14.39.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fe9d:a68e/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:83378 errors:0 dropped:0 overruns:0 frame:0
          TX packets:33333 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:16702676 (16.7 MB)  TX bytes:25097978 (25.0 MB)

qr-0b260f87-20 Link encap:Ethernet  HWaddr fa:16:3e:c1:96:32  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fec1:9632/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:38719 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26447 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:26061304 (26.0 MB)  TX bytes:6118682 (6.1 MB)

qr-4a43399e-9d Link encap:Ethernet  HWaddr fa:16:3e:df:02:7b  
          inet addr:192.100.0.1  Bcast:192.100.255.255  Mask:255.255.0.0
          inet6 addr: fe80::f816:3eff:fedf:27b/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2612 (2.6 KB)  TX bytes:738 (738.0 B)

可以看到是qg-f8c30f08-16接口

ip netns exec qrouter-e7286b63-5ea3-4470-9308-898be00b475b route add default gw 10.14.39.50 qg-f8c30f08-16
posted @ 2014-06-12 11:10  卖程序的小歪  阅读(1824)  评论(3编辑  收藏  举报