跳转到: 导航, 搜索

Neutron/LBaaS/LVSDriver

< Neutron‎ | LBaaS

概述

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 的子网。请注意,该路由器也用作一个正常的路由器。

LVS LBaaS Diagram1.jpg

2) 创建一个池和一个 VIP,并将路由器 ID 指定为 'router_id' 属性。请注意,'router_id' 属性是由 'routed-service-insertion' 扩展添加的。

就这样了。

请注意,浮动 IP 可以附加到 VIP。

LVS LBaaS Diagram2.jpg

实现

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)