OpenStack(Train版)-部署Neutron(一)
  kCmFobNLwURY 2023年11月13日 15 0

七、Neutron

7.1、neutron详解

7.1.1、neutron

neutron主要就是用于网络虚拟化,之前将nova的时候说过,网络部分没有写,因为openstack中的网络属于一个大部分,所以今天咱们就来看看neutron到底是怎么样实现网络虚拟化的。

7.1.2、Neutron包含的组件

neutron-server

neutron-plugin

neutron-agent

7.1.3、neutron各组件详解

7.1.3.1、neutron-server

neutron-server可以理解为类似于nova-api那样的一个组件,一个专门用来接收neutron REST API调用的服务器。负责将不同的rest api发送到不同的neutron-plugin。

7.1.3.2、neutron-plugin

neutron-plugin可以理解为不同网络功能实现的入口,现在大部分都是软件定义网络,各个厂商都开发自己的plugin(插件)。neutron-plugin接收netron-server发过来的rest api,向neutron database完成一些信息注册(比如用户要建端口)。然后将具体要执行的业务操作和参数通知给自身对应的neutron-agent。

neutron-plugin分为core-plugin个service-plugin两类(我们主要研究core-pulgin);Core-plugin,在neutron中有一个Core-plugin叫做ML2(Modular Layer 2),就是负责管理L2的网络连接(二层交换机概念)。ML2中主要包括network,subent,port三类核心资源,对三类资源进行操作的REST API被neutron-server看做Core API 由neutron原生支持,其中

注意**:学习openstack重中之重network的类型包括:Flat,Vlan,Vxlan,GRE,还有一个local 五种网络模式指的是二层网络。

Service-plugin,即为除Core-plugin以外的其它的plugin,包括L3router,firewall,loadblancer,vpn,metering等等,主要实现L3-L7的网络服务。

Neutron对Quantum(neutron的原名)的插件机制进行了优化,将各个厂商L2插件中独立的数据库实现提取出来,作为公共的ML2插件存储租户的业务需求,使得厂商可以专注于L2设备驱动的实现,而ML2作为总控可以协调多厂商L2设备共同运行”。在Quantum中,厂家都是开发各自的Service-plugin,不能兼容而且开发重复度很高,于是在Neutron中就设计了ML2机制,使得各厂家的L2插件完全变成了可插拔的,方便了L2中network资源扩展与使用。ML2可以支持在一个环境中同时运行五种模式(注意,以前厂商开发的L2 plugin跟ML2都存在于neutron/plugins目录下,而可插拔的ML2设备驱动则存在于neutron/plugins/ml2/drivers目录下)。

7.1.3.3、neutron-agent

neutron-agent可以直观的理解为neutron-plugin在设备上的代理,接受相应的neutron-plugin通知的业务操作和参数,并转换为具体的设备级操作,以指导设备的动作。当本地设备发生问题时,neutron-agent会将情况通知给neutron-plugin(说白了就是neutron-server就是与各个组件交互的,接收请求,neutron-plugin是操作数据库的,neutron-agent就是具体干活的)。

7.1.3.4、neutron database

neutron database就是数据库,一些业务相关的参数都存在这里。

7.1.3.5、总结

一般而言,neutron-server和各个neutron-plugin部署在控制节点或者网络节点上,而neutron-agent则部署在网络节点上和计算节点上。我们先来分析控制端neutron-server和neutron-plugin的工作,然后在分开分析设备端neutron-agent的工作。

7.1.4、网络虚拟化

实际数据中心网络可分为三层:

openstack Cloud network:openstack所管理的网络。

intranet(external network):数据中心所管理的网络。

以及真正的外部网络internet,由各大运行商所管理的公共网络。

openstack的网络可以是:

1.管理网络:包含api网络(public,admin,和internal)各个组件之间的协同工作。

2.数据网络

3.存储网络

4.IDRAC网络

5.PXE网络

总结:openstack –> external –> (NAT) –>internet


7.1.5、neutron网络虚拟化简介

7.1.5.1、Neutron 提供的网络虚拟化能力

openstack中neutron组件负责物理网络环境提供满足多租户要求的虚拟化网络和服务。

Neutron 提供的网络虚拟化能力包括:

1.二层到七层网络的虚拟化:L2(virtual switch)、L3(virtual Router 和 LB)、L4-7(virtual Firewall )等。

2.网络连通性:二层网络和三层网络。

3.租户隔离性

4.网络安全性

5.网络扩展性

6.REST API

7.更高级的服务,包括 LBaaS,FWaaS,VPNaaS 等。

7.1.5.2、二层网络虚拟化

7.1.5.2.1、按照用户的权限创建网络,neutron L2 network可以分为:

7.1.5.2.1.1、Provider Netwrok

Provider network:管理员创建的跟物理网络直接绑定到一块,即虚拟机用的网络就是物理网络。

provider network是有Openstack管理员创建的,直接对应于数据中的一块物理网段,这种网络有三个和物理网络有关的属性:

provider.network_type(网络类型:vxlan,gre,valn,flat,local)

provider.segmentation_id(网段ID:比如vlan的802.1q tag,gre的tunnel ID,VXLAN的VNI)

provider.physical_network(物理网络的逻辑名称:比如physnet1,ph-etg1)

这种网络是可以在多个租户之间共享的。这种网络通过计算和网络节点上指定的 bridge 直接接入物理网络,所以默认的情况下它们是可以路由的,因此也不需要接入 Neutron Virtual Router,也不需要使用 L3 agent。使用这种网络,必须预先在各计算和网络节点上配置指定的网桥。

创建 provider network:

vlan 类型的:

neutron net-create NAME –provider:network_type vlan –provider:physical_network PHYS_NET_NAME –provider:segmentation_id VID

gre 类型的:

neutron net-create NAME –provider:network_type gre –provider:segmentation_id TUNNEL_ID

vxlan 类型的:

neutron net-create NAME –provider:network_type vxlan –provider:segmentation_id TUNNEL_ID

7.1.5.2.1.2、Tenant Netwrok

Tenant network:租户普通用户创建的网络。物理网络对创建者透明,用户不需要考虑底层。

Tenant network 是由 tenant 的普通用户创建的网络。默认情况下,这类用户不能创建共享的 tenant network(因此 Nuetron Server 的policy 设置了”create_network:shared”: “rule:admin_only”。),因此这种网络是完全隔离的,也不可以被别的 tenant 共享。

Tenant network 也有 local,flat,vlan,gre 和 vxlan 等类型。但是,tenant 普通用户创建的 Flat 和 VLAN tenant network 实际上还是 Provider network,所以真正有意义的是 GRE 和 VXLAN 类型,这种网络和物理网络没有绑定关系。

1.管理员在 neutron 配置文件中配置 tenant_network_types,其值可以设为一个所支持的网络类型列表,比如 “vlan,gre,vxlan”。其默认值为 “local“,因此需要改变。该值表明该 OpenStack 云中允许被创建的 tenant network 类型。

2.运行命令 neutron net-create

3.neutron server 逐一根据该配置项尝试创建 network segment,成功则立即返回。

创建每种网络时,使用不同的配置项:

网络类型

配置项

说明

实例 

vlan

network_vlan_ranges = physnet1:1000:2999,physnet2

指定所使用的物理网络的标签和支持的 VLAN ID 范围

  network_vlan_ranges = default:2000:3999 integration_bridge = br-int bridge_mappings = default:br-eth1

flat

flat_networks = physnet1,physnet2

指定所使用的物理网络的 label

gre

tunnel_id_ranges =a list of :

 一组可用的 GRE ID 区间列表;建立 GRE Tunnel 使用的 IP 地址

  enable_tunneling = true tunnel_id_ranges = 1:1000 integration_bridge = br-int tunnel_bridge = br-tun local_ip = 10.0.0.3

 vxlan

  vni_ranges = a list of : vxlan_group = 239.1.1.1

 一组可用的 VNI 区间列表;建立 VxLAN Tunnel 使用的 IP 地址 VXLAN 组播组

  enable_tunneling = true tunnel_type = vxlan integration_bridge = br-int tunnel_bridge = br-tun local_ip = 10.0.0.3 tunnel_types = vxlan

所有  

integration_bridge bridge_mappings = default:br-eth1 tunnel_bridge enable_tunneling = False

指定intergration bridge 的名称,默认为 br-int;指定物理网络label 和服务器上的 bridge 对应关系;指定 turnnel bridge 的名称,默认为 br-tun 是否使用 tunneling 类型的网络,包括 GRE 和 VxLAN。使用的话,ML2 agent 会在每个计算和网络节点创建名称为 tunnel_bridge 的 tunnel bridge。

7.1.5.2.2、根据网络类型,neutron L2 network可以分为

flat network:基于不实用vlan的物理网络实现的虚拟网络。所有网络都在一个网络中。不推荐使用,用不到生产环境中。

local network:一个只允许在本服务器内通信的虚拟网络,所有服务都装在一台机器上 不推荐中。

vlan network:基于物理vlan网络实现的虚拟网络。共享同一个物理网络的多个vlan网络是相互隔离的,并且可以使用重叠IP地址空间。最重要的一点是有效的VLAN ID 范围为1-4095

GRE network:(通过路由封装网络):一个使用GRE封装网络包的虚拟网络,GRE封装的数据包基于IP路由表来进行路由,因此GRE network不和具体的网络网络绑定

VXLAN network:(虚拟可扩展网络)基于vxlan实现虚拟网络。同GRE network一样,vxlan network中IP包的路由也基于IP路由表,也不和具体的物理网络绑定。

7.1.5.3、端口

一个port代表虚拟网络交换机(logical network switch)上的一个虚拟交换机端口(virtual switch port)。虚拟机的网卡(VIF:Virtual Interface)会被连接到port上。当虚拟机的VIF连接到port后,vNIC就会拥有MAC地址和IP地址。

7.1.5.4、虚拟交换机

Neutron默认采用开源的Open vSwitch作为其虚拟交换机,简称ovs,同时还支持linux bridge

7.1.5.5、虚拟路由器

一个Virtual router 提供不同网段之间的IP包路由功能,由Neutron L3 agent负责管理。

一个 VR 只属于创建它的租户,只用于该租户的子网之间和子网与外网的路由。

同一网络内的若干子网可以挂在一个 VR 上。

同一租户的不同网络的没有 IP 地址重叠的子网可以挂在一个 VR 上。

不同租户之间的内网之间是不能使用 VR 的。

同一租户的不同网络内的有 IP 地址重叠的两个子网不能使用同一个 VR(添加子网到 VR 时会报错)。

在网络节点上,一个 VR 运行在一个 Network namespace 内,该namespace 的名称包含该 VR 的 UUID。

7.1.6、大二层概念

7.1.6.1、大二层概念

二层是指数据链路层,计算机与计算机之间的通信采用的是基于以太网协议广播的方式,而大二层的概念指的是openstack中所有的vm都处于一个大的二层网络中,大二层也可以被想象成一堆二层交换机串联在一起。这样做的好处就是为了满足vm可以迁移到全网任意位置,二层无需网关,无需路由,因而资源调用更加灵活,反正如果不在一个大二层中,那么vm迁移到另外一个位置(另外的一个网络中)。则需我们人为的指定网关,添加路由策略,然而这还只是针对一台vm的迁移,要满足所有的vm的动态迁移,再去指定网关,路由等这样就不现实了。

关于网络的基础知识请参考这篇篇博客:http://www.cnblogs.com/linhaifeng/articles/5937962.html

7.1.6.2、物理的二层与虚拟的二层(vlan模式)

物理的二层指的是:物理网络是二层网络,基于以太网协议的广播方式进行通信。

虚拟的二层指的是:neutron实现的虚拟的网络也是二层网络(openstack的vm机所用的网络必须是大二层),也是基于以太网协议的广播方式进行通信,但毫无疑问的是该虚拟网络是依赖于物理的二层网络。

物理二层+虚拟二层的典型代表:vlan网络模式。

7.1.6.3、物理的三层与虚拟的二层(GRE模式与VXLAN模式)

物理三层指的是:物理网络是三层网络,基于IP路由的方式进行通信。

虚拟的二层指的是:neutron实现的虚拟网络仍然是二层网络(openstack的vm机所用的网络必须是大二层),仍然是基于以太网的广播方式进行通信,但毫无疑问的是该虚拟机网络是依赖于物理的三层网络,这点有点类似于VPN的概念,根本原理就是将私网的包封装起来,最终打上隧道的ip地址传输。

物理三层+虚拟二层的典型代表:GRE模式与vxlan模式。

7.1.7、Neutron租户网络的隔离性

Neutron实现了不同层次的租户网络隔离性:

租户之间的网络是三层隔离的,联通VR(Virtual Router)做路由都不行,实在要连通的话,需要走物理网络。

一个租户内的不同网络之间二层是隔离的,需要通过VR做三层连接。

一个网络内的不同子网也是二层隔离的,需要通过VR做三层连接。

Neutron对每个租户网络(Tenant network)都分配一个segmentation_id,其特点包括:

每个Tenant network都有一个这种ID。

每个租户网络的ID在全部的租户范围内都是唯一的。

一个ID代表一个广播域。

一个ID使得同一网络内的两个虚拟机之间好像建立了一个虚拟通道(tunnel)一样。

不同ID的网络tunnel之间是相互隔离的。

根据物理实现不同,该ID被实现为几种不同的形式:

VLAN ID

GRE Tunnel ID

VXLAN VNI

OpenStack(Train版)-部署Neutron(一)_虚拟网络

原图链接:https://pinrojas.com/2014/07/29/theres-real-magic-behind-openstack-neutron/

1.计算节点的 br-int 上,neutron 为每个虚机连接 OVS 的 access port 分配了内部的 VLAN Tag。这种 tag 限制了网络流量只能在 tenant network 之内。

2.计算节点的 br-tun 上,neutron 将内部的 VLAN Tag 转化为 GRE Tunnel ID,使得不同 network 的流量走不同的 tunnel。

3.网络节点的 br-tun 上,neutron 将 GRE Tunnel ID 转发了一一对应的 内部 VLAN Tag,使得网络流被不同的服务处理。

4.网络节点的 br-int 上连接的 DHCP 和 L3 agent 使用 Linux network namespace 进行隔离。

7.1.8、Neutron租户网络的安全性(security)

除了租户隔离以外

neutron还提供数据网络与外部网络的隔离性,默认情况下,所有虚拟机通过外网的流量全部走网络节点的L3 agent。在这里,内部的固定IP被转化为外部的浮动IP地址。这种做法一方面保证了网络包能够回来,另一方面也隐藏了内部的IP地址。

neutron还是用Linux iptables特性,实现其Security Group特性,从而保证访问虚机的安全性。

neutron利用网络控制节点上的network namesapce种的iptables,实现了进出租户网络的网络报防火墙,从而保证了进出租户网络的安全性。

7.1.9、虚拟机出网经过图解

OpenStack(Train版)-部署Neutron(一)_虚拟网络_02

7.2、部署Neutron(provider network和Self-service networks选其一进行部署)

7.2.1、部署网络模式选择(provider模式和self-service模式)

7.2.1.1、openstack的provider模式和self-service模式的理解

openstack中存在两种网络方案,一种是provider模式,一种是self-service模式。其实就是我们经常所说的Vxlan版本和vlan版本。provider模式提供二层网络,self-service模式提供3层网络。

7.2.1.2、根据官网组件部署图示理解

OpenStack(Train版)-部署Neutron(一)_ide_03


OpenStack(Train版)-部署Neutron(一)_虚拟网络_04

看过两张图,可以发现,self-service模式主要是在控制节点(其实也就是之前版本的网络节点,新的版本是把网络节点和控制节点部署在一起了),多了一个 L3 agent。顾名思义,也就是self-service的三层路由服务由openstack提供,而provider的三层服务是由物理交换机提供。

7.2.1.3、进一步了解provider模式和self-service模式

7.2.1.3.1、provider模式

provider network又称为运营商网络,self-service network又称为租户网络。

对于neutron而言,这种网络类型是“没有”三层路由功能的,或者说没有自主的路由功能,他需要借助外部的网络,才能完成不同网络之间的路由。也就是说他的路由器或者三层网络服务是由openstack 之外的力量提供,因此被称为provider。

在ml2的配置文件中,我们可见一斑

/etc/neutron/plugins/ml2/ml2_conf.ini

#下面是把租户的网络配置成vlan模式

[ml2]

mechanism_drivers = ovn

type_drivers = local,flat,vlan,vxlan

tenant_network_types = vlan

extension_drivers = port_security

overlay_ip_version = 4

下面是我们需要配置vlan的信息,在这里我们需要提供我们的provider的名称,这个名字你可以随便起,但是必须和计算节点上的physical_interface_mappings 一 一对应。

[ml2_type_vlan]

network_vlan_ranges = **provider-name**:1001:2000

假如计算节点上的网络服务使用的linuxbridge(对于ovs也一样)

修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]

physical_interface_mappings = **provider-name**:eth0

这里就是把provider映射到具体的物理网卡了,也就是创建的租户的vlan网络就从计算节点的eth0出去,而后进入eth0背后的网络设备,在那里进行路由和交换。

7.2.1.3.2、self-service模式

self-service就是neutron不依赖外部的网络和三层路由,租户自己通过ovs或者Linux bridge创建虚拟的路由来进行交换。self-service也不需要配置provider。配置如下:

/etc/neutron/plugins/ml2/ml2_conf.ini

#下面是把租户的网络配置成vxlan模式

[ml2]

mechanism_drivers = ovn

type_drivers = local,flat,vlan,vxlan

tenant_network_types = vxlan

extension_drivers = port_security

overlay_ip_version = 4

[ml2_type_vxlan]

vni_ranges = 1:1000

7.2.1.4、网络逻辑

下面是两种类型的网络走向,第一个是provider类型,第二个是self-service类型。

可以看到provider是借助外部去完成路由,而self-service是借助网络节点或者说控制节点的虚拟路由器去完成的路由。

OpenStack(Train版)-部署Neutron(一)_ide_05


7.2.2、部署供应商网络provider network

7.2.2.1、部署Neutron控制节点(controller)

7.2.2.1.1、创库授权

create database neutron;

grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'neutron123';

grant all privileges on neutron.* to 'neutron'@'%' identified by 'neutron123';

flush privileges;

7.2.2.1.2、创建neutron用户

openstack user create --domain default --password-prompt neutron

或者

openstack user create --domain default --password neutron 123 neutron

7.2.2.1.3、添加管理员角色给neutron

openstack role add --project service --user neutron admin

7.2.2.1.4、创建neutron服务

openstack service create --name neutron --description "OpenStack Networking" network

7.2.2.1.5、给neutron服务关联endpoint(端点)

openstack endpoint create --region RegionOne network public http://controller1:9696

openstack endpoint create --region RegionOne network internal http://controller1:9696

openstack endpoint create --region RegionOne network admin http://controller1:9696

7.2.2.1.6、安装组件

yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y

7.2.2.1.7、修改配置文件

7.2.2.1.7.1、配置/etc/neutron/neutron.conf

cp -a /etc/neutron/neutron.conf{,.bak}

官网指导方案:

vim /etc/neutron/neutron.conf

[database]

connection = mysql+pymysql://neutron:neutron123@controller1/neutron


[DEFAULT]

core_plugin = ml2

service_plugins =

transport_url = rabbit://openstack:openstack123@controller1

auth_strategy = keystone

notify_nova_on_port_status_changes = true

notify_nova_on_port_data_changes = true


[keystone_authtoken]

www_authenticate_uri = http://controller1:5000

auth_url = http://controller1:5000

memcached_servers = controller1:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = neutron123


[nova] #neutron.conf文件中缺少此部分需要新增

auth_url = http://controller1:5000

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = nova

password = nova123


[oslo_concurrency]

lock_path = /var/lib/neutron/tmp

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

cp -a /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}

官网指导方案:

vim /etc/neutron/plugins/ml2/ml2_conf.ini

# ml2_conf.ini文件中缺少此部分,一下内容全部需要新增

[ml2]

type_drivers = flat,vlan

tenant_network_types =

mechanism_drivers = linuxbridge,l2population

extension_drivers = port_security


[ml2_type_flat]

flat_networks = provider ##这个名字可以自定义,这一步很重要下一面linuxbridge_agent.ini文件中[linux_bridge]模块也会用到这个名字,要保持一致。


[securitygroup]

enable_ipset = true

7.2.2.1.7.3、配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini

cp -a /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}

官网指导方案:

vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

# linuxbridge_agent.ini文件中缺少此部分,一下内容全部需要新增

[linux_bridge]

physical_interface_mappings = provider:eth0


[vxlan]

enable_vxlan = false


[securitygroup]

enable_security_group = true

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

修改内核参数

vim /etc/sysctl.conf

在末尾追加

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

加载模块

modprobe br_netfilter


检查

sysctl -p


7.2.2.1.7.4、配置/etc/neutron/dhcp_agent.ini

cp -a /etc/neutron/dhcp_agent.ini{,.bak}

官网指导方案:

vim /etc/neutron/dhcp_agent.ini

[DEFAULT]

interface_driver = linuxbridge

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

enable_isolated_metadata = true

7.2.2.1.7.5、配置元数据/etc/neutron/metadata_agent.ini

cp -a /etc/neutron/metadata_agent.ini{,.bak}

官网指导方案:

vim /etc/neutron/metadata_agent.ini

[DEFAULT]

nova_metadata_host = controller

metadata_proxy_shared_secret = metadata123 #此密码要谨慎记录,与下一步nova.conf文件中[neutron]模块的metadata_proxy_shared_secret参数值保持一致。

7.2.2.1.7.6、配置控制节点nova.conf

cp -a /etc/nova/nova.conf{,.bak1}

vim etc/nova/nova.conf

[neutron]

auth_url = http://controller1:5000

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = neutron

password = neutron123

service_metadata_proxy = true

metadata_proxy_shared_secret = metadata123

7.2.2.1.8、配置软链接

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

7.2.2.1.9、同步数据库

su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

OpenStack(Train版)-部署Neutron(一)_IP_06

7.2.2.1.10、重启nova-api服务

systemctl restart openstack-nova-api.service

7.2.2.1.11、启动neutron服务

systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

7.2.2.2、部署Neutron计算节点(compute节点)

7.2.2.2.1、安装组件

yum install openstack-neutron-linuxbridge ebtables ipset -y

7.2.2.2.2、修改配置文件

7.2.2.2.2.1、配置/etc/neutron/neutron.conf文件

cp -a /etc/neutron/neutron.conf{,.bak}

vim neutron.conf

[DEFAULT]

transport_url = rabbit://openstack:openstack123@controller1

auth_strategy = keystone


[keystone_authtoken]

www_authenticate_uri = http://controller1:5000

auth_url = http://controller1:5000

memcached_servers = controller1:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = neutron123


[oslo_concurrency]

lock_path = /var/lib/neutron/tmp

7.2.2.2.2.2、配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini

选择Provider networks

cp -a /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}

官网指导方案:

vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

# linuxbridge_agent.ini文件中缺少此部分,一下内容全部需要新增

[linux_bridge]

physical_interface_mappings = provider:eth0


[vxlan]

enable_vxlan = false


[securitygroup]

enable_security_group = true

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

修改内核参数

vim /etc/sysctl.conf

在末尾追加

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

加载模块

modprobe br_netfilter

检查

sysctl -p

7.2.2.2.2.3、配置计算节点nova.conf

cp -a /etc/nova/nova.conf {,.bak1}

vim /etc/nova/nova.conf

[neutron]

auth_url = http://controller1:5000

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = neutron

password = neutron123

7.2.2.2.3、重启nova-compute服务

systemctl restart openstack-nova-compute.service

7.2.2.2.4、启动neutron服务

systemctl enable neutron-linuxbridge-agent.service

systemctl start neutron-linuxbridge-agent.service

7.2.2.3、验证

7.2.2.3.1、检查服务(controller)

. admin-openrc

openstack extension list --network

openstack network agent list

7.2.2.3.2、创建一个内网VM实例(controller)

7.2.2.3.2.1、创建网络

. admin-openrc

openstack network create --share --external --provider-physical-network provider --provider-network-type flat flat-1

#命令中的--provider-physical-network 值,就是/etc/neutron/plugins/ml2/ml2_conf.ini文件中配置的[ml2_type_flat]模块flat_networks = provider;以及/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件中[linux_bridge]模块的physical_interface_mappings = provider:eth0。命令最后是网络名字,可自定义。

OpenStack(Train版)-部署Neutron(一)_虚拟网络_07

openstack network list

OpenStack(Train版)-部署Neutron(一)_ide_08

7.2.2.3.2.2、创建子网

openstack subnet create --network flat-1 --allocation-pool start=192.168.56.96,end=192.168.56.103 --dns-nameserver 114.114.114.114 --gateway 192.168.56.2 --subnet-range 192.168.56.0/24 flat1-subnet

#--network为上一步创建的网络名称,选择的网段要在/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件中[linux_bridge]模块的physical_interface_mappings = provider:eth0所配置的网卡网段中,并且网关和掩码要和网卡的保持一致。命令最后是网络名字,可自定义。

OpenStack(Train版)-部署Neutron(一)_IP_09


7.2.2.3.2.3、上传镜像

将镜像上传到镜像服务器上,然后创建镜像:

glance image-create --name "cirros" \

--file cirros-0.4.0-x86_64-disk.img \

--disk-format qcow2 --container-format bare \

--visibility public

openstack image list

OpenStack(Train版)-部署Neutron(一)_ide_10

7.2.2.3.2.4、创建flavor(规格)

openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

openstack flavor list

OpenStack(Train版)-部署Neutron(一)_ide_11

7.2.2.3.2.5、生成密钥对

. demo-openrc

生成密钥对并添加公钥

ssh-keygen -q -N "" #一直回车

openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

OpenStack(Train版)-部署Neutron(一)_虚拟网络_12

验证

openstack keypair list

OpenStack(Train版)-部署Neutron(一)_IP_13

7.2.2.3.2.6、给default安全组添加规则

openstack security group list

OpenStack(Train版)-部署Neutron(一)_IP_14

openstack security group rule create --proto icmp default

openstack security group rule create --proto tcp --dst-port 22 default

7.2.2.3.2.7、创建一个实例

openstack server create --flavor m1.nano --image cirros --nic net-id=4c9b7a85-5055-4426-a046-546311653de9 --security-group default --key-name mykey vm1

--flavor可用openstack flavor list查看名称

--image 可用openstack image list查看名称

net-id可用openstack network list网络的ID

--security-group可用openstack security group list查看名称

--key-name可用openstack keypair list查看名称

OpenStack(Train版)-部署Neutron(一)_ide_15

查看虚拟机状态

openstack server show 6b6aa94e-56af-4b1e-8d52-1971ad309b83

OpenStack(Train版)-部署Neutron(一)_ide_16

或者用

nova show 6b6aa94e-56af-4b1e-8d52-1971ad309b83

openstack server list

7.2.2.3.2.8、获取虚拟机vnc

openstack console url show 0584f1ef-f600-4577-9986-dfb6dd9a2dbb

OpenStack(Train版)-部署Neutron(一)_ide_17

#要把链接中的controller1改为controller的IP,或者在本地的hosts中添加crontroller1的域名解析。

OpenStack(Train版)-部署Neutron(一)_IP_18

登录账号密码在vnc显示中:

OpenStack(Train版)-部署Neutron(一)_ide_19

ssh登录成功

OpenStack(Train版)-部署Neutron(一)_IP_20

7.2.2.3.3、创建一个创建内网+外网+路由+云主机VM实例(controller)


7.2.2.3.3.1、创建外网

openstack network create --provider-network-type=vlan --provider-physical-network=provider --provider-segment=101 --external --share net1

创建外网子网并指定网关


openstack subnet create sub-net --network net1 --gateway 192.168.56.2 --allocation-pool start=192.168.56.150,end=192.168.56.200 --subnet-range 192.168.56.0/24


参数解释:


--network 要绑定网络的名字


sub-net 是要创建子网的新名字



7.2.2.3.3.2、创建内网

openstack create subnet int


#创建外网


openstack subnet create sub-int --network int --subnet-range 10.1.1.0/24 --gateway 10.1.1.254


7.2.2.3.3.3、创建路由器:

openstack router create route01


连接路由器


openstack router add subnet route01 sub-net

openstack router add subnet route01 sub-int


7.2.2.3.3.4、连接外部网络并指定ip地址

neutron router-gateway-set route01 net1 --fixed-ip subnet_id=sub-net,ip_address=192.168.56.245


route01 路由器名称


net1 外部网络名称


sub-net 外部网络子网名称


ip_address 指定网络地址


下面两条命令可以创建一个外部的nat 内部的主机也可以访问外网


openstack router set route01 --disable-snat --external-gateway net1


openstack router set route01 --enable-snat --external-gateway net1


7.2.2.3.3.5、上传镜像

openstack image create cirres --disk-format qcow2 --container-format bare --shared --file /cirros-0.3.6-x86_64-disk.img


--container-format 容器格式


--disk-format 磁盘格式


--shared 共享的


-file 指定上床镜像文件目录


7.2.2.3.3.6、创建云主机类型

openstack flavor create m1 --ram 4096 --disk 30 --vcpus 2 --id 1


名字为m1


内存 为 4096M


disk 为30G


cpu为 2核

7.2.2.3.3.7、创建云主机:

openstack server create --nic net-id=de2ccb7b-d600-4691-899d-9251e688c93a --flavor 1 --image cirres vm2


--nic 指定的是网络的id


类型 我这里指定的是类型编号也可以是id或者命令


image 指定镜像


最后跟云主机名字


(网络跟ip地址是可以绑定的可以指定多个)


7.2.2.3.3.8、创建浮动ip

openstack floating ip create net1 --subnet sub-net --floating-ip-address 192.168.56.77


上面创建的是指定ip地址


openstack floating ip create net1 --subnet sub-net


上面创建的是不固定ip地址 从dhcp地址池随机分配


openstack floating ip set 192.168.56.199 --port b547ea86-a7c7-425c-8338-579b489891ad


利用创建好的浮动ip与主机接口相连接(注意这里用的地址必须是使用上面命令创建过的)


绑定(注意下面使用的b547这个id是云主机的端口id 可以用openstack port list进行查询)


openstack floating ip create net1 --subnet sub-net --floating-ip-address 192.168.56.189 --port b547ea86-a7c7-425c-8338-579b489891ad


直接绑定固定的ip地址


openstack floating ip create net1 --subnet sub-net --port b547ea86-a7c7-425c-8338-579b489891ad


绑定地址池的ip地址


7.2.2.3.3.9、创建策略可以用conntrack或openstack命令

安全策略可以重名:


可以通过查看网络所在项目id跟安全组所在项目id进行一个对应来找到自己所属的安全组


#指定rule策略id 指定协议 指定入口 指定ip地址范围


openstack security group rule create c85f8fe7-5b0c-4ff6-90b9-10cd91217463 --protocol icmp --ingress --remote-ip 0.0.0.0/0


#指定rule策略id 指定协议 指定远程


openstack security group rule create c85f8fe7-5b0c-4ff6-90b9-10cd91217463 --protocol tcp --ingress --remote-ip 0.0.0.0/0 --dst-port 22


#同时指定多个端口 允许


openstack security group rule create c85f8fe7-5b0c-4ff6-90b9-10cd91217463 --protocol tcp --ingress --remote-ip 0.0.0.0/0 --dst-port 11:22


在openstack规则中没有允许拒绝参数,因为默认是拒绝所有,


OpenStack(Train版)-部署Neutron(一)_虚拟网络_21


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  Yoru5qB4TSKM   2023年12月10日   14   0   0 服务器重启IP
  ozzp9aSSE46S   2023年11月30日   20   0   0 DNSIPPod
  YKMEHzdP8aoh   2023年12月11日   43   0   0 DNSidePod
  48fXx4UfWSFg   2023年12月06日   41   0   0 bcIPbundle
  aYmIB3fiUdn9   2023年12月08日   37   0   0 客户端IPNATlvs