之前发过一篇文章https://blog.csdn.net/qhqh310/article/details/133834236?spm=1001.2014.3001.5502谈了openstack中的self-service和provider网络。这段时间有了些新的理解,就再补充说一下。
一、前面提到过self-service网络是完全虚拟的网络,这个说法不完全准确。默认情况下self-service自服务网络也叫租户网络,默认是使用VXLAN技术实现的。但也可以使用VLAN实现,这时self-service就不是一个虚拟网络了,而是一个实打实的物理网络。实现方法如下:
在控制节点:/etc/neutron/plugins/ml2/ml2_conf.ini
ml2
type_drivers = vlan
tenant_network_types = vlan
ml2_type_vlan
指定可用于租户网络创建的物理网络及其 VLAN 范围
network_vlan_ranges = physnet1:100:400
在计算节点和网络节点上配置映射
/etc/neutron/plugins/ml2/openvswitch_agent.ini
ovs
映射到物理网络的桥
bridge_mappings = physnet1:br-eth1
其中br-eth1是一个ovs网桥,这个网桥连接到物理网口eth1上。eth1是用来连接内网的。
此时如果租户再创建一个自服务网络,则是使用了VLAN技术,这个网络就是一个实打实的物理网络。每个租户网络都有一个唯一的VLAN ID。由控制节点在100:400之间分配。当然创建的租户网络受限于物理网络的VLAN范围。这个实验受条件所限,我没有做,但应该是可以的。
二、说到这里,我们可不可以让默认的租户网络保持原来的VXLAN,但同时又为租户提供一个VLAN或flat类型的网络呢?答案是肯定的。
先来看看平坦类型的网络,即flat network。这种网络我们可以简单理解为计算节点有额外的一张物理网卡直接接到一台交换机上,而这台交换机没有配置VLAN。在本实验中每台计算节点的ens36网卡是连接到VMWARE workstation的vnet3这个仅主机网络中的。这里我们保持tenant_network_types = vxlan 不变。
1、在控制节点:/etc/neutron/plugins/ml2/ml2_conf.ini 文件里面新增加一个flat类型的网络
flat_networks=physnet1,localnet #注意physnet1是原来的一个平坦网络,用于外部网络,localnet是新增加的一个平坦网络,主要用于用户内部网络
重启服务
systemctl restart neutron-server.service
systemctl restart neutron-metadata-agent.service
2、在计算节点上配置映射
/etc/neutron/plugins/ml2/openvswitch_agent.ini
在ovs小节增加
bridge_mappings = localnet:br-local
3、在计算节点修改网卡和ovs网桥配置
vim /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE="OVSPort"
DEVICETYPE="ovs"
OVS_BRIDGE="br-local"
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=ens36
DEVICE=ens36
ONBOOT=yes
vim /etc/sysconfig/network-scripts/ifcfg-br-local
TYPE=OVSBridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=br-local
DEVICE=br-local
DEVICETYPE=ovs
ONBOOT=yes
并重启相关服务
systemctl restart network
systemctl restart neutron-openvswitch-agent.service
4、测试步骤
使用管理员创建一个flat网络,物理网络: localnet
创建一个实例,接入该网络。测试能否ping通外网。再创建一个实例看看能否互通。在我这里都是可以正常的。
这里有个问题,我们在创建实例时可以直接把外部网络就是physnet1,分配给租户吗?答案是否定的。因为physnet1关联到了br-ex这个ovs网桥,而br-ex在计算节点并不存在。它只存在于网络节点。所以创建实例的时候会失败,卡在网络分配这个环节。从这里面我们出可以看出外部网络是跟计算节点无关的。创建提供商网络时,如果勾选外部网络则就是在网络节点创建物理网络,否则就是在计算节点创建物理网络。
三、再来看看vlan类型提供商网络provider network实验
在本实验中每台计算节点的ens37网卡是连接到VMWARE workstation的vnet4这个仅主机网络中的。
1、在主控节点
vim ml2_conf.ini
ml2
type_drivers=vxlan,flat,vlan
ml2_type_vlan
network_vlan_ranges =vlan_net:100:3000
2、在计算节点
vim /etc/neutron/plugins/ml2/openvswitch_agent.ini
在ovs小节增加
bridge_mappings = localnet:br-local,vlan_net:br-vlan
3、在所有计算节点
增加桥配置
vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE="OVSPort"
DEVICETYPE="ovs"
OVS_BRIDGE="br-vlan"
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=ens37
DEVICE=ens37
ONBOOT=yes
vim /etc/sysconfig/network-scripts/ifcfg-br-vlan
TYPE=OVSBridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=br-vlan
DEVICE=br-vlan
DEVICETYPE=ovs
ONBOOT=yes
重启相关服务
systemctl restart network
设置为trunk模式
ovs-vsctl set port ens37 vlan-mode=trunk
systemctl restart openvswitch.service
systemctl restart neutron-openvswitch-agent.service
4、测试步骤
创建一个vlan类型的提供商网络,物理网络: vlan_net VLAN为100,同时创建子网:172.16.100.0/24。禁用网关,也不启用dhcp,因为这些实际上都由物理网络提供。
创建两个实例,分别接入该网络。两个实例分别位于computer01和computer02上。
测试能否ping通网关,及彼此能否ping通
手工配置同网段IP之后互PING,测试结果,无法彼此PING通:原因是我们的物理网卡实际上是使用vmware workstation模拟的,不支持vlan。可以通过抓包来进行证实
在computer01上的虚拟机执行PING另一台虚拟机的操作,同时执行tcpdump -i ens37 查看抓包情况,发现发出的ARP报文确实带有VLAN ID 100是符合预期的。同时在computer02上抓包,发现也收到了报文,但报文格式是异常的,勉强可以看到部分,但跟原始报文有错位。如果有条件接入真实的物理网络,并且交换机正确配置了VLAN透传,即配置为trunk模式,应该是可以正确互联的。