玩转openstack(八.1)linuxbridge实现neutron网络之local、flat、vlan、dhcp

author author     2023-03-09     291

关键词:

参考技术A Neutron 默认使用 ML2 作为 core plugin,配置文件 /etc/neutron/neutron.conf 中 core_plugin

计算节点和控制节点都需要在各自的 neutron.conf 中配置 core_plugin

然后配置 ML2 的配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini 中 mechanism_drivers

mechanism_drivers 可以同时指定多个。这里只指定了一个。

查看 linuxbridge 进程

控制节点:

计算节点:

在 Linux Bridge 环境中,一个数据包从 Instance 发送到物理网卡会经过下面几个类型的设备:

对于每个 local network,ML2 linux-bridge 会创建一个 bridge,Instance 的 tap 设备会连接到 bridge。位于同一个 local network 的 Instance 会连接到相同的 bridge,这样 Instance 之间就可以通讯了。

因为 local network 没有与物理网卡相连,所以 Instance 无法与宿主机之外的网络通信。

同时因为每个 local network 有自己的 bridge,bridge 之间是没有连通的,所以两个 local network 之间是不通的。

ML2 配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini

type_drivers ML2 加载网络类型。
tenant_network_types 普通用户在自己的 Tenant(Project)中创建网络时,默认创建哪种 type 的网络。
tenant_network_types = vlan, local 意思是当没有 vlan 可创建时,使用 local。

检测 Neutron Agent 是否正常 管理员 --> 系统 --> 系统信息 --> 网络代理

从用户管理创建网络

创建网络 项目 --> 网络 --> 网络

填写网络名称

填写子网信息。 网关 IP 可以不用填写。默认为子网地址的第一个 IP。即:172.16.10.1

添加子网 IP 范围。

点击网络名称,进去相信信息,可以看到子网和端口信息等。

可以看到在端口中已经创建了一个 port,名为 “(c45b69e6-04ba)”,IP 为 172.16.10.2。连接设备为 "network:dhcp"。

打开控制节点终端,使用 brctl show 查看 linux bridge 的状态。

可以看到 bridge 设备 brqd2fd4378-9e 和 tap 设备 tapc45b69e6-04

创建 Instance 并选择刚刚创建的网络。

创建 Instance 成功后可以发现已经分配 IP 地址。

在底层中 Neutron 会在 subnet 中创建一个 port,分配 IP 和 MAC 地址,并将 port 分配给 test。如下图

点进去可以看到详情

在宿主机上执行 brctl show 可以查看 bridge 的配置。

可以看到 bridge brqd2fd4378-9e 上连接了一个新的 tap 设备。
查看 Instance 信息。使用 virsh list 查看 Instance 运行中的列表。
使用 virsh edit 1 查看配置信息。

配置信息省略很多。重要的放在上面。
<mac address='fa:16:3e:19:e1:57'/> 是 Instance 网卡的 MAC 地址
<target dev='tapb337d11f-54'/> 是 Instance 虚拟网卡信息

ping test1 的 IP 地址发现是可以 ping 通。

查看 brctl show

发现 brqd2fd4378-9e 中又计入进来一个 VIF,因为两个 VIF 挂载在同一个 Linux Bridge 上,所以可以通讯。

结构如下:

如果新分的 Instance 在计算节点中。不在控制节点。他们之间将不在互通。
因为 DHCP agent 在控制节点上运行,test2 在计算节点的 local 网络上,两者位于不同物理节点。由于 local 网络的流量只能局限在本节点之内,发送的请求无法到达计算节点。

上图 物理网卡 eth1 桥接到 brqXXXX,为 Instance 提供 flat 网络。

下图 创建多个 flat Network,就要准备多个物理机网卡。

在 /etc/neutron/plugins/ml2/ml2.conf.ini 配置文件中,修改 tenant_network_types 参数为 flat

:这里是指定普通用户使用 flat。因为 flat 网络与物理网卡一一对应。一般情况下租户网络不采用 flat。

flat_networks 定义一个 flat 网络,label 为 “default”

通过 physical_interface_mappings 指名 default 对应的物理网卡为 ens35

例如:对于 label 为 “default” 的 flat network,节点 A 可能使用 ens35,配置为:

而 B 节点则可以使用 ens33,配置为:

创建 flat 网络

绑定子网

查看 控制节点网络状态

Neutron 自动新建了 flat_net 对应的网桥 brq9e3013c8-93,以及 dhcp 的 tap 设备 tap50802894-1a。
此时 tap50802894-1a 和物理网卡 ens35 都已经连接到网桥 brq9e3013c8-93 上。

可以看到 Instance 的 tap 设备 tapc1241c3f-cb 已经连接到网桥

配置文件 /etc/neutron/dhcp_agent.ini 中的 dhcp_driver 和 interface_driver

dnsmasq 是一个提供 DHCP 和 DNS 服务的开源软件。
在实现环境中使用 ps 命令可以查看到 dnsmasq 进程。

DHCP agent 会为每个 network 创建一个目录 /opt/stack/data/neutron/dhcp/xxxx 用于存放该 network 的 dnsmasq 配置文件。

在二层网络上,VLAN 可以将一个交换机分割成几个独立的虚拟交换机。
类似,在三层网络上,Linux Network Namespace 可以将一个物理三层网络分割成几个独立的虚拟三层网络。
每个 namespace 都有自己独立的网络栈,包括 route table,firewall rule,network interface device等

Neutron 通过 dnsmasq 为每个 Network 提供单独的 DHCP 和路由服务。

使用 ip 查看所有 namespcae

使用 neutron 查看 net-list

查看某个 namespace 的详细配置

3 个 Instance 通过 tap 设备连接到名为 “vrqXXXX” 的 Linux Bridge。
在物理网卡 eth1 上创建 eth1.100 的 valn interface,eth1.100 连接到 brqXXXX。
这样,Instance 通过 eth1.100 发送到 eth1 的数据包就会打上 vlan100 的 tag。

如果在创建个 network vlan101,eth1 上就会相应的创建多个 vlan interface eht1.101 并连接新的 Linux Bridge “brqYYYY”。

配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini 中设置 tenant_network_types 的值为 vlan

配置 vlan 的范围

意思是:配置定义了 lable 为 “default” 的 valn network,valn id 的范围是 3001~4000。这里配置的是普通用户使用的范围。
admin 可以使用 1~4096 的 valn network

再次指定 vlan network 与物理网卡的对应关系

配置子网

查看系统网桥

这里可以看到:
vlan100 对应的网桥为 brq2b85ebb9-a。
vlan interface 是 ens35.100 (我是用的是 Ubuntu 16.04 默认网卡名 ens 开始的。)
DHCP 的 tap 设备是 tapf85d61d8-c3。

在 计算节点查看 网桥信息

可以发现创建的 Instance 已经连接到 vlan100 对应的网桥 brq2b85ebb9-a 上。因为计算节点没有 DHCP 服务所以没有相应的 tap 设备。

另外 网桥的名字与控制节点是一样的,都是 brq2b85ebb9-a6,表示是在同一个 network 上。

下图是我创建 VLAN 后 两台 Instance 分别在控制节点和计算机点的网络图

此时两台 Instance 在同一 valn100 下。相互之间是可以 ping 通的。

如果在创建一个 vlan101。如果两台 Instance1 和 Instance2 分别连在 vlan100 和 vlan101。此时两台 Instance 是不能 ping 通的。

如下图两个 vlan

两台 Instance1 和 Instance2 分别连在 vlan100 和 vlan101。此时两台 Instance 是不能 ping 通的。

因为 vlan 在二层是隔离的。如果想要互通,只能在三层通过路由转发。

制作openstackwindows镜像-每天5分钟玩转openstack(152)

这是OpenStack实施经验分享系列的第2篇。OpenStack通过Glance镜像部署instance,上一节我们介绍了linux镜像制作方法,windows镜像与linux有很大不同,今天我们以windows2008为例详细讨论。镜像制作步骤如下:1. 创建并运行windows2008 K... 查看详情

制作openstackwindows镜像-每天5分钟玩转openstack(152)

这是OpenStack实施经验分享系列的第2篇。OpenStack通过Glance镜像部署instance,上一节我们介绍了linux镜像制作方法,windows镜像与linux有很大不同,今天我们以windows2008为例详细讨论。镜像制作步骤如下:1. 创建并运行windows2008 K... 查看详情

实践neutronfwaas-每天5分钟玩转openstack(118)

前面我们学习了FWaaS的理论知识,今天将通过实验来学习FWaaS。在我们的实验环境中,有两个instance:cirros-vm1(172.16.100.3)和cirros-vm2(172.16.101.3)。cirros-vm1和cirros-vm2分别位于网络vlan100和vlan101。vlan100和vlan101之间由虚拟路由器test... 查看详情

部署instance到vxlan-每天5分钟玩转openstack(112)

上一节我们创建了vxlan100_net,今天将部署instance并分析网络的连通性。launch新的instance“cirros-vm1”,网络选择vxlan100。cirros-vm1分配到的IP为172.16.100.3。cirros-vm1被schedule到控制节点,对应的tap设备为tap099caa87-cd,并且连接到bridgebrq176... 查看详情

每天5分钟玩转openstack

最近在学习OpenStack的相关知识,一直苦于OpenStack的体系庞大以及复杂程度,学习没有进度,停滞不前。偶然机会在51CTO上发现了一个热点的专题关于OpenStack的,题目叫做《每天5分钟玩转OpenStack》,抱着试试的态度看了几篇,被文... 查看详情

routing功能概述-每天5分钟玩转openstack(98)

路由服务(Routing)提供跨subnet互联互通功能。例如前面我们搭建了实验环境:cirros-vm1   172.16.100.3    vlan100cirros-vm3   172.16.101.3    vlan101这两个instance要通信必 查看详情

将instance连接到vlan100-每天5分钟玩转openstack(95)

上一节我们创建了vlan100,今天将部署两个instance到vlan并验证其连通性。同时我们也将讨论底层网络结构的变化。launch新的instance“cirros-vm1”,网络选择vlan100。cirros-vm1分配到的IP为172.16.100.3。cirros-vm1被schedule到控制节点,对应的t... 查看详情

如何更新openstack组件?-每天5分钟玩转openstack(161)

这是OpenStack实施经验分享系列的第11篇。本节教大家更新OpenStack组件的方法。请注意,是更新(Update)而不是升级(Upgrade)。更新是给组件打补丁,版本不变;而升级是刷新版本,比如从kilo升级到liberty。更新真的有必要吗?对... 查看详情

将instance连接到vlan100-每天5分钟玩转openstack(95)

上一节我们创建了vlan100,今天将部署两个instance到vlan并验证其连通性。同时我们也将讨论底层网络结构的变化。launch新的instance“cirros-vm1”,网络选择vlan100。cirros-vm1分配到的IP为172.16.100.3。cirros-vm1被schedule到控制节点,... 查看详情

理解virbr0-每天5分钟玩转openstack(11)

virbr0是KVM默认创建的一个Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能。virbr0默认分配了一个IP192.168.122.1,并为连接其上的其他虚拟网卡提供DHCP服务。下面我们演示如何使用virbr0。在virt-manager打开VM1的配置界面... 查看详情

创建floatingip-每天5分钟玩转openstack(106)

先复习一下前面我们讨论的知识。当租户网络连接到Neutronrouter,通常将router作为默认网关。当router接收到instance的数据包,并将其转发到外网时:1.router会修改包的源地址为自己的外网地址,这样确保数据包转发到外网,并能够从... 查看详情

分析ovs如何实现vlan隔离-每天5分钟玩转openstack(140)

上一节我们完成了OVSvlan环境的搭建,当前拓扑结构如下:cirros-vm1位于控制节点,属于vlan100。cirros-vm2位于计算节点,属于vlan100。cirros-vm3位于计算节点,属于vlan101。今天详细分析OVS如何实现vlan100和vlan101的隔离。与LinuxBridgedriver... 查看详情

学习openstack的方法论-每天5分钟玩转openstack(150)

作为OpenStack的核心教程,我们已经到了最后总结的部分。OpenStack目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder和Neutron。请大家看下图:此图截自 https://www.openstack.org/software/project-n... 查看详情

floatingip原理分析-每天5分钟玩转openstack(107)

上一节我们通过WebUI创建为cirros-vm3 分配了浮动IP,今天将分析其工作原理。首先查看router的interface配置:可以看到,floatingIP已经配置到router的外网interfaceqg-b8b32a88-03上。查看router的NAT规则:iptables增加了两条处理floatingIP的规... 查看详情

部署instance到vxlan-每天5分钟玩转openstack(112)

650)this.width=650;"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20161113-1479026488351033984.jpg"/>上一节我们创建了vxlan100_net,今天将部署instance并分析网络的连通性。launch新的instance“cirros-vm1”,网络选择vxla 查看详情

创建第一个localnetwork(i)-每天5分钟玩转openstack(80)

在ML2配置文件中enablelocalnetwork后,本节将开始创建第一个localnetwork。 我们将通过WebGUI创建第一个localnetwork。首先确保各个节点上的neutornagent状态正常。GUI菜单为Admin->System->SystemInfomation->NeutronAgentsGUI中有两个地方可以... 查看详情

创建pool&vip-每天5分钟玩转openstack(122)

上节完成了LBaaS配置,今天我们开始实现如下LBaaS环境。环境描述如下:1.创建一个Pool“webservers”。2.两个poolmember“WEB1”和“WEB2”,均为运行Ubuntucloudimage的instance。3.loadbalancerVIP与floatingIP关联。4.位于外网的cli... 查看详情

云计算与openstack-每天5分钟玩转openstack(14)

“云计算”算是近年来最热的词了。现在IT行业见面不说这三个字您都不好意思跟人家打招呼。对于云计算,学术界有各种定义,大家有兴趣可以百度一下。CloudMan这里主要想从技术的角度谈谈对云计算的理解。基本概念所... 查看详情