24.9. 为 VRF 分配从属网络


作为集群管理员,您可以使用 CNI VRF 插件为虚拟路由和转发 (VRF) 域配置额外网络。此插件创建的虚拟网络与您指定的物理接口关联。

使用带有 VRF 实例的二级网络有以下优点:

工作负载隔离
通过为额外网络配置 VRF 实例来隔离工作负载流量。
提高了安全性
通过 VRF 域中的隔离网络路径启用更高的安全性。
多租户支持
通过网络分段支持每个租户的 VRF 域中唯一路由表的多租户。
注意

使用 VRF 的应用程序必须绑定到特定设备。通常的用法是在套接字中使用 SO_BINDTODEVICE 选项。SO_BINDTODEVICE 选项将套接字绑定到在传递接口名称中指定的设备,如 eth1。要使用 SO_BINDTODEVICE 选项,应用程序必须具有 CAP_NET_RAW 功能。

OpenShift Container Platform pod 不支持通过 ip vrf exec 命令使用 VRF。要使用 VRF,将应用程序直接绑定到 VRF 接口。

24.9.1. 使用 CNI VRF 插件创建额外网络附加

Cluster Network Operator (CNO) 管理额外网络定义。当您指定要创建的额外网络时,CNO 会自动创建 NetworkAttachmentDefinition 自定义资源(CR)。

注意

请勿编辑 Cluster Network Operator 所管理的 NetworkAttachmentDefinition CR。这样做可能会破坏额外网络上的网络流量。

要使用 CNI VRF 插件创建额外网络附加,请执行以下步骤。

先决条件

  • 安装 OpenShift Container Platform CLI(oc)。
  • 以具有 cluster-admin 权限的用户身份登录 OpenShift 集群。

流程

  1. 为额外网络附加创建 Network 自定义资源 (CR),并为额外网络插入 rawCNIConfig 配置,如下例所示。将 YAML 保存为文件 additional-network-attachment.yaml

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      additionalNetworks:
        - name: test-network-1
          namespace: additional-network-1
          type: Raw
          rawCNIConfig: '{
            "cniVersion": "0.3.1",
            "name": "macvlan-vrf",
            "plugins": [  1
            {
              "type": "macvlan",
              "master": "eth1",
              "ipam": {
                  "type": "static",
                  "addresses": [
                  {
                      "address": "191.168.1.23/24"
                  }
                  ]
              }
            },
            {
              "type": "vrf", 2
              "vrfname": "vrf-1",  3
              "table": 1001   4
            }]
          }'
    1
    插件必须是一个列表。列表中的第一个项必须是支持 VRF 网络的从属网络。列表中的第二个项目是 VRF 插件配置。
    2
    type 必须设为 vrf
    3
    vrfname 是接口分配的 VRF 的名称。如果 pod 中不存在,则创建它。
    4
    可选。table 是路由表 ID。默认情况下使用 tableid 参数。如果没有指定,CNI 会为 VRF 分配免费路由表 ID。
    注意

    只有在资源类型为 netdevice 时,VRF 才能正常工作。

  2. 创建 Network 资源:

    $ oc create -f additional-network-attachment.yaml
  3. 通过运行以下命令确认 CNO 创建了 NetworkAttachmentDefinition CR。将 <namespace> 替换为您在配置网络附加时指定的命名空间,如 additional-network-1

    $ oc get network-attachment-definitions -n <namespace>

    输出示例

    NAME                       AGE
    additional-network-1       14m

    注意

    CNO 创建 CR 之前可能会有延迟。

验证

  1. 创建 pod,并使用 VRF 实例将其分配给额外网络:

    1. 创建定义 Pod 资源的 YAML 文件:

      pod-additional-net.yaml 文件示例

      apiVersion: v1
      kind: Pod
      metadata:
       name: pod-additional-net
       annotations:
         k8s.v1.cni.cncf.io/networks: '[
             {
                     "name": "test-network-1" 1
             }
       ]'
      spec:
       containers:
       - name: example-pod-1
         command: ["/bin/bash", "-c", "sleep 9000000"]
         image: centos:8

      1
      使用 VRF 实例指定额外网络的名称。
    2. 运行以下命令来创建 Pod 资源:

      $ oc create -f pod-additional-net.yaml

      输出示例

      pod/test-pod created

  2. 验证 Pod 网络附加是否已连接到 VRF 额外网络。使用 pod 启动远程会话并运行以下命令:

    $ ip vrf show

    输出示例

    Name              Table
    -----------------------
    vrf-1             1001

  3. 确认 VRF 接口是额外接口的控制器:

    $ ip link

    输出示例

    5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.