译者在自动化部署的时候遇到了很多问题,这个时候不得不求向devstack官档。所以翻译出来以备以后查询。翻译中很多不足之处还望指教。写这个的老外用词有点抽象和狂野….
本文为博主翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou
本指南将会引导你如何配置openstack网络节点,网络节点会使用到ML2插件和OpenvSwitch机制。
在有些开发者实验环境中,主机有且只有一个可用的网卡可用的情况。这种情况下物理网卡加入到Open vSwitch中,然后IP地址配在网桥中。这样这个接口充当着三个角色,为自己网络节点服务传输数据,为OpenStack API传输数据,为管理节点传输数据。
警告:当配置单网卡模式的网络节点时,有可能会出现一个临时故障,有可能你的IP地址从你的机器的物理网卡中移除,然后配置在了OVS网桥上。如果你从其他机器用SSH链接到这台机器,可能有一定的风险导致你的SSH会话session中断(因为的arp缓存失效),这样的话将可能中断stack.sh脚本的运行,使整个部署处于一个未完成的状态。为了解决这种情况可以为stack.sh单独的开一个session这样能让stack.sh脚本继续运行。
在大多数使用Devstack部署单网络接口的情况下,网卡一般有自己的路由用于连接外部网络和DHCP服务器。因为网络节点开放了一个外网连接端口,其他想要连接到网络节点的机器(例如想做调试)可以通过这个共享的外网子网段来连接到neutron。在local.conf配置文件中对这个外网设定了一个合理的MTU值,该值为1500(MTU Maximun Transmission Unit: 最大传输单元,一般设置默认值也就是1500)。下面给出了实验的网络拓扑图:
以下是对主机名为devstack-1完整的local.conf配置文件。配置文件会运行所有的API和服务,也提供虚拟化服务用于创建实例。
[[local|localrc]]
HOST_IP=172.18.161.6
SERVICE_HOST=172.18.161.6
MYSQL_HOST=172.18.161.6
RABBIT_HOST=172.18.161.6
GLANCE_HOSTPORT=172.18.161.6:9292
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
# Do not use Nova-Network
disable_service n-net
# Enable Neutron
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3
## Neutron options
Q_USE_SECGROUP=True
FLOATING_RANGE="172.18.161.0/24"
FIXED_RANGE="10.0.0.0/24"
Q_FLOATING_ALLOCATION_POOL=start=172.18.161.250,end=172.18.161.254
PUBLIC_NETWORK_GATEWAY="172.18.161.1"
PUBLIC_INTERFACE=eth0
# Open vSwitch provider networking configuration
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex
我们假设你按照以上的步骤部署完了第一个节点之后你想做多节点测试和多节点之间的网络。
当我们用Devstack安装部署完Neutron节点之后(从上配置文件可以看出keystone和glance也做了配置),客户在devstack-2上创建实例(devstack-2作为计算机节点)的时候,L3代理服务会把devstack1和devstack2的通讯(nova与keystone节点的通讯访问)压缩封装在VXLAN隧道进行传输。
stack@devstack-2:~/devstack$ sudo ovs-vsctl show
8992d965-0ba0-42fd-90e9-20ecc528bc29
Bridge br-int
fail_mode: secure
Port br-int
Interface br-int
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Bridge br-tun
fail_mode: secure
Port "vxlan-c0a801f6"
Interface "vxlan-c0a801f6"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.18.161.7", out_key=flow, remote_ip="172.18.161.6"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port br-tun
Interface br-tun
type: internal
ovs_version: "2.0.2"
L3代理运行在控制节点devstack-1上,Open vSwitch同样配置在控制节点上。Open vSwitch会把从网络节点发过来的包解封装,然后转发到eth0链接的br-ex网桥上。
stack@devstack-1:~/devstack$ sudo ovs-vsctl show
422adeea-48d1-4a1f-98b1-8e7239077964
Bridge br-tun
fail_mode: secure
Port br-tun
Interface br-tun
type: internal
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "vxlan-c0a801d8"
Interface "vxlan-c0a801d8"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.18.161.6", out_key=flow, remote_ip="172.18.161.7"}
Bridge br-ex
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port "eth0"
Interface "eth0"
Port br-ex
Interface br-ex
type: internal
Bridge br-int
fail_mode: secure
Port "tapce66332d-ea"
tag: 1
Interface "tapce66332d-ea"
type: internal
Port "qg-65e5a4b9-15"
tag: 2
Interface "qg-65e5a4b9-15"
type: internal
Port "qr-33e5e471-88"
tag: 1
Interface "qr-33e5e471-88"
type: internal
Port "qr-acbe9951-70"
tag: 1
Interface "qr-acbe9951-70"
type: internal
Port br-int
Interface br-int
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Port int-br-ex
Interface int-br-ex
type: patch
options: {peer=phy-br-ex}
ovs_version: "2.0.2"
br-int是Open vSwitch驱动机制创建的一个网桥。br-int可以看做是一个集成网桥,在这个网桥内创建对实例的各个端口,也可以在这个网桥中创建虚拟交换机。br-ex是一个OVS网桥用于链接物理网卡接口(例如eth0)。各个节点向控制节点发送的消息可以通过这个br-ex来接收,然后br-ex会把包转发到devstack-1上各自服务的网络端口上。br-ex同样接收外网ip向devstack-1上发送的包。br-tun隧道是用来链接openstack的计算节点的,这个网桥隧道主要用于计算节点和网络节点间的通讯,使用的是VXLAN协议。计算节点上的实例与网络节点链接同样使用这个br-tun网桥隧道(例如devstack-1和devstack-2的通讯)。
译者注:
什么是网桥:网桥工作在数据链路层,将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发,可以看作一个“低层的路由器”(路由器工作在网络层,根据网路地址比如IP地址进行转发)。它可以有效地链接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于链接数量不多的,同一类型的网段。
什么是VXLAN介绍:
VXLAN全称Virtual eXtensible LAN,是一种覆盖网络技术或隧道技术。VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为outer-header进行封装,然后在物理IP网上传输,到达目的地后由隧道终结点解封并将数据发送给目标虚拟机。
什么是隧道技术:
隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
这里所说的隧道类似于点到点的连接,这种方式能够使来自许多信息源的网络业务在同一个基础设施中通过不同的隧道进行传输。隧道技术使用点对点通信协议代替了交换连接,通过路由网络来连接数据地址。隧道技术允许授权移动用户或已授权的用户在任何时间、任何地点访问企业网络。
通过隧道的建立,可实现:
* 将数据流强制送到特定的地址
* 隐藏私有的网络地址
* 在IP网上传递非IP数据包
* 提供数据安全支持。
如果难以理解说什么的看以下拓扑图:
使用最小化配置文件来配置主机devstack-2。
[[local|localrc]]
HOST_IP=172.18.161.7
SERVICE_HOST=172.18.161.6
MYSQL_HOST=172.18.161.6
RABBIT_HOST=172.18.161.6
GLANCE_HOSTPORT=172.18.161.6:9292
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
## Neutron options
PUBLIC_INTERFACE=eth0
ENABLED_SERVICES=n-cpu,rabbit,q-agt
传输流程:计算节点向网络节点发起任何数据链接时,先由计算节点eth0网卡发出通过计算节点的NAT转换指向了neutron的l3代理,之后由l3代理提保证算节点和网络节点通讯。
译者注:Open vSwitch为开放虚拟交换标准,虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。
在有些情况下需要使用neutron组件来提供网络的拓展服务,这样可以利用neutron来配置网络上的一个外部路由器,通过nova创建的实例可以连接到由neutron管理的外部路由器。
在有些实验环境中,物理网络的路由已经被预先配置了,openstack的开发人员仅仅只被给了一个vlan标签和一个IP地址段范围。这样的话通过devstack创建的虚拟机实例通过三层网络来连接到外网路由器。(译者认为这里是没有使用neutron的L3-agent,而是使用了nova-network使创建的实例与外网通讯),这种模式与neutron L3服务原理截然不同。
在计算节点上,第一个网卡接口eth0是用来与openstack管理节点来通讯的,可以通过ssh使用root权限来登录该机器。
stack@compute:~$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr bc:16:65:20:af:fc
inet addr:10.0.0.3
eth1网卡是手动配置的在开机引导的时没有IP地址。如何配置网卡请参阅你所使用操作系统相对应技术文档。对于Ubuntu,网卡配置文件/etc/network/interfaces包含以下信息:
auto eth1
iface eth1 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE 0.0.0.0 down
第二个物理接口,eth1需要添加到br-ex网桥中用于实例虚机访问外部网络。
stack@compute:~$ sudo ovs-vsctl add-br br-ex
stack@compute:~$ sudo ovs-vsctl add-port br-ex eth1
stack@compute:~$ sudo ovs-vsctl show
9a25c837-32ab-45f6-b9f2-1dd888abcf0f
Bridge br-ex
Port br-ex
Interface br-ex
type: internal
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port "eth1"
Interface "eth1"
控制节点
在这个例子中,控制节点将会运行绝大部分openstack的API和管理服务(keystone,glance,nova,neutron).
计算节点
在这个例子中,计算节点负责运行实例,同时运行neutron-openvswitch-agent服务来提供网络访问,运行nova-cpmpute服务提供计算服务。
下面的代码片是使用devstack配置controller节点:
HOST_IP=10.0.0.2
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
GLANCE_HOSTPORT=10.0.0.2:9292
PUBLIC_INTERFACE=eth1
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
## Neutron options
Q_USE_SECGROUP=True
ENABLE_PROJECT_VLANS=True
PROJECT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
OVS_PHYSICAL_BRIDGE=br-ex
Q_USE_PROVIDER_NETWORKING=True
# Do not use Nova-Network
disable_service n-net
# Neutron
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt
## Neutron Networking options used to create Neutron Subnets
FIXED_RANGE="203.0.113.0/24"
NETWORK_GATEWAY=203.0.113.1
PROVIDER_SUBNET_NAME="provider_net"
PROVIDER_NETWORK_TYPE="vlan"
SEGMENTATION_ID=2010
在这个配置参考中,我们定义FIXED_RANGE为一个IPV4的公网网段。对于特殊实例来说我们使用RFC5737中定义的特殊TEST-NET-3子网。在你设置你的devstack时,FIXED_RANGE配置的是你或者你组织分配给你的公网IP段,这样的话你可以通过外网来连接你的虚机实例。
通过devstack配置计算节点node1.
HOST_IP=10.0.0.3
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
GLANCE_HOSTPORT=10.0.0.2:9292
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
# Services that a compute node runs
ENABLED_SERVICES=n-cpu,rabbit,q-agt
## Open vSwitch provider networking options
PHYSICAL_NETWORK=default
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_INTERFACE=eth1
Q_USE_PROVIDER_NETWORKING=True
在配置node2节点的时候大部分配置项目都和node1一样除开HOST_IP需要改成10.0.0.4。
Devstack会配置提供网络选项(通过将Q_USE_PROVIDER_NETWORKING置成True)。Devstack会为OVS_PHYSICAL_BRIDGE配置项里定义的br-ex网桥自动加入你在PUBLIC_INTERFACE里定义的接口。
例如使用上面的配置,创建了一个网桥,网桥名为br-ex并由Open vSwitch管理。计算节点中第二个网卡接口eth1会加入到这个网桥为虚机提供网络访问。
neutron规定的MTU值是默认Ethernet标准的1500bytes。
如果想要设置不同的MTU值可以在部署neutron节点时在local.conf配置文件的neutron小节中加入如下参数。如果你有网络设备支持超大帧,你同样可以按照如下方法将MTU值置成9000。
[[post-config|/$Q_PLUGIN_CONF_FILE]]
global_physnet_mtu = 9000
如果加载使用了其他的防火墙devstack可能不能正常工作。可能会出现虚机实例可以通过ICMP来访问外部网络,但是实例与外部通讯的TCP和UDP的包将不会通过防火墙。这个问题的根本原因是其他的防火墙被应用并且适用了在了所有端口(意思就是全部deny掉了)。解决这种问题的方法是只保留iptables防火墙,以避免多防火墙设置冲突。
在Fedora操作系统中配置防火墙如下:(译者注:在RHEL和Centos 7以上版本需要关闭firewall,ebtables,ip6tables,开启iptables防火墙)
sudo service iptables save
sudo systemctl disable firewalld
sudo systemctl enable iptables
sudo systemctl stop firewalld
sudo systemctl start iptables
在发行版的Linux操作系统中包含配置防火墙和禁用防火墙功能。注意,在Ubuntu操作系统中默认是不会开启ufw防火墙的。如果发现ufw防火墙是enabled状态需要将它禁用掉可以执行以下指令:
sudo service iptables save
sudo ufw disable
拓展插件ML2的参数为Q_ML2_PLUGIN_EXT_DRIVERS,默认包括了端口安全。如果你想不使用任何拓展驱动(包括端口安全),那么可以在Q_ML2_PLUGIN_EXT_DRIVERS后面什么都不写。
配置使用自带网桥的二层驱动非常直接了当。配置Linux系统自带网桥与配置Open vSwitch单网卡模式是非常类似的,只是在接口映射那有微小的不同。
[[local|localrc]]
HOST_IP=172.18.161.6
SERVICE_HOST=172.18.161.6
MYSQL_HOST=172.18.161.6
RABBIT_HOST=172.18.161.6
GLANCE_HOSTPORT=172.18.161.6:9292
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
# Do not use Nova-Network
disable_service n-net
# Enable Neutron
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3
## Neutron options
Q_USE_SECGROUP=True
FLOATING_RANGE="172.18.161.0/24"
FIXED_RANGE="10.0.0.0/24"
Q_FLOATING_ALLOCATION_POOL=start=172.18.161.250,end=172.18.161.254
PUBLIC_NETWORK_GATEWAY="172.18.161.1"
PUBLIC_INTERFACE=eth0
Q_USE_PROVIDERNET_FOR_PUBLIC=True
# Linuxbridge Settings
Q_AGENT=linuxbridge
LB_PHYSICAL_INTERFACE=eth0
PUBLIC_PHYSICAL_NETWORK=default
LB_INTERFACE_MAPPINGS=default:eth0
( 译者注: Macvtap是一个新的设备驱动程序,旨在简化虚拟化的桥接网络。它取代基于macvlan设备驱动模块的TUN / TAP和桥驱动器的组合。一个macvtap终点(endpoint)是一个字符设备,主要遵循的TUN/ TAP ioctl接口,可以直接使用KVM/qemu和其他支持TUN / TAP接口的虚拟机管理程序。终点(endpoint)扩展了现有的网络接口,较低的设备,在同一个以太网段上的,拥有自己的MAC地址。通常情况下,这是用来使双方的客户机和主机直接显示的主机连接到交换机上的。)
安全组现在不支持MacVTap代理。因为这样,devstack在计算节点上配置NoopFirewall驱动。
MacVTap代理不支持L3,dhcp和元数据代理。因为这样你可以选择如下的部署方案。
如果L3和dhcp服务是由其他服务器提供的,或者你不想使用它们,那么以下情况适用这种配置:
[[local|localrc]]
HOST_IP=10.0.0.2
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
Q_ML2_PLUGIN_MECHANISM_DRIVERS=macvtap
Q_USE_PROVIDER_NETWORKING=True
#Enable Neutron services
disable_service n-net
enable_plugin neutron git://git.openstack.org/openstack/neutron
ENABLED_SERVICES+=,q-agt,q-svc
## MacVTap agent options
Q_AGENT=macvtap
PHYSICAL_NETWORK=default
FIXED_RANGE="203.0.113.0/24"
NETWORK_GATEWAY=203.0.113.1
PROVIDER_SUBNET_NAME="provider_net"
PROVIDER_NETWORK_TYPE="vlan"
SEGMENTATION_ID=2010
[[post-config|/$Q_PLUGIN_CONF_FILE]]
[macvtap]
physical_interface_mappings = $PHYSICAL_NETWORK:eth1
[[post-config|$NOVA_CONF]]
force_config_drive = True
这种情况适用于你想让openstack提供L3,dhcp和元数据服务。这些服务运行在网络节点上,控制节点上有相对应的网络服务来服务与之通讯,网络节点上还跑着其他L2代理(这个例子使用的是Open vSwitch)。网络节点需要配置VLAN租户网络。
对于OVS,配置与之前2.2中讲述的配置大致一致,只需要将下列配置项加入local.conf文件中,这样就能加载MacVTap驱动机制。
[[local|localrc]]
...
Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,macvtap
...
对于使用MacVTap的计算节点,用以后配置项来配置local.conf。
HOST_IP=10.0.0.3
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
# Services that a compute node runs
disable_all_services
enable_plugin neutron git://git.openstack.org/openstack/neutron
ENABLED_SERVICES+=n-cpu,q-agt
## MacVTap agent options
Q_AGENT=macvtap
PHYSICAL_NETWORK=default
[[post-config|/$Q_PLUGIN_CONF_FILE]]
[macvtap]
physical_interface_mappings = $PHYSICAL_NETWORK:eth1
官方原文地址:
http://docs.openstack.org/developer/devstack/guides/neutron.html#ovs-provider-network-controller