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的。

最后修改:2025 年 01 月 20 日
如果觉得我的文章对你有用,请随意赞赏