网络配置

Kayobe 提供了一种灵活的机制来配置系统中的网络。Kayobe 网络被分配一个名称,该名称用作定义网络属性的变量的前缀。例如,要配置名为 arpanet 的网络的 cidr 属性,我们将使用名为 arpanet_cidr 的变量。

全局网络配置

全局网络配置存储在 ${KAYOBE_CONFIG_PATH}/networks.yml 中。支持以下属性

cidr

网络的 IP 子网的 CIDR 表示形式(/<前缀长度>)。

allocation_pool_start

Kayobe 分配池范围的起始 IP 地址。

allocation_pool_end

Kayobe 分配池范围的结束 IP 地址。

inspection_allocation_pool_start

ironic inspector 分配池范围的起始 IP 地址。

inspection_allocation_pool_end

ironic inspector 分配池范围的结束 IP 地址。

neutron_allocation_pool_start

neutron 分配池范围的起始 IP 地址。

neutron_allocation_pool_end

neutron 分配池范围的结束 IP 地址。

gateway

网络的默认网关 IP 地址。

inspection_gateway

硬件内省网络的网关 IP 地址。

neutron_gateway

基于此网络的 neutron 子网的网关 IP 地址。

vlan

VLAN ID。

mtu

最大传输单元 (MTU)。

vip_address

注意

不建议使用 vip_address 属性。请改用 kolla_internal_vip_addresskolla_external_vip_address

API 服务在此网络上使用的虚拟 IP 地址 (VIP)。

fqdn

注意

不建议使用 fqdn 属性。请改用 kolla_internal_fqdnkolla_external_fqdn

API 服务在此网络上使用的完全限定域名 (FQDN)。

routes

注意

options 在 Ubuntu 上当前不受支持。

静态 IP 路由列表。每个项目应是一个包含项目 cidr 的字典,以及可选的 gatewaytableoptionscidr 是路由目的地的 CIDR 表示形式。 gateway 是下一跳的 IP 地址。 table 是要将路由添加到其中的路由表的名称或 ID。 options 是要添加到路由的选项字符串列表。

rules

IP 路由规则列表。

在 CentOS 或 Rocky 上,每个项目应是一个描述 iproute2 IP 路由规则的字符串。

在 Ubuntu 上,每个项目应是一个包含可选项目 fromtoprioritytable 的字典。 from 是要匹配的源地址前缀(可选前缀)。 to 是要匹配的目的地址前缀(可选前缀)。 priority 是规则的优先级。 table 是路由表 ID。

physical_network

此网络存在的物理网络的名称。这与 neutron 中的物理网络概念一致。这可用于自定义用于外部网络的 Neutron 物理网络名称。应为所有外部网络或不设置此属性。

libvirt_network_name

为种子 hypervisor 上表示此网络的 Libvirt 网络指定名称。

no_ip

是否为此网络分配 IP 地址。如果设置为 true,则不会分配 IP 地址。

配置 IP 子网

可以通过将网络的 cidr 属性设置为子网的 CIDR 表示形式来配置 IP 子网。

要将名为 example 的网络配置为具有 10.0.0.0/24 IP 子网

networks.yml
example_cidr: 10.0.0.0/24

配置 IP 网关

可以通过将网络的 gateway 属性设置为网关的 IP 地址来配置 IP 网关。

要将名为 example 的网络配置为具有位于 10.0.0.1 的网关

networks.yml
example_gateway: 10.0.0.1

此网关将在映射到网络的每个主机上配置。请注意,在单个主机上配置多个 IP 网关会导致不可预测的结果。

配置 API 虚拟 IP 地址

可以配置虚拟 IP (VIP) 地址,供 Kolla Ansible 在内部和外部网络上使用,API 服务将在其上暴露。该变量将传递到 kolla_internal_vip_addresskolla_external_vip_address Kolla Ansible 变量。

要将名为 example 的网络配置为具有位于 10.0.0.2 的 VIP

networks.yml
example_vip_address: 10.0.0.2

配置 API 完全限定域名

可以配置完全限定域名 (FQDN),供 Kolla Ansible 在内部和外部网络上使用,API 服务将在其上暴露。该变量将传递到 kolla_internal_fqdnkolla_external_fqdn Kolla Ansible 变量。

要将名为 example 的网络配置为具有位于 api.example.com 的 FQDN

networks.yml
example_fqdn: api.example.com

配置静态 IP 路由

可以通过将网络的 routes 属性设置为路由列表来配置静态 IP 路由。

要将名为 example 的网络配置为通过 10.0.0.110.1.0.0/24 子网的单个 IP 路由

networks.yml
example_routes:
  - cidr: 10.1.0.0/24
    gateway: 10.0.0.1

这些路由将在映射到网络的每个主机上配置。

如有必要,可以向路由添加自定义选项

networks.yml
example_routes:
  - cidr: 10.1.0.0/24
    gateway: 10.0.0.1
    options:
      - onlink
      - metric 400

请注意,自定义选项在 Ubuntu 上当前不受支持。

配置 VLAN

可以通过将网络的 vlan 属性设置为 VLAN 的 ID 来配置 VLAN 网络。

要将名为 example 的网络配置为具有 VLAN ID 123

networks.yml
example_vlan: 123

IP 地址分配

IP 地址由 Kayobe 从由 allocation_pool_startallocation_pool_end 定义的分配池中自动分配。如果未定义这些变量,则使用整个网络,不包括网络和广播地址。仅当设置了网络 cidr 并且未使用 DHCP(请参阅 每主机网络配置 中的 bootproto)时,才会分配 IP 地址。分配的地址存储在 ${KAYOBE_CONFIG_PATH}/network-allocation.yml 中,使用全局每网络属性 ips,该属性将 Ansible 库存主机名映射到分配的 IP。

如果需要静态 IP 地址分配,可以手动填充 IP 分配文件 network-allocation.yml,其中包含所需的地址。

配置动态 IP 地址分配

要将名为 example 的网络配置为具有 10.0.0.0/24 IP 子网和从 10.0.0.410.0.0.254 的分配池

networks.yml
example_cidr: 10.0.0.0/24
example_allocation_pool_start: 10.0.0.4
example_allocation_pool_end: 10.0.0.254

注意

此池不应与同一网络上的 inspection 或 neutron 分配池重叠。

配置静态 IP 地址分配

要将名为 example 的网络配置为为主机 host1host2 分配静态 IP 地址

network-allocation.yml
example_ips:
  host1: 10.0.0.1
  host2: 10.0.0.2

高级:基于策略的路由

基于策略的路由在复杂的网络环境中很有用,尤其是在存在非对称路由并且启用了严格的反向路径过滤的情况下。

配置 IP 路由表

可以通过将 networks.yml 中的全局变量 network_route_tables 设置为路由表列表来配置自定义 IP 路由表。这些路由表将添加到 /etc/iproute2/rt_tables

要配置具有 ID 1 的名为 exampleroutetable 的路由表

networks.yml
network_route_tables:
  - name: exampleroutetable
    id: 1

要为特定主机配置路由表,请使用主机或组变量文件。

配置 IP 路由策略规则

可以通过将网络的 rules 属性设置为规则列表来配置 IP 路由策略规则。支持两种格式定义规则:字符串格式和字典格式。字符串格式规则仅受 CentOS Stream 和 Rocky Linux 系统支持。

字典格式规则

规则的字典格式是一个包含可选项目 fromtoprioritytable 的字典。 table 应是 network_route_tables 中定义的路由表的名称。

要将名为 example 的网络配置为具有使用路由表 exampleroutetable 处理来自子网 10.1.0.0/24 的流量的 IP 路由策略规则

networks.yml
example_rules:
  - from: 10.1.0.0/24
    table: exampleroutetable

这些规则将在映射到网络的每个主机上配置。

字符串格式规则(仅 CentOS Stream/Rocky Linux)

规则的字符串格式是附加到 ip rule <add|del> 以创建或删除规则的字符串。请注意,在使用 NetworkManager(使用 Rocky Linux 10 时的默认设置)时,必须通过 ID 指定表。

要将名为 example 的网络配置为具有使用 ID 为 1 的路由表处理来自子网 10.1.0.0/24 的流量的 IP 路由策略规则

networks.yml
example_rules:
  - from 10.1.0.0/24 table 1

这些规则将在映射到网络的每个主机上配置。

配置特定表的 IP 路由

可以通过将表的名称或 ID 添加到路由的 table 属性来将路由添加到特定路由表

要将名为 example 的网络配置为具有默认路由和指向子网 10.1.0.0/24 的“连接”(本地子网)路由,位于表 exampleroutetable

networks.yml
example_routes:
  - cidr: 0.0.0.0/0
    gateway: 10.1.0.1
    table: exampleroutetable
  - cidr: 10.1.0.0/24
    table: exampleroutetable

配置自定义 Neutron 物理网络名称

默认情况下,Kolla Ansible 使用从 physnet1physnetN 的 Neutron 物理网络名称,用于主机上的每个外部网络接口。

有时我们可能希望自定义使用的物理网络名称。这可能是为了允许并非所有主机都可以访问所有物理网络,或者使用更具描述性的名称。

例如,在为 Ironic 配置保留单独物理网络的环境中,控制器可能可以访问两个物理网络,而计算节点可以访问一个。我们可能会遇到控制器和计算节点使用不一致的物理网络名称的情况。为了避免这种情况,我们可以向这些网络添加 physical_network 属性。在以下示例中,Ironic 配置网络是 provision_wl,外部网络是 external

$KAYOBE_CONFIG_PATH/networks.yml
provision_wl_physical_network: physnet1
external_physical_network: physnet2

这样可以确保计算节点将 external 视为 physnet2,即使它是它们连接的唯一物理网络。

按主机网络配置

某些网络属性特定于主机在系统中的角色,这些属性存储在 ${KAYOBE_CONFIG_PATH}/inventory/group_vars/<group>/network-interfaces 中。支持以下属性

接口

连接到网络的网络接口的名称。

parent

在使用 systemd-networkd 语法配置 VLAN 接口时,父接口的名称。

bootproto

接口的启动协议。有效值为 staticdhcp。默认值为 static。设置为 dhcp 时,必须提供外部 DHCP 服务器。

defroute

是否将接口设置为默认路由。可以使用此属性禁用特定接口的默认网关配置。这对于忽略通过 DHCP 提供的网关地址特别有用。应设置为布尔值。默认情况下未设置。此属性仅受 Red Hat 系列发行版的支持。

bridge_ports

对于桥接接口,要添加到桥接的网络接口名称列表。

bridge_stp

注意

对于 Rocky Linux 10,将 bridge_stp 属性设置为 false,以保留与网络脚本的向后兼容性。这是因为 Network Manager 默认情况下在桥接上将 STP 设置为 true。

启用或禁用此桥接上的生成树协议 (STP)。应设置为布尔值。默认情况下在 Ubuntu 系统上未设置。

bond_mode

对于绑定接口,绑定的模式,例如 802.3ad。

bond_ad_select

对于绑定接口,要使用的 802.3ad 聚合选择逻辑。有效值为 stable(如果未配置则为默认选择逻辑)、bandwidthcount

bond_slaves

对于绑定接口,作为绑定从机的网络接口名称列表。

bond_miimon

对于绑定接口,MII 链路监控之间的时间(毫秒)。

bond_updelay

对于绑定接口,在声明接口启动之前等待的时间(毫秒)(应为 bond_miimon 的倍数)。

bond_downdelay

对于绑定接口,在声明接口关闭之前等待的时间(毫秒)(应为 bond_miimon 的倍数)。

bond_xmit_hash_policy

对于绑定接口,要用于绑定的 xmit_hash_policy。

bond_lacp_rate

对于绑定接口,要用于绑定的 lacp_rate。

ethtool_opts

注意

ethtool_opts 目前在 Ubuntu 上不受支持。

使用 ethtool 应用的物理网络接口选项。在绑定和桥接接口上使用时,设置将应用于底层接口。这应该是一串传递给 ethtool 工具的参数,例如 "-G ${DEVICE} rx 8192 tx 8192"

zone

注意

zone 目前在 Ubuntu 上不受支持。

要附加到网络接口的 firewalld 区域的名称。

IP 地址

如果关联的网络具有 cidr 属性,则将向接口分配 IP 地址。如果未在 network-allocation.yml 中静态分配,则 IP 地址将从由 allocation_pool_startallocation_pool_end 属性定义的范围内分配。

配置以太网接口

可以通过将网络的 interface 属性设置为以太网接口的名称来配置以太网接口。

要将名为 example 的网络配置为在 eth0 上具有以太网接口

inventory/group_vars/<group>/network-interfaces
example_interface: eth0

高级:配置(重命名)以太网接口系统名称

可以通过将特定接口的已知 MAC 地址绑定到其名称来显式配置以太网接口的名称,方法是将网络的 macaddress 属性设置为该接口的已知 MAC 地址。

警告

仅在 Ubuntu/Debian 操作系统上受支持。

要将名为 example 的网络配置为具有已知 MAC 地址 aa:bb:cc:dd:ee:ff 并将其从系统名称(可能是 eth0ens3 或任何其他名称)重命名为 lan0(新名称)

inventory/group_vars/<group>/network-interfaces
example_interface: lan0
example_macaddress: "aa:bb:cc:dd:ee:ff"

警告

在更改其名称之前,网络接口必须处于关闭状态。请参阅 systemd 项目中的 issue。因此,在 seed host configureovercloud host configure Kayobe 命令之后,可能需要重新启动配置的节点。

配置桥接接口

可以通过将网络的 interface 属性设置为桥接接口的名称,并将 bridge_ports 属性设置为将作为桥接成员端口添加的接口列表来配置 Linux 桥接接口。

要将名为 example 的网络配置为在 breth1 上具有桥接接口,以及单个端口 eth1

inventory/group_vars/<group>/network-interfaces
example_interface: breth1
example_bridge_ports:
  - eth1

桥接成员端口可以是以太网接口、绑定接口或 VLAN 接口。对于绑定接口,必须另外配置绑定(作为不同的命名网络),才能添加到桥接中。对于 VLAN 接口,底层以太网接口必须另外配置(作为不同的命名网络),才能添加到桥接中。

配置绑定接口

可以通过将网络的 interface 属性设置为绑定的主接口的名称,并将 bond_slaves 属性设置为将作为绑定从机添加的接口列表来配置绑定接口。

要将名为 example 的网络配置为具有主接口为 bond0 且有两个从机 eth0eth1 的绑定

inventory/group_vars/<group>/network-interfaces
example_interface: bond0
example_bond_slaves:
  - eth0
  - eth1

可选地,还可以配置绑定模式和 MII 监控间隔

inventory/group_vars/<group>/network-interfaces
example_bond_mode: 802.3ad
example_bond_miimon: 100

绑定从机可以是以太网接口或 VLAN 接口。对于 VLAN 接口,底层以太网接口必须另外配置(作为不同的命名网络),才能添加到绑定中。

配置 VLAN 接口

可以通过将网络的 interface 属性设置为 VLAN 接口的名称来配置 VLAN 接口。为了与所有受支持的主机操作系统兼容,接口名称通常必须采用 <parent interface>.<VLAN ID> 的形式。

要将名为 example 的网络配置为具有父接口为 eth2 且 VLAN 为 123 的 VLAN 接口

inventory/group_vars/<group>/network-interfaces
example_interface: eth2.123

为了保持配置的简洁性,可以引用网络的 vlan 属性

inventory/group_vars/<group>/network-interfaces
example_interface: "eth2.{{ example_vlan }}"

或者,在使用 Ubuntu 作为主机操作系统时,可以使用 systemd-networkd 支持的语法任意命名 VLAN 接口。在这种情况下,parent 属性必须指定底层接口

inventory/group_vars/<group>/network-interfaces
example_interface: "myvlan{{ example_vlan }}"
example_parent: "eth2"

以太网接口、桥接和绑定主接口都可以是 VLAN 接口的父接口。

桥接和 VLAN

直接将 VLAN 接口添加到桥接将允许桥接转发该 VLAN 的标记流量,而将 VLAN 接口添加到作为桥接成员端口的以太网或绑定接口将阻止桥接转发该 VLAN 的标记流量。

例如,如果您正在桥接 eth1breth1 并且希望从主机访问 VLAN 1234 作为标记 VLAN,同时仍然允许 Neutron 通过 Open vSwitch 访问该 VLAN 的流量,则您的设置应如下所示

$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
breth1          8000.56e6b95b4178       no              p-breth1-phy
                                                        eth1
$ sudo ip addr show | grep 1234 | head -1
10: breth1.1234@breth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

它不应该如下所示

$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
breth1          8000.56e6b95b4178       no              p-breth1-phy
                                                        eth1
$ sudo ip addr show | grep 1234 | head -1
10: eth1.1234@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

第二种配置可能需要防止特定流量,例如内部 API 网络,到达 Neutron。

域名服务 (DNS) 解析器配置

Kayobe 支持通过 resolv.conf 配置主机的 DNS 解析器。DNS 配置应添加到 dns.yml。例如

dns.yml
resolv_nameservers:
  - 8.8.8.8
  - 8.8.4.4
resolv_domain: example.com
resolv_search:
  - kayobe.example.com

还可以通过将 resolv_is_managed 设置为 false 来防止 kayobe 修改 resolv.conf

网络角色配置

为了提供系统网络拓扑的灵活性,Kayobe 将命名的网络映射到逻辑网络角色。单个命名网络可以执行多个角色,甚至根本不执行任何角色。可用的角色是

Overcloud 管理网络 (admin_oc_net_name)

用于访问 Overcloud 进行管理目的的网络名称,例如用于远程 SSH 访问。

Overcloud 带外网络 (oob_oc_net_name)

种子用于访问 Overcloud 的裸机主机带外管理控制器的网络名称。

Overcloud 配置网络 (provision_oc_net_name)

种子用于配置 Overcloud 的裸机主机的网络名称。

工作负载带外网络 (oob_wl_net_name)

Overcloud 主机用于访问工作负载的裸机主机的带外管理控制器的网络名称。

工作负载配置网络 (provision_wl_net_name)

用于由超云主机配置裸机工作负载主机的网络的名称。

工作负载清理网络 (cleaning_net_name)

用于由超云主机清理裸机工作负载主机的网络的名称。

内部网络 (internal_net_name)

用于暴露内部 OpenStack API 端点的网络的名称。

公共网络 (public_net_name)

用于暴露公共 OpenStack API 端点的网络的名称。

隧道网络 (tunnel_net_name)

Neutron 用于承载租户叠加网络流量的网络的名称。

外部网络 (external_net_names, 已弃用: external_net_name)

用于通过 Neutron 提供外部网络访问的网络的名称列表。如果定义了 external_net_name,则 external_net_names 默认情况下将包含该网络的列表。

存储网络 (storage_net_name)

用于承载存储数据流量的网络的名称。

存储管理网络 (storage_mgmt_net_name)

用于承载存储管理流量的网络的名称。

Swift 存储网络 (swift_storage_net_name)

用于承载 Swift 存储数据流量的网络的名称。默认值为存储网络 (storage_net_name)。

Swift 存储复制网络 (swift_storage_replication_net_name)

用于承载存储管理流量的网络的名称。默认值为存储管理网络 (storage_mgmt_net_name)

工作负载检查网络 (inspection_net_name)

用于对裸机工作负载主机执行硬件内省的网络的名称。

这些角色在 ${KAYOBE_CONFIG_PATH}/networks.yml 中配置。

警告

更改 external_net_names 在初始部署后可能会导致创建网络环路。Kayobe / Ansible 不会清理 OVS 中从该变量中删除的任何项目。任何映射到列表中网络名称的附加接口都将添加到桥接器中。为了避免创建环路,在通过 Kayobe 应用更改之前,必须手动在 OVS 中删除任何先前应该删除的条目。

配置网络角色

要在具有两个网络的系统中配置网络角色,例如 example1example2

networks.yml
admin_oc_net_name: example1
oob_oc_net_name: example1
provision_oc_net_name: example1
oob_wl_net_name: example1
provision_wl_net_name: example2
internal_net_name: example2
public_net_name: example2
tunnel_net_name: example2
external_net_names:
  - example2
storage_net_name: example2
storage_mgmt_net_name: example2
swift_storage_net_name: example2
swift_replication_net_name: example2
inspection_net_name: example2
cleaning_net_name: example2

超云管理网络

管理网络旨在用于远程访问超云主机。Kayobe 将分配给主机在此网络上的地址用作执行 playbook 时的 ansible_host。因此,配置此网络是必要的条件。

默认情况下,Kayobe 将使用超云配置网络作为管理网络。但是,可以配置单独的网络。为此,您应该在网络配置中覆盖 admin_oc_net_name

如果配置了单独的网络,应考虑以下要求

  • 管理网络必须配置为使用与配置网络相同的物理网络接口。这是因为 PXE MAC 地址用于查找云初始化网络配置,该配置发生在超云双向传输配置期间。

超云配置网络

如果使用种子来检查裸机超云主机,则需要使用 inspection_allocation_pool_startinspection_allocation_pool_end 属性定义种子 ironic inspector DHCP 服务器的 DHCP 分配池。

注意

此示例假定 example 网络映射到 provision_oc_net_name

要配置名为 example 的网络,并带有检查分配池

example_inspection_allocation_pool_start: 10.0.0.128
example_inspection_allocation_pool_end: 10.0.0.254

注意

此池不应与同一网络上的 kayobe 分配池重叠。

工作负载清理网络

可以可选地指定一个单独的清理网络,该网络由超云用于清理裸机工作负载(计算)主机。否则,将使用工作负载配置网络。需要使用清理网络的 neutron_allocation_pool_startneutron_allocation_pool_end 属性定义 neutron 的 IP 分配池。这控制了在清理期间分配给工作负载主机的 IP 地址。

注意

此示例假定 example 网络映射到 cleaning_net_name

要配置名为 example 的网络,并带有 neutron 配置分配池

example_neutron_allocation_pool_start: 10.0.1.128
example_neutron_allocation_pool_end: 10.0.1.195

注意

此池不应与同一网络上的 kayobe 或检查分配池重叠。

工作负载配置网络

如果使用超云配置裸机工作负载(计算)主机,则需要使用工作负载配置网络的 neutron_allocation_pool_startneutron_allocation_pool_end 属性定义超云 neutron 配置网络的 IP 分配池。

注意

此示例假定 example 网络映射到 provision_wl_net_name

要配置名为 example 的网络,并带有 neutron 配置分配池

example_neutron_allocation_pool_start: 10.0.1.128
example_neutron_allocation_pool_end: 10.0.1.195

注意

此池不应与同一网络上的 kayobe 或检查分配池重叠。

工作负载检查网络

如果使用超云检查裸机工作负载(计算)主机,则需要使用工作负载配置网络的 inspection_allocation_pool_startinspection_allocation_pool_end 属性定义超云 ironic inspector DHCP 服务器的 DHCP 分配池。

注意

此示例假定 example 网络映射到 provision_wl_net_name

要配置名为 example 的网络,并带有检查分配池

example_inspection_allocation_pool_start: 10.0.1.196
example_inspection_allocation_pool_end: 10.0.1.254

注意

此池不应与同一网络上的 kayobe 或 neutron 分配池重叠。

Neutron 网络

注意

这假定使用 neutron openvswitch ML2 机制驱动程序进行控制平面网络。

Neutron 操作的某些模式需要访问系统中的物理网络层 2。在 network 组中的主机(默认情况下,这与 controllers 组相同)运行 neutron 网络服务(Open vSwitch 代理、DHCP 代理、L3 代理、元数据代理等)。

kayobe 网络配置必须确保网络主机上的 neutron Open vSwitch 桥接器可以访问外部网络。如果使用裸机计算节点,它们也必须可以访问工作负载配置网络。可以通过确保外部和工作负载配置网络接口是桥接器来完成。Kayobe 将通过虚拟以太网对确保这些 Linux 桥接器与 neutron Open vSwitch 桥接器之间的连接。请参阅 配置桥接接口

网络到主机映射

使用变量 network_interfaces 将网络映射到主机。Kayobe 的 playbook 组变量为该变量定义了一些合理的默认值,适用于顶级标准组中的主机。这些默认值是使用网络角色通常由该组所需的网络角色设置的。

种子

默认情况下,种子连接到以下网络

  • 超云管理网络

  • 超云带外网络

  • 超云配置网络

可以通过将 seed_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 seed_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/seed.yml 中。

种子虚拟机管理程序

默认情况下,种子虚拟机管理程序连接到与种子相同的网络。

可以通过将 seed_hypervisor_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 seed_hypervisor_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/seed-hypervisor.yml 中。

基础架构虚拟机

默认情况下,基础架构虚拟机连接到以下网络

  • 超云管理网络

可以通过将 infra_vm_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 infra_vm_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/infra-vms.yml 中。

控制器

默认情况下,控制器连接到以下网络

  • 超云管理网络

  • 工作负载(计算)带外网络

  • 工作负载(计算)配置网络

  • 工作负载(计算)检查网络

  • 工作负载(计算)清理网络

  • 内部网络

  • 存储网络

此外,如果控制器也位于 network 组中,它们还会连接到以下网络

  • 公共网络

  • 外部网络

  • 隧道网络

可以通过将 controller_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 controller_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/controllers.yml 中。

网络主机

默认情况下,控制器提供 Neutron 网络服务和负载均衡。如果使用单独的网络主机(请参阅 示例 1:添加网络主机),它们连接到以下网络

  • 超云管理网络

  • 内部网络

  • 存储网络

  • 公共网络

  • 外部网络

  • 隧道网络

可以通过将 controller_network_host_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 controller_network_host_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/controllers.yml 中。

监控主机

默认情况下,监控主机连接到与控制器位于 controllers 组时相同的网络。

  • 超云管理网络

  • 内部网络

  • 公共网络

可以通过将 monitoring_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 monitoring_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/monitoring.yml 中。

存储主机

默认情况下,存储主机连接到以下网络

  • 超云管理网络

  • 内部网络

  • 存储网络

  • 存储管理网络

此外,如果启用了 Swift,它们还可以连接到 Swift 管理和复制网络。

虚拟化计算主机

默认情况下,虚拟化计算主机连接到以下网络

  • 超云管理网络

  • 内部网络

  • 存储网络

  • 隧道网络

可以通过将 compute_extra_network_interfaces 设置为要连接的附加网络的名称列表来扩展此列表。或者,可以通过设置 compute_network_interfaces 来完全覆盖该列表。这些变量位于 ${KAYOBE_CONFIG_PATH}/compute.yml 中。

其他主机

如果 kayobe 管理其他主机,则这些主机连接的网络可以在主机或组变量文件中定义。有关更多详细信息,请参阅 控制平面服务放置

完整示例

以下示例将完整的网络配置合并到单个系统配置中。在我们的示例云中,我们有三个网络:managementcloudexternal

              +------------+         +----------------+             +----------------+
              |            |         |                +-+           |                +-+
              |            |         |                | +-+         |  Bare metal    | +-+
              |    Seed    |         |  Cloud hosts   | | |         |  compute hosts | | |
              |            |         |                | | |         |                | | |
              |            |         |                | | |         |                | | |
              +-----+------+         +----------------+ | |         +----------------+ | |
                    |                 +-----------------+ |          +-----------------+ |
                    |                   +-----------------+            +-----------------+
                    |                        |  |  |                           |
                    |                        |  |  |                           |
                    |                        |  |  |                           |
                    |                        |  |  |                           |
management +--------+------------------------+----------------------------------------------+
                                                |  |                           |
cloud      +------------------------------------+------------------------------+------------+
                                                   |
external   +---------------------------------------+----------------------------------------+

management 网络用于访问服务器的 BMC,以及供 seed 用于检查和配置云主机。 cloud 网络承载所有内部控制平面和存储流量,并由控制平面用于配置裸机计算主机。最后,external 网络将云连接到外部世界。

我们可以如下描述这样的网络

networks.yml
---
# Network role mappings.
oob_oc_net_name: management
provision_oc_net_name: management
oob_wl_net_name: management
provision_wl_net_name: cloud
internal_net_name: cloud
public_net_name: external
external_net_name: external
storage_net_name: cloud
storage_mgmt_net_name: cloud
inspection_net_name: cloud

# management network definition.
management_cidr: 10.0.0.0/24
management_allocation_pool_start: 10.0.0.1
management_allocation_pool_end: 10.0.0.127
management_inspection_allocation_pool_start: 10.0.0.128
management_inspection_allocation_pool_end: 10.0.0.254

# cloud network definition.
cloud_cidr: 10.0.1.0/24
cloud_allocation_pool_start: 10.0.1.1
cloud_allocation_pool_end: 10.0.1.127
cloud_inspection_allocation_pool_start: 10.0.1.128
cloud_inspection_allocation_pool_end: 10.0.1.195
cloud_neutron_allocation_pool_start: 10.0.1.196
cloud_neutron_allocation_pool_end: 10.0.1.254

# external network definition.
external_cidr: 10.0.3.0/24
external_allocation_pool_start: 10.0.3.1
external_allocation_pool_end: 10.0.3.127
external_neutron_allocation_pool_start: 10.0.3.128
external_neutron_allocation_pool_end: 10.0.3.254
external_routes:
  - cidr: 10.0.4.0/24
    gateway: 10.0.3.1

我们可以将这些网络映射到 seed 和 controller 主机上的网络接口

inventory/group_vars/seed/network-interfaces
---
management_interface: eth0
inventory/group_vars/controllers/network-interfaces
---
management_interface: eth0
cloud_interface: breth1
cloud_bridge_ports:
  - eth1
external_interface: eth2

我们已经在 controller 上为 cloud 网络定义了一个桥接,这将允许它被插入到 neutron Open vSwitch 桥接中。

Kayobe 将为它管理的主机分配 IP 地址

network-allocation.yml
---
management_ips:
  seed: 10.0.0.1
  control0: 10.0.0.2
  control1: 10.0.0.3
  control2: 10.0.0.4
cloud_ips:
  control0: 10.0.1.1
  control1: 10.0.1.2
  control2: 10.0.1.3
external_ips:
  control0: 10.0.3.1
  control1: 10.0.3.2
  control2: 10.0.3.3

请注意,虽然不需要手动创建此文件,但这样做可以实现可预测的 IP 地址映射,这在某些情况下可能是有望的。