Neutron/LBaaS/LVSDriver
概述
LVS 是一种流行的负载均衡器实现。Neutron LBaaS 应该支持 LVS。
LVS 相对于 HAProxy 的一个优势是 LVS 支持客户端透明性(即,不进行 SNAT)。
由于 LVS 负载均衡器看起来像一个具有附加功能的路由器,因此在路由器中实现 LVS 负载均衡器非常简单直接。
存在一个名为 'routed-service-insertion' 的扩展,旨在用于将 LBaaS 添加到路由器,但目前还没有使用该扩展的实现。BP lbaas-support-routed-service-insertion 将 'routed-service-insertion' 扩展添加到 LBaaS 插件中。LVS 实现 (BP lbaas-lvs-driver) 是在此 BP 的基础上完成的,并且该实现可以被视为 'routed-service-insertion' 的一个参考用法。
用例
1) 创建一个处理 LBaaS 的路由器,并连接两个内部端口,一个用于池的子网,一个用于 VIP 的子网。请注意,该路由器也用作一个正常的路由器。
2) 创建一个池和一个 VIP,并将路由器 ID 指定为 'router_id' 属性。请注意,'router_id' 属性是由 'routed-service-insertion' 扩展添加的。
就这样了。
请注意,浮动 IP 可以附加到 VIP。
实现
1. 在 LBaaS 服务插件中添加 routed-service-insertion 扩展
BP: https://blueprints.launchpad.net/neutron/+spec/lbaas-support-routed-service-insertion
由于该扩展不会影响现有功能,因此将 'routed-service-insertion' 添加到现有的 LBaaS 插件,而不是创建另一个插件,会更简单。
2. 使用 LVS 实现 LBaaS
BP: https://blueprints.launchpad.net/neutron/+spec/lbaas-lvs-driver
LVS 驱动程序类似于 HAProxy 驱动程序这样的提供程序驱动程序。与 HAProxy 驱动程序不同,LVS 驱动程序与 l3_agent 通信。
我们的概念验证实现非常简单,L3NATAgent 继承 LVSL3AgentRpcCallback,该回调处理 LBaaS 相关的 RPC 和函数。请注意,这与 FWaaS 在 l3_agent 中所做的方法相同。这将根据服务链或 l3_agent 抽象讨论进行更改。
请注意,keepalived 用于我们的实现来控制 LVS 和成员。
代码: https://github.com/ntt-sic/neutron/tree/bp/lbaas-lvs-driver-2 (已过时,请查看 gerrit)

