FLAT网络
Flat网络,相当于直连到对应网络中,没有套任何一层,所有设备都在同一个广播域中。最开始搭建的供应商网络就是这种形式,直连到对应的一个网络中。这里将讲解如何增加一个Flat网络。
首先先在所有的网络计算节点添加一个网卡(注意搭建的时候控制节点也加上了网络控制节点,虽然不知道用处在哪,但是为了不出问题建议也加上。)
这里添加了一个仅主机模式的网卡,一定是在所有计算节点都添加上。添加上之后开始设置网卡,增加后的网卡名字是ens36,执行下面命令进行配置
[root@compute1 ~]# cd /etc/sysconfig/network-scripts/
[root@compute1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
# 修改ens36的网卡,最终保留下面信息即可。
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.244.128
IP的配置只需要保留ip和掩码即可,因为仅主机模式,本身就不可以连接外部网路所以也没必要加网关和DNS。其余主机也都是这样配置,ip设置成dhcp获取的动态ip即可,或者自己手写一个网段都行(请根据自己的网络环境设置)。
下面开始配置控制节点的neutron
,编辑文件/etc/neutron/plugins/ml2/ml2_conf.ini
,修改配置如下
# 修改
flat_networks = provider
# 为
flat_networks = provider,net_vmnet1
此时去所有的网络计算节点/etc/neutron/plugins/ml2/linuxbridge_agent.ini
,修改配置如下
# linux_bridge 段下
physical_interface_mappings = provider:ens33
# 修改为
physical_interface_mappings = provider:ens33,net_vmnet1:ens36
修改好之后在网络控制节点执行下面命令
systemctl restart neutron-server neutron-dhcp-agent neutron-metadata-agent neutron-linuxbridge-agent
在网络的计算节点执行下面命令
systemctl restart neutron-linuxbridge-agent
此时flat网络已经配置好了,下面开始创建网络,创建网络的形式可以和最开始搭建集群的时候采用的命令形式,这里采用仪表的形式去创建网络,在仪表的管理员-》网络-》网络
中创建网络
此时再去创建实例测试一下是否连通
发现是可以的,这就说明已经通了。
VXLAN网络与VPC
VXLAN是VLAN的扩展,VLAN与VXLAN的区别这里不多描述,FLAT是没有套任何一层网络与外部网络直连,VXLAN是三层网络,在openstack中相当于多套了一层可以实现网络的隔离更加安全。在配置之前需要继续添加一个网卡,这里采用lan区段的方式增加,所有网络计算节点都要添加,如下
此时机器中多了一个ens37的网卡,下面开始配置ens37的网络配置,如下
[root@controller ~]# cd /etc/sysconfig/network-scripts/
[root@controller network-scripts]# cp ifcfg-ens36 ifcfg-ens37
# 修改成下面内容
TYPE=Ethernet
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=172.16.0.11
网卡都添加好后开始配置vxlan,具体可以参考文档
- https://docs.openstack.org/neutron/stein/install/
- https://docs.openstack.org/neutron/stein/install/install-rdo.html
- https://docs.openstack.org/neutron/stein/install/controller-install-rdo.html
- https://docs.openstack.org/neutron/stein/install/controller-install-option2-rdo.html
https://docs.openstack.org/neutron/stein/install/compute-install-rdo.html
使用vxlan之前需要把供应商网络提前装好这个要注意,下面开始安装软件包,不出意外这些应该是安装好的。下面是在neutron控制网络节点配置的yum install openstack-neutron openstack-neutron-ml2 \ openstack-neutron-linuxbridge ebtables
修改neutron配置,编辑
/etc/neutron/neutron.conf
文件,主要修改内容如下# DEFAULT 段 # 修改 service_plugins = # 为 service_plugins = router # 增加 allow_overlapping_ips = true # 完整的 DEFAULT 段 应该是这个样子 [DEFAULT] notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true transport_url = rabbit://openstack:RABBIT_PASS@controller core_plugin = ml2 auth_strategy = keystone service_plugins = router allow_overlapping_ips = true
修改ml2的配置,修改
/etc/neutron/plugins/ml2/ml2_conf.ini
文件,主要修改内容如下# ml2 段 # 修改 type_drivers = flat,vlan tenant_network_types = mechanism_drivers = linuxbridge # 为 type_drivers = flat,vlan,vxlan tenant_network_types = vxlan mechanism_drivers = linuxbridge,l2population # 增加一个新配置段 ml2_type_vxlan 并增加下面内容 # 这个配置是vxlan的范围,官网文档是1:1000,我这里写的是10000,建议大点 [ml2_type_vxlan] vni_ranges = 1:10000
下面修改
linuxbridge
的配置,修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件,主要内容如下# vxlan段,默认就一条禁用的配置,修改成下面内容 [vxlan] enable_vxlan = true local_ip = 172.16.0.11 l2_population = true
需要注意的是local_ip这个参数,这个参数需要写新增网卡的ip
下面开始编辑l3 agent
的配置,配置文件/etc/neutron/l3_agent.ini
,下面开始备份cp /etc/neutron/l3_agent.ini{,.bak} egrep -v "^$|^#" /etc/neutron/l3_agent.ini.bak > /etc/neutron/l3_agent.ini
编辑,主要内容如下
[DEFAULT] interface_driver = linuxbridge
重启服务
systemctl restart neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent systemctl enable --now neutron-l3-agent.service
下面开始配置neutron计算网络节点,计算网络节点比较简单只需要修改
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件即可,主要修改内容为# 修改 [vxlan] enable_vxlan = false # 为 [vxlan] enable_vxlan = true local_ip = 172.16.0.31 l2_population = true
重启服务
systemctl restart neutron-linuxbridge-agent
配置好网络组件后还需要去配置仪表盘组件的配置,编辑
/etc/openstack-dashboard/local_settings
文件,主要修改内容如下OPENSTACK_NEUTRON_NETWORK = { 'enable_router': True, ...... }
把仪表的路由器功能打开。
全部配置好后需要在仪表中的管理员-》网络-》网络
中配置,在创建自助网络的时候就必须有一个外部网络,在之前的provider是已经创建好了,如果没有则需要再创建一个外部网络
这个网络就是出口,后续创建的所有网络都可以通过他来做nat上网,在项目-》网络-》网络
中创建一个VPC网络,具体操作如下
子网的创建,网络地址可以随便写,网关要写网络中的第一位可用地址。创建好子网之后再去创建一个路由与外部网络绑定,在项目-》网络-》路由
中新建一个路由,可参考下图
建好点进去增加一个接口
此时,通过test网络创建的主机都可以通过这个路由上网,尝试结果如下
因为是内部的VPC网络所以外部无法直接访问,可以通过关联浮动ip的形式来实现外部访问,在管理员-》网络-》浮动IP-》分配IP给项目
中创建一个浮动ip
资源池就是外部网络,浮动ip地址就是外部的地址,不写就是dhcp,再通过项目-》计算-》实例
绑定浮动ip
即可通过分配的10.0.0.202去访问主机。
通信过程
参考: https://www.bilibili.com/video/BV1Mm411U7jM
总结
OpenStack会为每个租户创建一个Vxlan设备进行通信
OpenStack中虚拟路由器vRouter是通过网络名称空间和iptables来实现的
计算节点上虚拟机想要访问外部,需要通过vxlan隧道网络把流量走到网络的控制节点,通过网络控制节点来访问internet。所以如果网络控制节点宕机的话,计算节点上的虚拟机是无法访问外部的。
供应商网络结构
供应商网络的结构图如下,不需要嵌套路由而是在网络名称空间中在物理接口桥接出来一个,然后通过内部dhcp分配ip,直接与外部通信
VXLAN网络结构
vxlan网络结构图如下,每套路由的情况是这样的,如果是套了一层路由,并且出口是物理交换机GW的话,则下图的控制节点的172.16.2.254-qrouter最流量会被发到192.168.137.169-qrouter来处理,浮动ip也是要先经过物理接口ens33的。