lbaas分析笔记

前言

今年的云网方案,涉及很多lb的需求,大多数是客户亟需的而社区目前不支持的。针对类似需求,我们首要考虑能否通过其它方式去满足而不改动社区原有实现,其次才是考虑如何扩展并兼容社区实现。当然有的方案也会考虑能否向社区提交,话说回来了,搞开源本来就要结合实际需求来做,过于私有化的方案也就违背了开源的初心。说回lbaas,目前社区已经将其独立出neutron,成立新的项目octavia。即便如此,当前很多云厂商,依然还是沿用的lbaas v1或v2。很多lb厂商如f5,a10还是以lbaas的插件为主,所以本文简要分析lbaas相关知识点。

lbaas plugin

lbaas的功能入口是它的restAPI。厂商们针对api开发相应的lbaas plugin,并且要对应到设备上的具体功能。简单阐述以下lbaas的几个组件的关系:
lbaas-arch
api和lbaas plugin服务是随neutron-server一起跑在控制节点上;agent是跑在网络节点上的。neutron-server接收到restapi的请求后,会触发lb的插件处理body,插件会选取lb的agent,将相应的请求通过rpc发送给agent,agent处理消息时会调用设备的driver。而device driver就是具体与设备打交道的组件。插件部分没什么好说的,接触的几个厂商都是沿用的lb社区的插件。配置在/etc/neutron/neutron.conf:

service_plugins = [already defined plugins],neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2

当然还需要配置相应的service_provider(neutron里对理解provider这个概念很重要)。比如f5的配置:

service_provider = LOADBALANCERV2:F5Networks:neutron_lbaas.drivers.f5.driver_v2.F5LBaaSV2Driver:default

我们看到,这里的provider路径指向的是F5LBaaSV2Driver。这个driver可以理解是调用f5-agent服务的插件驱动service driver,注意区别前文提到的device driver。我们也可以看lb的代码里,插件在创建资源的时候,是调的self._call_driver_operation这个方法,从方法名看出,调的是driver,也就是刚刚讲的这个driver。

lbaas agent

这部分分析agent的处理流程。在此之前还是先分析一下前文提到的service_provider。参照f5的社区代码,他们的service driver在处理创建lb的开始阶段,会通过_schedule_agent_create_service选取一个agent,因此是支持多agent的(有个可用域的概念)。除此之外,还做了一个特殊处理,那就是将vip的端口类型改为了裸金属baremetal。对于这样的处理,第三方的ml2处理port需要特别注意,建议增加判断device_owner为f5的特殊流程。

lbaas agent的处理主要就是调用device driver进行资源的增删改,以及同步资源的状态status。配置device driver的地方在/etc/neutron/lbaas_agent.ini:

interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

类似f5的配置在/etc/neutron/services/f5/f5-openstack-agent.ini:

f5_bigip_lbaas_device_driver = f5_openstack_agent.lbaasv2.drivers.bigip.icontrol_driver.iControlDriver

可以看得出来,社区的方案里,agent与plugin的处理是异步进行的。driver的处理流程就不分析了,各家厂商的处理都不同。

lbaas方案

这里就不说设备的组网方案了,单臂双臂等等。针对lb的纳管方案,目前就是两种,分别是云平台纳管和sdn控制器纳管。云平台纳管的情况,lb的插件和agent的部署就直接对应为设备的,类似f5,那么这种情况下,lb做不到的引流等相关操作的话,就需要其它方案补齐,比如额外的网络规划;sdn纳管lb设备的情况,插件与agent都对应sdn的,这种情况下,云上就不关心具体的引流情况了,这时候sdn就需要做到自动化部署lb资源。而实际部署的时候,真正复杂的地方在于,往往会涉及到sdn与云和lb插件三者的交互。所以,每部分摊开来都看似容易,但是融合在一起形成方案的时候,一定要考虑到各种细节。

个人分析,欢迎指正,若转载请注明出处!