3.2. 了解使用 OpenStackNetConfig CRD 的虚拟机桥接
使用 OpenStackVMSet CRD 创建虚拟机(VM)时,您必须将这些虚拟机连接到相关的 Red Hat OpenStack Platform (RHOSP)网络。您可以使用 OpenStackNetConfig CRD 在 Red Hat OpenShift Container Platform (RHOCP) worker 节点上创建所需的网桥,并将 Controller 虚拟机连接到 RHOSP overcloud 网络。RHOSP 需要专用的 NIC 才能部署。
OpenStackNetConfig CRD 包含一个 attachConfigurations 选项,它是 nodeNetworkConfigurationPolicy 的哈希值。OpenStackNetConfig 自定义资源(CR)中的每个指定的 attachConfiguration 都会创建一个 NetworkAttachmentDefinition 对象,它将网络接口数据传递到 RHOCP 集群中的 NodeNetworkConfigurationPolicy 资源。NodeNetworkConfigurationPolicy 资源使用 nmstate API 配置每个 RHOCP worker 节点上网络配置的最终状态。每个网络的 NetworkAttachmentDefinition 对象定义 Multus CNI 插件配置。当您为 NetworkAttachmentDefinition 对象指定 VLAN ID 时,Multus CNI 插件在网桥上启用 vlan-filtering。OpenStackNetConfig CR 中配置的每个网络都引用其中一个 attachConfigurations。在虚拟机中,每个网络都有一个接口。
以下示例创建了一个 br-osp attachConfiguration,并将 nodeNetworkConfigurationPolicy 选项配置为创建一个 Linux 网桥,并将网桥连接到每个 worker 上的 NIC。应用此配置时,NodeNetworkConfigurationPolicy 对象将每个 RHOCP worker 节点配置为与所需的最终状态匹配:每个 worker 包含一个名为 br-osp 的新网桥,该网桥连接到每个主机上的 enp6s0 NIC。所有 RHOSP Controller 虚拟机都可以连接到 control plane 网络流量的 br-osp 网桥。
apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackNetConfig
metadata:
name: openstacknetconfig
spec:
attachConfigurations:
br-osp:
nodeNetworkConfigurationPolicy:
nodeSelector:
node-role.kubernetes.io/worker: ""
desiredState:
interfaces:
- bridge:
options:
stp:
enabled: false
port:
- name: enp6s0
description: Linux bridge with enp6s0 as a port
name: br-osp
state: up
type: linux-bridge
mtu: 1500
…
networks:
- name: Control
nameLower: ctlplane
subnets:
- name: ctlplane
ipv4:
allocationEnd: 192.168.25.250
allocationStart: 192.168.25.100
cidr: 192.168.25.0/24
gateway: 192.168.25.1
attachConfiguration: br-osp
如果通过 VLAN 20 指定内部 API 网络,您可以设置 attachConfiguration 选项来修改每个 RHOCP worker 节点上的网络配置,并将 VLAN 连接到现有的 br-osp 网桥:
apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackNetConfig
metadata:
name: openstacknetconfig
spec:
attachConfigurations:
br-osp:
...
networks:
...
- isControlPlane: false
mtu: 1500
name: InternalApi
nameLower: internal_api
subnets:
- attachConfiguration: br-osp
ipv4:
allocationEnd: 172.17.0.250
allocationStart: 172.17.0.10
cidr: 172.17.0.0/24
gateway: 172.17.0.1
routes:
- destination: 172.17.1.0/24
nexthop: 172.17.0.1
- destination: 172.17.2.0/24
nexthop: 172.17.0.1
name: internal_api
vlan: 20
br-osp 已存在,并连接到每个主机上的 enp6s0 NIC,因此不会更改网桥本身。但是,内部API OpenStackNet 将 VLAN 20 与这个网络关联,这意味着 RHOSP Controller 虚拟机可以连接到内部 API 网络流量的 br-osp 网桥上的 VLAN 20。
使用 OpenStackVMSet CRD 创建虚拟机时,虚拟机会使用连接到每个网络的多个 Virtio 设备。OpenShift Virtualization 按照字母顺序对网络名称进行排序,但默认网络除外,这是第一个接口。例如,如果您使用 OpenStackNetConfig 创建默认 RHOSP 网络,则会为 Controller 虚拟机生成以下接口配置:
interfaces:
- masquerade: {}
model: virtio
name: default
- bridge: {}
model: virtio
name: ctlplane
- bridge: {}
model: virtio
name: external
- bridge: {}
model: virtio
name: internalapi
- bridge: {}
model: virtio
name: storage
- bridge: {}
model: virtio
name: storagemgmt
- bridge: {}
model: virtio
name: tenant
此配置会为 Controller 节点生成以下网络到接口映射:
| Network | Interface |
|---|---|
| default | nic1 |
| ctlplane | nic2 |
| external | nic3 |
| internalapi | nic4 |
| storage | nic5 |
| storagemgmt | nic6 |
| tenant | nic7 |
OpenStackVMSet 使用的角色 NIC 模板是自动生成的。您可以覆盖自定义 NIC 模板文件中的默认配置,< role>-nic-template.j2,如 controller-nic-template.j2。您必须将自定义 NIC 文件添加到包含 overcloud 配置的 tarball 文件中,该文件是使用 OpenShift ConfigMap 对象实现的。如需更多信息,请参阅第 4 章。使用 director Operator 自定义 overcloud.