1. 目标
完成了《Ubuntu16手动安装OpenStack——swift篇》,openstack的核心组件就全部安装好了。
之前的配置中,使用了简单的flatdhcp网络模式配置。本文,我们来把网络模式修改为vxlan,主要参考OpenStack Queens : Neutron Network (VXLAN)。
2. 网络模式
参考OpenStack 网络:Neutron 初探和深入理解 Neutron – OpenStack 网络实现,openstack的网络模式可以分为五种,分别是Flat、FlatDHCP、VLAN、GRE和VxLAN。
2.1. Flat
Flat模式使用一个网桥实现OpenStack的网络,由于所有虚拟机都属于同一个网段,所以称之为扁平化flat。缺点是虚拟机的IP需要手动注入,而且只支持linux操作系统。
在 Flat 模式下工作流程如下:
(1)为所有租户创建一个 IP 池
(2)创建租户
(3)租户创建虚拟机,为虚拟机分配 IP 池中的可用 IP
2.2. FlatDHCP
FlatDHCP 与 Flat 的不同在于有一个 DHCP 进程,虚拟机启动时会发送 dhcpdiscover 以获取 IP 地址。
2.3. VLAN
VLAN(Virtual Local Area Network)的中文名为”虚拟局域网”。VLAN 是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。
在 VLAN 模式下工作流程如下:
(1)创建新的租户,并记下租户的标识
(2)为该租户创建独占的私有IP段
(3)租户创建虚拟机,从租户的私有IP段内分配IP给虚拟机
与 Flat 模式相比,VLAN 模式为网络增加了:将网络与租户关联和为网络分配一个 VLAN 号。
更多内容参考Neutron Vlan Network 原理- 每天5分钟玩转 OpenStack(92)。
2.4. GRE
GRE(General Routing Encapsulation)是点对点的IP隧道技术,可以用于虚拟网络互连。GRE和VLAN相比,最大的不同在于VLAN的tag转换方式。
在VLAN模式下,虚拟机集群内部网络与外部网络通信时,内部网络的int-VLAN:tag会转换为外部网络的ex-VLAN:tag;外部网络与虚拟机内部网络通信时,外部网络的ex-VLAN:tag会转换为内部网络的int-VLAN:tag。
而GRE模式下,虚拟机集群内部网络与外部网络通信时,内部网络的int-VLAN:tag会转换为外部网络的tunnul:tag;外部网络与虚拟机内部网络通信时,外部网络的tunnel:tag会转换为内部网络的int-VLAN:tag。
2.5. VxLAN
VxLAN(Virtual Extensible LAN)一般认为是 VLAN 技术的延伸或替代者。相较于采用物理VLAN实现的网络虚拟化,VxLAN是UDP隧道,可以穿越IP网络,使得两个VLAN可以实现二层联通,并且突破4095的VLAN ID限制,提供多达1600万的虚拟网络容量。
VxLAN 模式下,网络的架构跟 GRE 模式类似,所不同的是,不同节点之间通过 VxLAN 隧道互通,即虚拟化层是采用的 VxLAN 协议。
3. VxLAN配置
3.1. root用户
为了避免权限问题,建议切换到root用户进行操作(否则要加很多sudo)。sudo -i
3.2. 控制节点
1、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 130: add a value to tenant_network_types |
2、重启neutron-serversystemctl restart neutron-server
3.3. 网络节点
这里我们的网络节点和控制节点是同一个节点。
1、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 130: add a value to tenant_network_types |
2、vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
,如下修改:
1 | # line 118: add |
3、vi /etc/neutron/dhcp_agent.ini
,如下修改:
1 | # line 63: add |
4、vi /etc/neutron/dnsmasq-neutron.conf
,新建dnsmasq-neutron.conf内容如下:
1 | # create new |
5、重启服务
1 | for service in l3-agent dhcp-agent metadata-agent linuxbridge-agent; do |
3.4. 计算节点
1、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 130: add a value to tenant_network_types |
2、vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
,如下修改:
1 | # line 118: add |
3、重启neutron-linuxbridge-agentsystemctl restart neutron-linuxbridge-agent
4. 使用
4.1. 清除flat网络
《Ubuntu16手动安装OpenStack——创建实例》一文中,已经使用flat网络创建了sharednet1,并在网络中创建了一个实例cirros0。在使用新的网络之前,删除它们。
1、使admin环境生效. admin-openrc
2、查看实例openstack server list
3、删除实例openstack server delete cirros0
4、查看网络openstack network list
5、删除sharednet1openstack network delete sharednet1
4.2. 创建vxlan网络
在控制节点测试使用vxlan,实际上可以在任意节点使用。
1、使admin环境生效. admin-openrc
2、创建路由router01openstack router create router01
3、创建内部网络int_netopenstack network create int_net --provider-network-type vxlan
4、在内部网络中创建子网
1 | openstack subnet create subnet1 --network int_net \ |
5、把内部网络int_net连接到路由router01上openstack router add subnet router01 subnet1
6、创建外部网络ext_net
1 | openstack network create \ |
7、在外部网络中创建子网subnet2
1 | openstack subnet create subnet2 \ |
8、把ext_net的网关设置为router01openstack router set router01 --external-gateway ext_net
此时,在horizon控制台看到的网络拓扑如下:
4.3. 授权网络
默认情况下,所有项目都可以访问到外部网络,但对于内部网络,只有管理项目可以访问它。因此需要对其他项目进行授权,使项目中的用户可以使用内部网络。
1、查看rbac网络openstack network rbac list
2、查看rbac网络细节openstack network rbac show a5c4db79-f467-4b58-892b-b9cc56c3e317
3、查看网络openstack network list
4、查看项目openstack project list
5、授权int_net给siat项目,权限为access_as_shared
1 | netID=$(openstack network list | grep int_net | awk '{ print $2 }') |
4.4. 使用vxlan网络
1、切换到siat项目的voidking用户环境. voidkingrc
2、查看实例模板、镜像、网络
1 | openstack flavor list |
3、安全组和密钥使用《Ubuntu16手动安装OpenStack——创建实例》一文中创建的secgroup01和vkkey。
4、创建实例
1 | netID=$(openstack network list | grep int_net | awk '{ print $2 }') |
5、查看实例openstack server list
6、给实例添加浮动IP
1 | openstack floating ip create ext_net |
7、查看浮动IPopenstack floating ip show 10.0.0.201
8、再次查看实例openstack server list
可以发现,cirros1已经有了两个IP地址。
9、测试连通
1 | ping 10.0.0.201 |
顺利登录,nice。
PS:ping 192.168.100.6
是不通的,因为那是openstack内部网络。