18.4. 配置 SR-IOV InfiniBand 网络附加


您可以为集群中的单根 I/O 虚拟化(SR-IOV)设备配置 InfiniBand(IB)网络附加。

在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator

18.4.1. Infiniband 设备配置对象

您可以通过定义 SriovIBNetwork 对象来配置 InfiniBand(IB)网络设备。

以下 YAML 描述了 SriovIBNetwork 对象:

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovIBNetwork
metadata:
  name: <name>
  namespace: openshift-sriov-network-operator
spec:
  resourceName: <sriov_resource_name>
  networkNamespace: <target_namespace>
  ipam: |-
    {}
  linkState: <link_state>
  capabilities: <capabilities>

其中:

name
对象的名称。SR-IOV Network Operator 创建一个名称相同的 NetworkAttachmentDefinition 对象。
namespace
安装 SR-IOV Operator 的命名空间。
resourceName
用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy 对象中的 spec.resourceName 参数的值。
networkNamespace
SriovIBNetwork 对象的目标命名空间。只有目标命名空间中的 pod 可以附加到网络设备。
ipam
可选参数。为 IPAM CNI 插件指定一个配置对象做为一个 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
linkState
可选参数。虚拟功能(VF)的链接状态。允许的值是 enabledisableauto
功能
可选参数。为此网络配置功能。您可以指定 '{ "ips": true }' 来启用 IP 地址支持,或 '{ "infinibandGUID": true }' 来启用 IB Global Unique Identifier (GUID)支持。

18.4.1.1. 为动态分配双栈 IP 地址创建配置

您可以动态地将双栈 IP 地址分配给二级网络,以便 pod 可以通过 IPv4 和 IPv6 地址进行通信。

您可以在 ipRanges 参数中配置以下 IP 地址分配类型:

  • IPv4 地址
  • IPv6 地址
  • 多个 IP 地址分配

流程

  1. type 设置为 whereabouts
  2. 使用 ipRanges 来分配 IP 地址,如下例所示:

    cniVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        type: Raw
        rawCNIConfig: |-
          {
           "name": "whereabouts-dual-stack",
           "cniVersion": "0.3.1,
           "type": "bridge",
           "ipam": {
             "type": "whereabouts",
             "ipRanges": [
                      {"range": "192.168.10.0/24"},
                      {"range": "2001:db8::/64"}
                  ]
           }
          }
  3. 将二级网络附加到 pod。如需更多信息,请参阅"将 pod 添加到二级网络"。

验证

  • 输入以下命令验证所有 IP 地址是否已分配给 pod 命名空间内的网络接口:

    $ oc exec -it <pod_name> -- ip a

    其中:

    <podname>
    pod 的名称。

18.4.1.2. 配置网络附加的 IP 地址分配

对于二级网络,可以使用 IP 地址管理 (IPAM) CNI 插件来分配 IP 地址,该插件支持多种分配方法,包括动态主机配置协议 (DHCP) 和静态分配。

您可以使用以下 IP 地址分配类型:

  • 静态分配。
  • 通过 DHCP 服务器进行动态分配。您指定的 DHCP 服务器必须可从额外网络访问。
  • 通过 Whereabouts IPAM CNI 插件进行动态分配。
18.4.1.2.1. 静态 IP 地址分配配置

下表描述了静态 IP 地址分配的配置:

Expand
表 18.8. ipam 静态配置对象
字段类型描述

type

string

IPAM 地址类型。值必须是 static

addresses

数组

指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。

Routes

数组

指定要在 pod 中配置的路由的一组对象。

dns

数组

可选:指定 DNS 配置的对象数组。

address 数组需要带有以下字段的对象:

Expand
表 18.9. ipam.addresses[] array
字段类型描述

address

string

您指定的 IP 地址和网络前缀。例如,如果您指定了 10.10.21.10/24,二级网络会分配一个 IP 地址 10.10.21.10,子网掩码为 255.255.255.0。

gateway

string

出口网络流量要路由到的默认网关。

Expand
表 18.10. ipam.routes[] array
字段类型描述

dst

string

CIDR 格式的 IP 地址范围,如 192.168.17.0/24 或默认路由 0.0.0.0/0

gw

string

路由网络流量的网关。

Expand
表 18.11. ipam.dns object
字段类型描述

nameservers

数组

发送 DNS 查询的一个或多个 IP 地址的数组。

domain

数组

要附加到主机名的默认域。例如,如果将域设置为 example.com,对 example-host 的 DNS 查找查询将被改写为 example-host.example.com

search

数组

在 DNS 查找查询过程中,附加到非限定主机名(如 example-host)的域名的数组。

静态 IP 地址分配配置示例

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7/24"
        }
      ]
  }
}

18.4.1.2.2. 动态 IP 地址(DHCP)分配配置

pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。

重要

对于以太网网络附加,SR-IOV Network Operator 不会创建 DHCP 服务器部署。Cluster Network Operator 负责创建最小 DHCP 服务器部署。

要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:

shim 网络附加定义示例

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    type: Raw
    rawCNIConfig: |-
      {
        "name": "dhcp-shim",
        "cniVersion": "0.3.1",
        "type": "bridge",
        "ipam": {
          "type": "dhcp"
        }
      }
  # ...

其中:

type
为集群指定动态 IP 地址分配。

下表描述了使用 DHCP 进行动态 IP 地址地址分配的配置参数。

Expand
表 18.12. ipam DHCP 配置对象
字段类型描述

type

string

IPAM 地址类型。需要值 dhcp

以下 JSON 示例描述了使用 DHCP 进行动态 IP 地址地址分配的配置 p。

动态 IP 地址(DHCP)分配配置示例

{
  "ipam": {
    "type": "dhcp"
  }
}

Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给额外网络。

Whereabouts CNI 插件还支持在单独的 NetworkAttachmentDefinition CRD 中多次出现同一 CIDR 范围的重叠 IP 地址范围和配置。这在多租户环境中提供了更大的灵活性和管理功能。

18.4.1.2.3.1. 动态 IP 地址配置对象

下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置对象:

Expand
表 18.13. ipam whereabouts 配置对象
字段类型描述

type

string

IPAM 地址类型。需要 abouts 的值。

range

string

CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。

exclude

数组

可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。

network_name

string

可选:帮助确保每个 pod 的组或域都有自己的一组 IP 地址,即使它们共享相同的 IP 地址范围。设置此字段对于保持网络独立和组织非常重要,特别是在多租户环境中。

以下示例显示了使用 Whereabouts 的动态地址分配配置:

Whereabouts 动态 IP 地址分配

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/27",
    "exclude": [
       "192.0.2.192/30",
       "192.0.2.196/32"
    ]
  }
}

以下示例显示了一个动态 IP 地址分配,它将重叠的 IP 地址范围用于多租户网络。

NetworkAttachmentDefinition 1

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/29",
    "network_name": "example_net_common", 
1

  }
}

1
可选。如果设置,必须与 NetworkAttachmentDefinition 2network_name 匹配。

NetworkAttachmentDefinition 2

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/24",
    "network_name": "example_net_common", 
1

  }
}

1
可选。如果设置,必须与 NetworkAttachmentDefinition 1network_name 匹配。
18.4.1.2.4. 配置 SR-IOV 额外网络

您可以通过创建一个 SriovIBNetwork 对象来配置使用 SR-IOV 硬件的额外网络。创建 SriovIBNetwork 对象时,SR-IOV Network Operator 会自动创建一个 NetworkAttachmentDefinition 对象。

注意

如果一个 SriovIBNetwork 对象已被附加到状态为 running 的 pod,则不要修改或删除它。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建一个 SriovIBNetwork 对象,然后在 <name>.yaml 文件中保存 YAML,其中 <name> 是这个额外网络的名称。对象规格可能类似以下示例:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovIBNetwork
    metadata:
      name: attach1
      namespace: openshift-sriov-network-operator
    spec:
      resourceName: net1
      networkNamespace: project2
      ipam: |-
        {
          "type": "host-local",
          "subnet": "10.56.217.0/24",
          "rangeStart": "10.56.217.171",
          "rangeEnd": "10.56.217.181",
          "gateway": "10.56.217.1"
        }
  2. 运行以下命令来创建对象:

    $ oc create -f <name>.yaml

    这里的 <name> 指定额外网络的名称。

  3. 可选: 要确认与您在上一步中创建的 SriovIBNetwork 对象关联的 NetworkAttachmentDefinition 对象是否存在,请输入以下命令。将 <namespace> 替换为您在 SriovIBNetwork 对象中指定的 networkNamespace。

    $ oc get net-attach-def -n <namespace>

将 pod 附加到额外网络时,您可以指定运行时配置来为 pod 进行特定的自定义。例如,,您可以请求特定的 MAC 硬件地址。

您可以通过在 pod 规格中设置注解来指定运行时配置。注解键是 k8s.v1.cni.cncf.io/network,它接受一个 JSON 对象来描述运行时配置。

以下 JSON 描述了基于 InfiniBand 的 SR-IOV 网络附加的运行时配置选项。

[
  {
    "name": "<network_attachment>",
    "infiniband-guid": "<guid>",
    "ips": ["<cidr_range>"]
  }
]

其中:

name
SR-IOV 网络附加定义 CR 的名称。
infiniband-guid
SR-IOV 设备的 InfiniBand GUID。要使用这个功能,还必须在 SriovIBNetwork 对象中指定 { "infinibandGUID": true }
ips
从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 IP 地址。支持 IPv4 和 IPv6 IP 地址。要使用这个功能,你还必须在 SriovIBNetwork 对象中指定 { "ips": true }
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  annotations:
    k8s.v1.cni.cncf.io/networks: |-
      [
        {
          "name": "ib1",
          "infiniband-guid": "c2:11:22:33:44:55:66:77",
          "ips": ["192.168.10.1/24", "2001::1/64"]
        }
      ]
spec:
  containers:
  - name: sample-container
    image: <image>
    imagePullPolicy: IfNotPresent
    command: ["sleep", "infinity"]
18.4.1.2.6. 将 pod 添加到额外网络

您可以将 pod 添加到二级网络。pod 继续通过默认网络发送与集群相关的普通网络流量。

创建 pod 时会附加额外网络。但是,如果 pod 已存在,您无法为其附加额外网络。

pod 必须与额外网络处于相同的命名空间。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 登录到集群。

流程

  1. Pod 对象添加注解。只能使用以下注解格式之一:

    1. 要在没有自定义的情况下附加二级网络,请使用以下格式添加注解:

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]

      其中:

      k8s.v1.cni.cncf.io/networks
      指定要与 pod 关联的二级网络的名称。要指定多个二级网络,请使用逗号分隔每个网络。逗号之间不可包括空格。如果您多次指定相同的二级网络,则该 pod 会将多个网络接口附加到该网络。
    2. 要通过自定义来附加二级网络,请添加具有以下格式的注解:

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: |-
            [
              {
                "name": "<network>",
                "namespace": "<namespace>",
                "default-route": ["<default_route>"]
              }
            ]

      其中:

      name
      指定 NetworkAttachmentDefinition 对象定义的二级网络的名称。
      namespace
      指定定义 NetworkAttachmentDefinition 对象的命名空间。
      default-route
      可选参数。为默认路由指定覆盖,如 192.168.17.1
  2. 运行以下命令来创建 pod。

    $ oc create -f <name>.yaml

    <name> 替换为 pod 的名称。

  3. 可选:输入以下命令确认 pod CR 中是否存在注解。将 <name> 替换为 pod 的名称。

    $ oc get pod <name> -o yaml

    在以下示例中,example-pod pod 附加到 net1 额外网络:

    $ oc get pod example-pod -o yaml
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: macvlan-bridge
        k8s.v1.cni.cncf.io/network-status: |-
          [{
              "name": "openshift-sdn",
              "interface": "eth0",
              "ips": [
                  "10.128.2.14"
              ],
              "default": true,
              "dns": {}
          },{
              "name": "macvlan-bridge",
              "interface": "net1",
              "ips": [
                  "20.2.2.100"
              ],
              "mac": "22:2f:60:a5:f8:00",
              "dns": {}
          }]
      name: example-pod
      namespace: default
    spec:
      ...
    status:
      ...

    其中:

    k8s.v1.cni.cncf.io/network-status
    指定对象的 JSON 数组。每个对象描述附加到 pod 的二级网络的状态。注解值保存为纯文本值。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部