×

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

在执行以下文档中的任何任务之前,请确保您已安装 SR-IOV 网络运算符

InfiniBand 设备配置对象

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

以下 YAML 描述了一个 `SriovIBNetwork` 对象

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovIBNetwork
metadata:
  name: <name> (1)
  namespace: openshift-sriov-network-operator (2)
spec:
  resourceName: <sriov_resource_name> (3)
  networkNamespace: <target_namespace> (4)
  ipam: |- (5)
    {}
  linkState: <link_state> (6)
  capabilities: <capabilities> (7)
1 对象的名称。SR-IOV 网络运算符将创建具有相同名称的 `NetworkAttachmentDefinition` 对象。
2 安装 SR-IOV 运算符的命名空间。
3 来自定义此附加网络的 SR-IOV 硬件的 `SriovNetworkNodePolicy` 对象的 `spec.resourceName` 参数的值。
4 `SriovIBNetwork` 对象的目标命名空间。只有目标命名空间中的 Pod 才能连接到网络设备。
5 可选:作为 YAML 块标量的 IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。
6 可选:虚拟函数 (VF) 的链路状态。允许的值为 `enable`、`disable` 和 `auto`。
7 可选:为此网络配置的功能。您可以指定 `'{ "ips": true }'` 以启用 IP 地址支持,或指定 `'{ "infinibandGUID": true }'` 以启用 IB 全局唯一标识符 (GUID) 支持。

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

IP 地址管理 (IPAM) 容器网络接口 (CNI) 插件为其他 CNI 插件提供 IP 地址。

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

  • 静态分配。

  • 通过 DHCP 服务器进行动态分配。您指定的 DHCP 服务器必须能够从附加网络访问。

  • 通过 Whereabouts IPAM CNI 插件进行动态分配。

静态 IP 地址分配配置

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

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

type

字符串

IPAM 地址类型。需要值为 static

addresses

数组

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

routes

数组

指定要在 Pod 内配置的路由的对象数组。

dns

数组

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

addresses 数组需要具有以下字段的对象

表 2. ipam.addresses[] 数组
字段 类型 描述

address

字符串

您指定的 IP 地址和网络前缀。例如,如果您指定 10.10.21.10/24,则附加网络将分配 10.10.21.10 的 IP 地址,子网掩码为 255.255.255.0

gateway

字符串

将出站网络流量路由到的默认网关。

表 3. ipam.routes[] 数组
字段 类型 描述

dst

字符串

CIDR 格式的 IP 地址范围,例如 192.168.17.0/240.0.0.0/0(用于默认路由)。

gw

字符串

路由网络流量的网关。

表 4. ipam.dns 对象
字段 类型 描述

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"
        }
      ]
  }
}

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

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

DHCP 租约续期

Pod 在创建时获取其原始 DHCP 租约。该租约必须由在集群上运行的最小 DHCP 服务器部署定期续期。

要触发 DHCP 服务器的部署,您必须通过编辑集群网络操作员配置来创建 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"
        }
      }
  # ...
表 5. ipam DHCP 配置对象
字段 类型 描述

type

字符串

IPAM 地址类型。需要值为 dhcp

动态 IP 地址 (DHCP) 分配配置示例
{
  "ipam": {
    "type": "dhcp"
  }
}

使用 Whereabouts 进行动态 IP 地址分配配置

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

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

动态 IP 地址配置对象

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

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

type

字符串

IPAM 地址类型。需要值为 whereabouts

range

字符串

CIDR 表示法中的 IP 地址和范围。IP 地址将从此地址范围内分配。

exclude

数组

可选:零个或多个 CIDR 表示法中的 IP 地址和范围列表。不会分配排除的地址范围内的 IP 地址。

network_name

字符串

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

使用 Whereabouts 的动态 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 地址范围的 Whereabouts 进行动态 IP 地址分配

以下示例显示了使用重叠 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 匹配。

创建动态分配双栈 IP 地址的配置

双栈 IP 地址分配可以使用 ipRanges 参数进行配置,用于:

  • 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 添加到附加网络”。

  4. 验证是否已分配所有 IP 地址。

  5. 运行以下命令以确保 IP 地址已作为元数据分配。

    $ oc exec -it mypod -- ip a

配置 SR-IOV 附加网络

您可以通过创建 SriovIBNetwork 对象来配置使用 SR-IOV 硬件的附加网络。创建 SriovIBNetwork 对象时,SR-IOV 网络操作员会自动创建一个 NetworkAttachmentDefinition 对象。

如果 SriovIBNetwork 对象已附加到任何处于 running 状态的 Pod,请不要修改或删除它。

先决条件
  • 安装 OpenShift CLI (oc)。

  • 以具有 cluster-admin 权限的用户身份登录。

步骤
  1. 创建一个 SriovIBNetwork 对象,然后将 YAML 保存到 <name>.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>