多网卡
- Launchpad 条目: NovaSpec:multi-nic
- 创建者: Trey Morris
- 贡献者: Trey Morris
总结
支持每个实例多个网卡。Rackspace 要求至少两个网卡(1 个公网,1 个私网),但应该抽象化以支持 N 个网卡。目前 Nova 假定 1 个网卡。更改需要传播到虚拟机内部。
发布说明
多网卡允许用户拥有位于多个网络上的实例。以 Rackspace 为例:公网和私网。
原理
托管提供商(以及其他人)将拥有位于多个网络上的实例。实例需要多个网卡来配合不同的网络使用。
用户故事
前提条件
设计
每个网络一个 vif。获取与当前项目关联的网络列表,为每个网络创建一个 vif。我还会对 MAC 地址进行一些分割,以便将网络添加到其中。我计划使用从实例 ID(或直接计数器)生成的初始“40:40”之后的 24 位,并使用网络 ID 生成剩余的 8 位。这意味着我们将拥有 16,777,216 个可能的实例 MAC 地址(包括零),并且每个实例 MAC 地址可以进一步划分为总共 256 个网络(同样包括零)。这保证了唯一的 MAC 地址,直到我们达到上述实例数量。只要它们不在同一个“huddle”区域,重复的 MAC 地址是可以接受的。如何防止这种情况发生,我认为超出了此蓝图的范围。
实现
UI 变更
每个 vif 的 IP 地址必须在 UI 中显示。
代码变更
xenapi.vmops 中的 spawn 函数将被修改以设置多个 vif。还需要注入更多网络信息。数据库模式需要根据下面的迁移进行更改。
迁移
实例表中的 mac_address 字段将被删除。固定 IP 表需要允许一个 vm 与多个 IP 关联(不确定目前是否具有唯一约束),并且它还需要存储与 IP <-> vm 关系关联的网络标签,以便可以正确定义 IP 地址。networks 表中的 project_id 必须删除其唯一约束。
测试/演示计划
首先,创建实例并查看它们是否获得多个 vif。在 xs-inject-networking 之后,我将检查以确保网络设置正确。
未解决的问题
有多种方法可以做到这一点。可以在同一个网络上创建多个 vif,有些网络可能没有关联的 vif。我不确定如何实现这些选项。最初,我正在编写此代码以为每个实例的每个网络创建一个 vif。