Routed Control Plane Networks

本节描述了路由控制平面网络的配置。这是一个高级概念,通常仅适用于超过广播域合理大小的大型部署。

概念

Kayobe 当前支持定义各种不同的网络 - 公共网络、内部网络、隧道网络等。这些通常映射到 VLAN 或扁平网络,并与关联的 IP 子网相关联。当云超过单个 VLAN/子网的合理大小,或在物理上分布时,这种方法将不再适用。

一种解决方法是拥有映射到单个逻辑网络的多个子网,并在它们之间提供路由。这与 Neutron 的 路由提供商网络 类似,但适用于控制平面网络。

限制

目前,使用路由控制平面网络存在一些限制。只有以下网络经过测试

  • admin_oc

  • internal

  • tunnel

  • storage

  • storage_mgmt

此外,只有计算节点和存储节点经过路由控制平面网络的测试 - 控制器始终放置在测试期间相同的网络集上。

使用路由控制平面网络尚未测试裸机配置(overcloud 或 baremetal compute),并且在不采取额外步骤的情况下,预计无法正常工作。

配置

将 Kayobe 配置为路由控制平面网络的方法如下

  • 在库存中为不同的网络集创建组

  • 将主机放置在适当的组中

  • vip_addressfqdn 网络属性移动到 全局变量

  • 将全局网络名称配置移动到组变量

  • 将新网络添加到配置

  • 添加网络接口组变量

示例

在此示例中,我们最初有许多不同的逻辑网络

  • public_0

    • 10.0.0.0/24

    • VLAN 100

  • internal_0

    • 10.0.1.0/24

    • VLAN 101

  • tunnel_0

    • 10.0.2.0/24

    • VLAN 102

  • storage_0

    • 10.0.3.0/24

    • VLAN 103

  • storage_mgmt_0

    • 10.0.4.0/24

    • VLAN 104

最初,以下主机连接到这些网络

  • controllers[0:2]: public_0, internal_0, tunnel_0, storage_0

  • compute[0:127]: internal_0, tunnel_0, storage_0

  • storage[0:63]: internal_0, storage_0, storage_mgmt_0

现在假设我们希望添加 128 个计算节点和 64 个存储节点。这将超过当前子网的大小。我们可以增加子网大小,但有充分的理由保持广播域相对较小。

为了解决这个问题,我们可以添加更多网络

  • internal_1

    • 10.1.1.0/24

    • VLAN 111

  • tunnel_1

    • 10.1.2.0/24

    • VLAN 112

  • storage_1

    • 10.1.3.0/24

    • VLAN 113

  • storage_mgmt_1

    • 10.1.4.0/24

    • VLAN 114

网络必须提供以下网络之间的路由

  • internal_0internal_1

  • tunnel_0tunnel_1

  • storage_0storage_1

  • storage_mgmt_0storage_mgmt_1

现在我们可以将新主机连接到这些网络

  • compute[128:255]: internal_1, tunnel_1, storage_1

  • storage[64:127]: internal_1, storage_1, storage_mgmt_1

库存

为了模拟此更改,我们可以使用如下的库存

inventory/hosts
localhost ansible_connection=local

[controllers]
controller[0:2]

[compute]
compute[0:255]

[storage]
storage[0:127]

[network-0]
controller[0:2]

[compute-network-0]
compute[0:127]

[storage-network-0]
storage[0:63]

[network-0:children]
compute-network-0
storage-network-0

[network-1]

[compute-network-1]
compute[128:255]

[storage-network-1]
storage[64:127]

[network-1:children]
compute-network-1
storage-network-1

Kolla API 地址

删除 networks.yml 中定义 vip_addressfqdn 网络属性的所有变量,并将配置移动到 API 地址变量kolla.yml 中。

网络名称

要将全局网络名称配置移动到组变量,应在 networks.yml 中注释掉以下变量

networks.yml
#admin_oc_net_name:
#internal_net_name:
#tunnel_net_name:
#storage_net_name:
#storage_mgmt_net_name:

inventory/group_vars/network-0inventory/group_vars/network-1 中创建组变量文件

inventory/group_vars/network-0
admin_oc_net_name: internal_0
internal_net_name: internal_0
tunnel_net_name: tunnel_0
storage_net_name: storage_0
storage_mgmt_net_name: storage_mgmt_0
inventory/group_vars/network-1
admin_oc_net_name: internal_1
internal_net_name: internal_1
tunnel_net_name: tunnel_1
storage_net_name: storage_1
storage_mgmt_net_name: storage_mgmt_1

网络

现在,确保将两组网络定义在 networks.yml 中。静态路由在此处添加到网络对之间,尽管这些将取决于您的路由配置。可能需要其他网络属性,我们仅在此处包含 cidrvlanroutes 以供参考

networks.yml
public_0_cidr: 10.0.0.0/24
public_0_vlan: 100

internal_0_cidr: 10.0.1.0/24
internal_0_vlan: 101
internal_0_routes:
  - cidr: "{{ internal_1_cidr }}"
    gateway: 10.0.1.1

internal_1_cidr: 10.1.1.0/24
internal_1_vlan: 111
internal_1_routes:
  - cidr: "{{ internal_0_cidr }}"
    gateway: 10.1.1.1

tunnel_0_cidr: 10.0.2.0/24
tunnel_0_vlan: 102
tunnel_0_routes:
  - cidr: "{{ tunnel_1_cidr }}"
    gateway: 10.0.2.1

tunnel_1_cidr: 10.1.2.0/24
tunnel_1_vlan: 112
tunnel_1_routes:
  - cidr: "{{ tunnel_0_cidr }}"
    gateway: 10.1.2.1

storage_0_cidr: 10.0.3.0/24
storage_0_vlan: 103
storage_0_routes:
  - cidr: "{{ storage_1_cidr }}"
    gateway: 10.0.3.1

storage_1_cidr: 10.1.3.0/24
storage_1_vlan: 113
storage_1_routes:
  - cidr: "{{ storage_0_cidr }}"
    gateway: 10.1.3.1

storage_mgmt_0_cidr: 10.0.4.0/24
storage_mgmt_0_vlan: 104
storage_mgmt_0_routes:
  - cidr: "{{ storage_mgmt_1_cidr }}"
    gateway: 10.0.4.1

storage_mgmt_1_cidr: 10.1.4.0/24
storage_mgmt_1_vlan: 114
storage_mgmt_1_routes:
  - cidr: "{{ storage_mgmt_0_cidr }}"
    gateway: 10.1.4.1

网络接口

由于现在有不同名称的网络,网络接口变量也不同。这意味着我们必须为每组网络和每种主机类型提供组变量文件。例如

inventory/group_vars/compute-network-0/network-interfaces
internal_0_interface: eth0.101
tunnel_0_interface: eth0.102
storage_0_interface: eth0.103
inventory/group_vars/compute-network-1/network-interfaces
internal_1_interface: eth0.111
tunnel_1_interface: eth0.112
storage_1_interface: eth0.113
inventory/group_vars/storage-network-0/network-interfaces
internal_0_interface: eth0.101
storage_0_interface: eth0.103
storage_mgmt_0_interface: eth0.104
inventory/group_vars/storage-network-1/network-interfaces
internal_1_interface: eth0.111
storage_1_interface: eth0.113
storage_mgmt_1_interface: eth0.114

应删除正常的接口配置组变量文件 inventory/group_vars/compute/network-interfacesinventory/group_vars/storage/network-interfaces

可以将控制器网络接口的组变量放置在 inventory/group_vars/controllers/network-interfaces 中,如正常情况一样。

替代方法

有一种替代方法尚未经过测试,但可能感兴趣。与其使用不同的网络名称(例如 internal_0internal_1),而应可以在所有地方使用相同的名称(例如 internal),但在组变量中定义网络属性。这种方法可能更简洁,并允许使用相同的组变量文件通过 internal_interface 等方式设置网络接口。