【星海出品】neutron详解

Openstack Neutron详解

    • 源码地址
    • 模块组件
    • 合理的网络配置
    • 安装说明
    • 插入链接与图片
    • 注意事项
    • 简述网络
    • 创建service(endpoint)
      • 设定内容neutron、nova、glance
      • endpoint
    • overlay
    • 推荐图文博主简介
    • 创建VM的流程
    • KaTeX数学公式
    • 文章排期
    • 多region配置
    • 创建neutron服务实体流程图
    • 网络分类
      • 提供商网络
      • 自助服务网络(租户网络)

源码地址

https://review.opendev.org/c/openstack/neutron/+/66347

作者推荐
https://opendev.org/openstack/networking-ovn/src/branch/stable/newton/networking_ovn

模块组件

https://review.opendev.org/plugins/gitiles/openstack/neutron/+/refs/changes/44/800444/7/neutron

__init__.py
_i18n.py
agent/
api/
auth.py
cmd/
common/
conf/
constants.py
core_extensions/
db/
debug/
extensions/
hacking/
ipam/
locale/
manager.py
neutron_plugin_base_v2.py
notifiers/
objects/
opts.py
pecan_wsgi/
plugins/
policy.py
privileged/
profiling/
quota/
scheduler/
server/
service.py
services/
tests/
version.py
worker.py
wsgi.py

合理的网络配置

https://www.openstack.org/software/project-navigator/openstack-components/#openstack-services
官网的其他解释

NEUTRON Networking
OCTAVIA Load balancer
DESIGNATE DNS service

Domains:表示一组projects和users的集合。
每一个project或user只能属于一个domain,但user可以属于多个projects。domain有命名空间的概念,即在一个命名空间内的名称是否是全局唯一。

openstack domain create --description "Default Domain" default

project是域名下子项,辅之以user(用户)、role(角色:管理权限),可以实现对管理范围的限制。

#创建service项目:
openstack project create --domain default \
--description "Service Project" service

#创建admin项目:
openstack project create --domain default \
--description "Admin Project" admin

#创建demo项目:
openstack project create --domain default \
--description "Demo Project" demo

角色
openstack创建的角色没有其它参数限制,所以应该是全局通用的。

#创建admin角色:
openstack role create admin

#创建user角色:
openstack role create user

首次创建用户之前,需要先配置好环境变量

export OS_TOKEN=2a392914a9f6dade3f14;
export OS_URL=http://controller:35357/v3;
export OS_IDENTITY_API_VERSION=3;

创建admin用户:这里需要输入密码

openstack user create --domain default \
--password-prompt admin

将admin角色添加到admin项目和admin用户中:

openstack role add --project admin --user admin admin

创建demo用户:

openstack user create --domain default \
--password-prompt demo

将user角色添加到demo项目和demo用户中:

openstack role add --project demo --user demo user 

创建用户完成之后要去除环境变量:

unset OS_TOKEN OS_URL;

安装说明

https://docs.openstack.org/neutron/latest/install/install-rdo.html

插入链接与图片

链接: link.
Alt
【星海出品】neutron详解_第1张图片

注意事项

注意:
1、所有的用户都可以通过TOKEN来创建,所以TOKEN的安全也十分重要。
2、admin角色的用户可以创建admin角色的其它用户,所以要注意帐户的保护。
user角色的用户没有权限创建新的用户,可以分配给普通管理人员使用。
3、一个用户可以关联多个项目,使用role add可以设定。

4、Openstack 中, 以租户作为云主机隔离的单位,project 等同于 tenant。在管理openstack时候, 需要添加独立的project, 然后每个project具有独立的用户、网络、云主机等。Keystone虽然存在keystone tenant-list 命令用于查看租户,但是由于Tenant概念在G版被废弃,新版本已经不支持这个命令了。

简述网络

pass

创建service(endpoint)

创建service(服务:glance、nova、neutron等等)

需要创建的组件中,keystone组件要首先创建,而且上面的所有管理的规划要在创建keystone之后才可以进行,它是管理所有权限的服务嘛,而其它本身不需要创建用户。其它的服务组件都是需要创建访问用户的,并且需要分配admin的角色给帐户,这样就可以实通过访问用户和keystone进行交互,进而可以实现权限的管理。

再一个就是,每个服务组件都需要在openstack中注册,注册的endponit是由keystone来管理的。Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。

创建service

openstack service create \
--name keystone --description "OpenStack Identity" identity

创建endponit,public/internal/admin:

openstack endpoint create --region RegionOne \
identity public http://controller:5000/v3
openstack endpoint create --region RegionOne \
identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne \
identity admin http://controller:35357/v3

设定内容neutron、nova、glance

neutron:

创建neutron用户:
openstack user create --domain default --password-prompt neutron;
将neutron用户的角色设为admin
openstack role add --project service --user neutron admin;

创建neutron服务:

openstack service create --name neutron \
--description "OpenStack Networking" network;
创建neutron的endponit:
openstack endpoint create --region RegionOne \
network public http://controller:9696; \

openstack endpoint create --region RegionOne \
network internal http://controller:9696; \

openstack endpoint create --region RegionOne \
network admin http://controller:9696
第一 第二 第三
glance nova neutron

glance:

创建glance用户:

openstack user create --domain default --password-prompt glance;

将admin角色添加到service项目和glance用户中:

openstack role add --project service --user glance admin;

创建glance服务:

openstack service create --name glance \
--description "OpenStack Image" image;

创建glance endponit:

openstack endpoint create --region RegionOne \
image public http://controller:9292; \
openstack endpoint create --region RegionOne \
image internal http://controller:9292; \
openstack endpoint create --region RegionOne \
image admin http://controller:9292

nova:

创建nova用户:

openstack user create --domain default \
--password-prompt nova;

将nova用户的角色设为admin:

openstack role add --project service --user nova admin; \

创建nova服务:

openstack service create --name nova \
--description "OpenStack Compute" compute;

创建nova endponit:

openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%tenantidtenantids; \
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%tenantidtenantids; \
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%tenantidtenantids

endpoint

pass

overlay

【虚拟网络类型】

·Local

本地的Linux Bridge,除了虚拟机的网卡,不连接其他的网络设备,实际场景使用较少。

·Flat

不带vlan tag的网络,相当于local网络的Linux Bridge连接到一个物理网卡,该网络中的instance可以于网络中的instance通信。

所有的租户都在同一个网络内,没有进行网络隔离,容易产生广播风暴。

可以跨节点,实际场景也较少。

neutron net-create NAME --provider:network_type flat \
        --provider:physical_network PHYS_NET_NAME

·VLAN

基于物理Vlan网络实现,共享同一个物理网络的多个Vlan网络是相互隔离的,甚至可以使用重叠的IP空间。

每个支持VLAN network的物理网络可以被视为一个分离的VLAN trunk,使用一组独占的vlan id。(有效段为1~4096)

私有云网络应用较多。

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

·VXLAN

基于隧道技术的 overlay 网络,通过唯一的 VNI 区分于其他的 vxlan 网络,不和具体的物理网络绑定。

在 vxlan 中,数据包通过 VNI 封装成UDP包进行传输,因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制。

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

·GRE

与vxlan类似的一种overlay网络,使用IP包进行封装。
GRE 封装的数据包基于 IP 路由表来进行路由,因此 GRE network 不和具体的物理网络绑定。(基于隧道)

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

推荐图文博主简介

Neutron的基础讲解
https://www.cnblogs.com/linuxk/p/9454972.html

Neutron多种网络类型的具体操作
https://blog.csdn.net/cumj63710/article/details/107393326

SDN精讲
https://www.cnblogs.com/sammyliu/p/4622563.html

Neutron的安装
https://www.cnblogs.com/liaojiafa/p/6384969.html

创建VM的流程

【星海出品】neutron详解_第2张图片

  1. nova-compute向Neutron Server发送一个请求虚拟机IP地址的请求

  2. Neutron Server收到请求后为虚拟机创建MAC和IP地址,并存储到数据库中

  3. Neutron Server将信息发送给DHCP-agent

  4. DHCP-agent收到信息后将对应信息发送给dnsmasq,dnsmasq将信息保存起来

  5. nova创建虚机后会初始化MAC地址

  6. 当虚机启动的时候,默认的ip地址是0.0.0.0,会发送一个广播,dnsmasq会监听到虚拟机发送的报文,然后将对应MAC地址的IP地址返回给虚拟机,这样虚拟机启动完成后就会有IP地址了

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

文章排期

Mon 02 Mon 09 Mon 16 Mon 23 Mon 30 Mon 06 Mon 13 Mon 20 Mon 27 已完成 进行中 point OVS 现有任务 Neutron CSDN 文章排期
  • 关于 甘特图 语法,参考 这儿,

多region配置

首先搭建两套一样的OpenStack环境

更改前:
node1: 192.168.200.100 RegionOne
node2: 192.168.200.200 RegionOne

预期结果:
node1: 192.168.200.100 RegionOne keystone(共用)
node2: 192.168.200.200 RegionTwo

一、更改 node2 组件配置文件

[keystone_authtoken]
auth_uri = http://192.168.200.200:5000
auth_url = http://192.168.200.200:35357
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = openstack
memcache_security_strategy = ENCRYPT
memcache_secret_key = LSX38kDupTueYjpIjB03zXjhpuWgGU2SdvwkfpMN
memcached_servers = 10.95.42.23:11211
os_region_name = RegionOne
  1. 组件配置文件os_region_name原先是RegionOne全部改成RegionTwo1. 组件配置文件5000和35357对应的IP全部改成node1的keystone IP

二、更改 node2 keystone数据库

#1.导出数据库:
mysqldump -ukeystone -pkeystone keystone > keystone.sql

#2.把keystone.sql文件中所有的RegionOne改成RegionTwo

#3.把修改后的keystone.sql文件导入数据库:
mysql -ukeystone -pkeystone keystone < keystone.sql

三、node1 创建 node2 所有组件 endpoint
1.创建RegionTwo认证

keystone-manage bootstrap --bootstrap-password openstack \
--bootstrap-admin-url http://192.168.200.100:35357/v3/ \
--bootstrap-internal-url http://192.168.200.100r:5000/v3/ \
--bootstrap-public-url http://192.168.200.100:5000/v3/ \
--bootstrap-region-id RegionTwo

2.创建 node2 组件 endpoint

glance:

openstack endpoint create --region RegionTwo image public http://192.168.200.200:9292
openstack endpoint create --region RegionTwo image internal http://192.168.200.200:9292
openstack endpoint create --region RegionTwo image admin http://192.168.200.200:9292

neutron:

openstack endpoint create --region RegionTwo network public http://192.168.200.200:9696
openstack endpoint create --region RegionTwo network internal http://192.168.200.200:9696
openstack endpoint create --region RegionTwo network admin http://192.168.200.200:9696

创建neutron服务实体流程图

创建neutron服务实体:

在配置 OpenStack Networking (neutron) 服务之前,您必须创建数据库、服务凭证和 API 端点
https://docs.openstack.org/neutron/latest/install/controller-install-rdo.html

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

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | f71529314dab4a4d8eca427e701d209e |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

网络分类

1 管理的权限与角色不同。简单地说,租户创建的网络叫租户网络,而运营商管理员(Administrator)创建的网络,就是运营商网络。

2 创建网络时,传入的参数不同。创建运营商网络时,需要传入provider:network_type、provider:physical_network、provider:segmentation_id三个参数,而创建租户网络时,没有办法传入这三个参数,它们是由Openstack在管理员配置的范围内自动分配的。

3 运营商网络与租户网络的创建方法
运营商网络与租户网络相比,除了网络管理的角色权限不同以外,两者创建网络时所传入的参数也不相同。
运营商网络因为需要与另外一个网络相匹配,所以必须输入两个参数:provider:network_type(用以匹配另一个网络的网络类型)、provider:segmentation_id(用以匹配另一个网络的segmentation ID,或者说网络ID)。

租户网络与运营商网络相比,在创建时,是不能也没有必要输入这两个参数。但是,从Network Model中我们知道:除了“provider:network_type”,再也没有字段能表达网络类型:除了“provider:segmentation_id”,再也没有字段可以表达网络ID。也就是说,租户创建网络时,根本不能决定它的网络类型和网络ID。

从管理的角度,运营商不应该希望而且也不能将这些细节(网络类型和网络ID)交与租户来管理;从商业性和易用性的角度来考虑,这是一种理念:租户只需关心服务,不必关心实现细节,这就是Neutron提供的网络即服务的精髓。

既然租户在创建租户网络时并不需要关心具体的参数细节,那么必须得由Neutron来补充这些细节以便完成租户网络的实现。

管理员通过配置文件告诉Neutron相关信息。这些信息配置在文件etc/neutron/plugins/ml2/ml2_conf.ini中,举例如下:
#etc/neutron/plugins/ml2/ml2_conf.ini
tenant_network_types=vxlan
[ml2_type_vxlan]
vni_ranges=1:1000
这个配置文件告诉Neutron:租户网络的网络类型是VXLAN,而相应的VNI是由Neutron根据一定的规则自动分配,不过VNI的取值要落在范围1~1000。

提供商网络

图片来源于网络
【星海出品】neutron详解_第3张图片OpenStack Neutron支持自助服务网络——项目中的用户可以通过支持重叠IP和其他技术,清晰地表达自己的网络拓扑,与同一个云中的其他项目完全隔离。用户可以创建自己的网络和子网,而无需打开支持服务单或管理员的参与。用户创建一个Neutron路由器,将其连接到内部和外部网络,然后关闭它们。使用内置的ML2 / OVS解决方案,这意味着使用L3代理、隧道网络、浮动IP和自由使用NAT技术。

provider网络是一种完全不同的云网络架构。该模式放弃了L3代理、隧道、浮动IP和NAT。相反,管理员创建一个或多个provider网络(通常使用VLAN),与云用户共享,并禁止用户创建网络、路由器和浮动IP。当新用户注册云时,预先创建的网络已经存在供他们使用。在此模型中,provider网络通常是可路由的—— 它们通过BGP和物理路由器通告公共互联网。因此,通常认为provider网络在VLAN ID和子网属性方面映射到预先存在的数据中心网络。

外部网络是provider网络的子集,启用了额外的标志。网络的“外部”属性表示虚拟路由器可以将其面向外部的接口连接到网络。当你使用UI为路由器提供外部连接时,只有外部网络才会显示在列表中。

【星海出品】neutron详解_第4张图片

图中右边圆圈,表示一个企业内的一个部门的VLAN网络,它的VLAN ID=100。重要的是,这个网络内的计算机并不是虚拟机,也就是说,它们并不在Openstack(包括Neutron)的管理范围内。此时,如果这个部门如果要增加一批虚拟机,而且这些虚拟机也必须加入VLAN ID=100的这个VLAN中,那么就需要运营商网络登场了。
我们知道,在Openstack的模型中,虚拟机总要属于一个网络(严格地说,是虚拟机的端口要属于一个网络)。所以,在上述场景中,那些虚拟机如果要加入VLAN ID=100的那个网络,首先需要在Neutron中创建一个Network。
但是,这个Network的网络类型必须要与原来的网络(虚拟机要加入的网络)能够对应起来,也就是说:网络类型必须是VLAN,而且VLAN ID必须是100,这样那些虚拟机才能把原来的计算机互通,才能满足要求。
我们把上面这个例子,抽象一下,就可以得出运营商网络的一般化使用场景,如下图所示:
在这里插入图片描述
【星海出品】neutron详解_第5张图片
Neutron创建了一个网络,如果这个网络只是为了映射(匹配)另外一个网络,而且这个被映射的网络不在Neutron的管理范围内,这样的场景就是运营商网络的一般化使用场景。Neutron创建的这个网络,也称为运营商网络。

这里所说的匹配,指的是网络类型和网络ID必须相同。网络ID的含义取决于网络类型。比如:如果网络类型是VLAN,那么网络ID就代表VLAN ID;如果网络类型是GRE,那么网络ID就代表GRE Key。

从某种意义上讲,运营商网络可以认为是运营商的某个物理网络在Openstack(Neutorn)上的延伸,这个物理网络的生命周期管理(创建、修改、销毁)不能作为单纯的服务提供给租户,只是由管理员作为基础设施的一部分来管理。这也是运营商网络之所以被称为运营商网络的原因。

自助服务网络(租户网络)

由租户创建并且管理的网络,Neutron称之为租户网络。但是Openstack不是万能的,Neutron也不是万能的。还有很多网络不在Neutron管理范围内(Neutron称之为外部网络)。有时候,Neutron还需要创建一个网络来映射外部网络,这个网络,也称为运营商网络(Provider network)。

租户网络(Tenant network):提供虚机在计算节点之间,以及计算节点和网络节点之间的通信。同样这也是数据中心的内部网络。

【星海出品】neutron详解_第6张图片
来源:2015 OpenStack技术大会-Neutron云计算网络虚拟化-龚永生.pdf

你可能感兴趣的:(python,openstack,neutron)