前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Neutron的IPAM还可以这么玩!

Neutron的IPAM还可以这么玩!

作者头像
腾讯云TStack
修改2019-05-16 16:23:00
1.7K0
修改2019-05-16 16:23:00
举报
文章被收录于专栏:腾讯云TStack专栏

neutron作为openstack的核心组件用来管理网络,比如network、subnet和port核心资源、lbaas、fwaas等扩展资源,但是对于用户来说最基础的是ip,以及这个ip所在的网络,这部分功能是由neutron的IPAM管理。

 哪些地方需要ip

neutron哪些地方有需要ip?too many,比如说虚拟机的网卡、路由器的外部网关、内部接口、浮动ip、dhcp port、ha路由器的管理口,其他组件lbaas、manila等都需要ip,这些ip其实在neutron看来都是创建port资源,只是各种device owner不同,都需要通过neutron的IPAM分配和管理。

IPAM是个啥

IPAM(IP Address Management),也可以叫做ip地址管理子系统。L版neutron的IPAM是一个分水岭,L版之前ip的管理只能使用neutron本身的数据库,分配和回收都是通过这个数据库来实现。L版开始,社区对IPAM进行了重构,把ip的分配和释放以及子网的增删改查作为标准的接口提取出来,使用driver的方式来接入各种拥有ip和子网管理功能的系统,这样就实现了IPAM可插拔,允许接入用户一些现有的ip管理系统,同时对neutron其他功能基本没有影响,L版之前使用数据库实现的ip管理作为了IPAM一种默认的driver。

下面比较一下neutron的源码目录结构。

K版neutron的IPAM目录下结构:

代码语言:javascript
复制
[root@con01 ipam(keystone_admin)]# lltotal 32-rw-r--r-- 1 root root  7428 Aug 21  2015 __init__.py-rw-r--r-- 1 root root  4124 Aug 21  2015 driver.py-rw-r--r-- 1 root root 16282 Aug 21  2015 subnet_alloc.py

P版neutron的IPAM目录下结构:

代码语言:javascript
复制
[root@con01 /usr/lib/python2.7/site-packages/neutron/ipam]# lltotal 52-rw-r--r-- 1 root root     0 Aug 31 16:29 __init__.py-rw-r--r-- 1 root root  6733 Aug 31 16:29 driver.pydrwxr-xr-x 4 root root  4096 Jan 24 14:31 drivers-rw-r--r-- 1 root root  2916 Aug 31 16:29 exceptions.py-rw-r--r-- 1 root root 11534 Aug 31 16:29 requests.py-rw-r--r-- 1 root root 19006 Aug 31 16:29 subnet_alloc.py-rw-r--r-- 1 root root  2616 Aug 31 16:29 utils.py

其中drivers目录下面就是各个driver的实现,其他文件定义了ip和子网管理相关的标准接口,各个driver根据后端管理平台具体实现标准接口。

代码语言:javascript
复制
[root@con01 ~]# ll /usr/lib/python2.7/site-packages/neutron/ipam/drivers/
total 16
-rw-r--r--. 1 root root    0 Oct 31 06:27 __init__.py
drwxr-xr-x. 2 root root 4096 Dec 24 16:09 neutrondb_ipam

从上图中的driver文件夹的名字也可以看出,默认的driver就是使用数据库来管理ip和子网。

默认driver分析

模块图

上图为neutron的模块图中,从中可看出IPAM主要和ML2 plugin和IPAM db交互,那小甲下面主要分析一下怎么交流的,由于IPAM主要管理子网和port,网络IPAM不管理,主要分析一下port和子网的创建

port的创建流程:

  • neutron server接受创建port的请求之后,到达ML2 plugin模块进行处理,ML2 plugin主要处理网络、子网和port资源
  • ML2 plugin把请求交给IPAM处理,IPAM主要是用来给port分配一个可用的ip或者用户指定ip,对于具体使用什么分配算法根据driver不同而不同,默认的neutronDB driver使用的是如下算法:
    • 首先从IPAM相关的数据库取出已经使用的ip,然后列举子网上面所有的ip,取个差集,就是可用的ip池,然后通过一个随机ip窗口在可用ip池中获取一个可用的ip。
  • 通过IPAM获取完ip之后,创建port数据结构加入到neutron的db中,这里IPAM db和neutron db其实都是在neutron数据库中,小甲之所以这么叫,主要是区分它们的作用,IPAM db主要是用来管理ip分配、可用池等,neutron db主要是为了记录port信息,ip只是它的一个属性。
  • 后面会把请求交给type manager和Mechainsm manager创建相应的底层资源

△port创建流程图

子网的创建流程:

  • neutron server接受创建子网的请求之后,还是ML2 plugin模块处理
  • ML2 plugin把请求交给IPAM处理,IPAM主要是在IPAM db中创建子网的数据模型实例,记录子网信息,比如子网的默认网关、dhcp的ip、有效的ip地址
  • 在IPAM创建完数据库实例之后,会在neutron db创建子网资源,跟port一样,IPAM数据库中的子网只要是用来分配ip的,neutron数据库中主要是neutron层记录子网,比如我们经常用到neutron subnet-list就是这个neutron数据库获取的。
  • 后面会把请求交给type manager和Mechainsm manager创建相应的底层资源。
  • 子网的创建,会触发创建这个子网上面的dhcp port,创建流程跟上面port一样,然后dhcp agent会创建相应的资源。

△子网创建流程图

如何写自己的IPAM driver

讲了这么多,究竟如何实现自己的IPAM driver呢?

其实很简单,只要完成以下两件事即可

一、派生子类实现子网和port管理的基准接口(多态性):

1.请求资源的多态性

请求工厂基类,主要创建ip分配请求和子网创建请求:

SubnetRequestFactory:用于子网创建请求

AddressRequestFactory: 用于ip分配请求 各个driver可以根据需求通过不同工厂创建不通的请求,每个ip管理子系统需要的请求数据可能不一样

2.管理资源的多态性

ip和子网操作基类模型如下图(点击可放大):

实现方式千千万,涉及到具体如何管理ip和子网资源,每个ip管理系统不同实现也不同

二、如何优雅发送请求 如何与ip管理系统通信,主要看个人代码习惯,可以直接调用后端ip系统的restful api,也可以逻辑清楚的划分各个层,TStack划分了controller、manager和对象映射api层

IPAM扩展有什么好处

那么问题来了,IPAM driver有什么好处,以我们TStack为例:

  • 我们ip系统比neutron默认的功能更强大丰富,默认的IPAM有些场景不能满足我们需求
  • Tstack借助IPAM driver可以使ip系统统一管理整个平台的网络资源
  • 上层应用可以接入ip系统实现运维管理

遇到的问题

在实现IPAM驱动的过程中,遇到过很多问题,并一一进行了解决,大致列举几个问题,以引起大家注意:

  • neutron数据模型跟自研ip系统模型不匹配,比如少一些模型,或者一些模型不完全对应,会导致IPAM在跟自研ip系统交互的时候出现问题。 
  • 业务信息的处理,自研ip系统的定位可能不是底层组件,会带有一些上层业务信息,而neutron没有这些业务信息,比如ip系统会根据业务分网络类型,基础网、私有网等,而neutron不分这么细 
  • neutron多入口访问的统一,restful api,命令行和dashboard多个入口的访问要保证一致性
  • IPAM和ip系统的两部分的配合处理需要处理好并发访问处理

特别鸣谢:

IPAM TStack driver的实现成员:

spectrezz24(排名不分先后)

· END ·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云TStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 遇到的问题
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档