第 3 章 二级网络


3.1. 在 OVN-Kubernetes 上创建二级网络

作为集群管理员,您可以使用 NetworkAttachmentDefinition (NAD) 资源为集群配置二级网络。

注意

以后的 OpenShift Container Platform 版本中将添加对用户定义的网络作为二级网络的支持。

3.1.1. 配置 OVN-Kubernetes 二级网络

Red Hat OpenShift Networking OVN-Kubernetes 网络插件允许为 pod 配置二级网络接口。要配置二级网络接口,您必须在 NetworkAttachmentDefinition 自定义资源定义 (CRD)中定义配置。

注意

Pod 和多网络策略创建可能会处于待处理状态,直到节点的 OVN-Kubernetes control plane 代理处理了关联的 network-attachment-definition CRD。

您可以在第 2 层、第 3 层或 localnet 拓扑中配置 OVN-Kubernetes 二级网络。有关这些拓扑支持的功能的更多信息,请参阅"UserDefinedNetwork 和 NetworkAttachmentDefinition 支持列表"。

以下小节提供了 OVN-Kubernetes 当前允许从属网络的每个拓扑配置示例。

注意

网络名称必须是唯一的。例如,不支持使用多个带有不同配置的 NetworkAttachmentDefinition CRD。

3.1.1.1. OVN-Kubernetes 二级网络支持的平台

您可以在以下支持的平台中使用 OVN-Kubernetes 二级网络:

  • 裸机
  • IBM Power®
  • IBM Z®
  • IBM® LinuxONE
  • VMware vSphere
  • Red Hat OpenStack Platform (RHOSP)

3.1.1.2. OVN-Kubernetes 网络插件 JSON 配置表

下表描述了 OVN-Kubernetes CNI 网络插件的配置参数:

Expand
表 3.1. OVN-Kubernetes 网络插件 JSON 配置表
字段类型描述

cniVersion

string

CNI 规格版本。所需的值为 0.3.1

name

string

网络的名称。这些网络不是命名空间。例如,名为 l2-network 的网络可由不同命名空间中的 NetworkAttachmentDefinition 自定义资源(CR) 引用。此配置允许在不同命名空间中使用 NetworkAttachmentDefinition CR 的 pod 通过同一二级网络进行通信。但是,NetworkAttachmentDefinition CR 必须共享相同的特定于网络的参数,如 topology,subnets,mtu,excludeSubnets, 和 vlanID。只有将 topology 字段设置为 localnet 时,才应用 vlanID 参数。

type

string

用于配置的 CNI 插件的名称。这个值必须设置为 ovn-k8s-cni-overlay

topology

string

网络的拓扑配置。必须是 layer2localnet 之一。

subnets

string

用于集群间的网络的子网。

对于 "topology":"layer2" 部署,支持 IPv6 (2001:DBB::/64) 和双栈 (192.168.100.0/24,2001:DBB::/64) 子网。

在省略时,实现网络的逻辑交换机仅提供第 2 层通信,用户必须为 pod 配置 IP 地址。端口安全只阻止 MAC 欺骗。

mtu

string

最大传输单元 (MTU)。如果没有设置值,Cluster Network Operator (CNO)通过计算主网络接口中的 underlay MTU 的不同来设置默认的 MTU 值,如 pod 网络的 overlay MTU,如 Geneve (Generic Network Virtualization Encapsulation),以及任何启用的功能(如 IPsec)的字节容量。

netAttachDefName

string

包含此配置的网络附加定义 CRD 的元数据 namespacename。例如,如果在名为 l2-network 的命名空间 ns1NetworkAttachmentDefinition CRD 中定义此配置,则这应设置为 ns1/l2-network

excludeSubnets

string

以逗号分隔的 CIDR 和 IP 地址列表。IP 地址从可分配的 IP 地址池中删除,永远不会传递给 pod。

vlanID

整数

如果拓扑设置为 localnet,则指定的 VLAN 标签将分配给来自这个二级网络的流量。默认为不分配 VLAN 标签。

physicalNetworkName

string

如果拓扑设置为 localnet,您可以使用多个网络覆盖重复使用相同的物理网络映射。指定 OVN 覆盖连接到的物理网络的名称。省略时,默认值是 localnet 网络的 name。要隔离不同的网络,请确保在覆盖之间共享同一物理网络时使用不同的 VLAN 标签。

3.1.1.3. 与多网络策略兼容

多网络策略 API 由 k8s.cni.cncf.io API 组中的 MultiNetworkPolicy 自定义资源定义(CRD) 提供,与 OVN-Kubernetes 二级网络兼容。在定义网络策略时,可以使用的网络策略规则取决于 OVN-Kubernetes 二级网络是否定义了 subnets 字段。详情请查看下表:

Expand
表 3.2. 支持基于 subnets CNI 配置的多网络策略选择器
指定的 subnets 字段允许多网络策略选择器

  • podSelectornamespaceSelector
  • ipBlock

  • ipBlock

您可以使用 MultiNetworkPolicy 对象上的 k8s.v1.cni.cncf.io/policy-for 注解指向 NetworkAttachmentDefinition (NAD) 自定义资源(CR)。NAD CR 定义策略应用到的网络。只有在名为 blue2 的二级网络 CNI 配置中定义了 subnets 字段时,以下多网络策略才有效:

使用 pod 选择器的多网络策略示例

apiVersion: k8s.cni.cncf.io/v1beta1
kind: MultiNetworkPolicy
metadata:
  name: allow-same-namespace
  annotations:
    k8s.v1.cni.cncf.io/policy-for: blue2 
1

spec:
  podSelector:
  ingress:
  - from:
    - podSelector: {}
Copy to Clipboard Toggle word wrap

以下示例使用 ipBlock 网络策略选择器,它始终对 OVN-Kubernetes 二级网络有效:

使用 IP 块选择器的多网络策略示例

apiVersion: k8s.cni.cncf.io/v1beta1
kind: MultiNetworkPolicy
metadata:
  name:  ingress-ipblock
  annotations:
    k8s.v1.cni.cncf.io/policy-for: default/flatl2net
spec:
  podSelector:
    matchLabels:
      name: access-control
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 10.200.0.0/30
Copy to Clipboard Toggle word wrap

3.1.1.4. localnet 交换拓扑的配置

交换的 localnet 拓扑通过集群范围的逻辑切换到物理网络来连接作为网络附加定义 (NAD) 创建的工作负载。

您必须将二级网络映射到 ovs-bridge,才能将其用作 OVN-Kubernetes 二级网络。网桥映射允许网络流量访问物理网络。网桥映射将物理网络名称(也称为接口标签)与通过 Open vSwitch (OVS)创建的网桥相关联。

您可以创建一个 NodeNetworkConfigurationPolicy (NNCP) 对象( nmstate.io/v1 API 组的一部分),以声明性地创建映射。此 API 由 NMState Operator 提供。通过使用此 API,您可以将网桥映射应用到与指定 nodeSelector 表达式匹配的节点,如 node-role.kubernetes.io/worker: ''。使用这个声明方法,NMState Operator 会自动和透明地将二级网络配置应用到节点选择器指定的所有节点。

在附加二级网络时,您可以使用现有的 br-ex 网桥或创建新网桥。使用哪种方法取决于您的特定网络基础架构。请考虑以下方法:

  • 如果您的节点只包含一个网络接口,则必须使用现有的网桥。这个网络接口由 OVN-Kubernetes 拥有和管理,不得从 br-ex 网桥中删除它,或更改接口配置。如果您删除或更改网络接口,您的集群网络将停止工作。
  • 如果您的节点包含多个网络接口,您可以将不同的网络接口附加到新网桥,并将该网络接口用于二级网络。这种方法可用于从主集群网络进行流量隔离。

localnet1 网络在以下示例中映射到 br-ex 网桥:

共享网桥的映射示例

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: mapping 
1

spec:
  nodeSelector:
    node-role.kubernetes.io/worker: '' 
2

  desiredState:
    ovn:
      bridge-mappings:
      - localnet: localnet1 
3

        bridge: br-ex 
4

        state: present 
5
Copy to Clipboard Toggle word wrap

1 1
配置对象的名称。
2
节点选择器指定要将节点网络配置策略应用到的节点。
3
流量转发到 OVS 网桥的二级网络的名称。此二级网络必须与定义 OVN-Kubernetes 额外网络的 NetworkAttachmentDefinition CRD 的 spec.config.name 字段的名称匹配。
4
节点上的 OVS 网桥的名称。只有在指定 state: present 时,才需要这个值。
5
映射的状态。需要是 present(添加网桥)或 absent(删除网桥)。默认值 存在

以下 JSON 示例配置了一个名为 localnet1 的 localnet 二级网络。请注意,mtu 参数的值必须与映射到 br-ex 网桥接口的二级网络接口设置的 MTU 值匹配。

{
  "cniVersion": "0.3.1",
  "name": "localnet1",
  "type": "ovn-k8s-cni-overlay",
  "topology":"localnet",
  "physicalNetworkName": "localnet1",
  "subnets": "202.10.130.112/28",
  "vlanID": 33,
  "mtu": 1500,
  "netAttachDefName": "ns1/localnet-network",
  "excludeSubnets": "10.100.200.0/29"
}
Copy to Clipboard Toggle word wrap

在以下示例中,localnet2 网络接口连接到 ovs-br1 网桥。通过此附加,网络接口作为二级网络可用于 OVN-Kubernetes 网络插件。

具有多个接口的节点映射示例

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: ovs-br1-multiple-networks 
1

spec:
  nodeSelector:
    node-role.kubernetes.io/worker: '' 
2

  desiredState:
    interfaces:
    - name: ovs-br1 
3

      description: |-
        A dedicated OVS bridge with eth1 as a port
        allowing all VLANs and untagged traffic
      type: ovs-bridge
      state: up
      bridge:
        allow-extra-patch-ports: true
        options:
          stp: false
          mcast-snooping-enable: true 
4

        port:
        - name: eth1 
5

    ovn:
      bridge-mappings:
      - localnet: localnet2 
6

        bridge: ovs-br1 
7

        state: present 
8
Copy to Clipboard Toggle word wrap

1
指定配置对象的名称。
2
指定用于标识节点网络配置策略应用到的节点的节点选择器。
3
指定一个新的 OVS 网桥,与 OVN-Kubernetes 用于集群流量的默认网桥分开运行。
4
指定是否启用多播侦听。启用后,多播侦听可防止网络设备向所有网络成员填充多播流量。默认情况下,OVS 网桥不启用多播侦听。默认值为 false
5
指定主机系统上要与新的 OVS 网桥关联的网络设备。
6
指定将流量转发到 OVS 网桥的二级网络的名称。此名称必须与定义 OVN-Kubernetes 二级网络的 NetworkAttachmentDefinition CRD 中的 spec.config.name 字段的值匹配。
7
指定节点上的 OVS 网桥的名称。只有在设置了 state: present 时,才需要该值。
8
指定映射的状态。有效的值是 present - 添加网桥;或 absent - 删除网桥。默认值 存在

以下 JSON 示例配置了一个名为 localnet2 的 localnet 二级网络:请注意,mtu 参数的值必须与为 eth1 二级网络接口设置的 MTU 值匹配。

{
  "cniVersion": "0.3.1",
  "name": "localnet2",
  "type": "ovn-k8s-cni-overlay",
  "topology":"localnet",
  "physicalNetworkName": "localnet2",
  "subnets": "202.10.130.112/28",
  "vlanID": 33,
  "mtu": 1500,
  "netAttachDefName": "ns1/localnet-network",
  "excludeSubnets": "10.100.200.0/29"
}
Copy to Clipboard Toggle word wrap
3.1.1.4.1. 配置第 2 层切换拓扑

交换机(层 2)拓扑网络通过集群范围的逻辑交换机互连工作负载。此配置可用于 IPv6 和双栈部署。

注意

第 2 层切换拓扑网络只允许在集群中的 pod 间传输数据数据包。

以下 JSON 示例配置交换的二级网络:

{
  "cniVersion": "0.3.1",
  "name": "l2-network",
  "type": "ovn-k8s-cni-overlay",
  "topology":"layer2",
  "subnets": "10.100.200.0/24",
  "mtu": 1300,
  "netAttachDefName": "ns1/l2-network",
  "excludeSubnets": "10.100.200.0/29"
}
Copy to Clipboard Toggle word wrap

3.1.1.5. 为二级网络配置 pod

您必须通过 k8s.v1.cni.cncf.io/networks 注解来指定二级网络附加。

以下示例置备有两个二级附件的 pod,一个用于本指南中提供的每个附加配置。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.v1.cni.cncf.io/networks: l2-network
  name: tinypod
  namespace: ns1
spec:
  containers:
  - args:
    - pause
    image: k8s.gcr.io/e2e-test-images/agnhost:2.36
    imagePullPolicy: IfNotPresent
    name: agnhost-container
Copy to Clipboard Toggle word wrap

3.1.1.6. 使用静态 IP 地址配置 pod

以下示例使用静态 IP 地址置备一个 pod。

注意
  • 只有在二级网络附加(命名空间范围的对象)使用第 2 层或 localnet 拓扑时,您可以为 pod 的二级网络附加指定 IP 地址。
  • 只有在附加配置没有功能子网时,才能为 pod 指定静态 IP 地址。
apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.v1.cni.cncf.io/networks: '[
      {
        "name": "l2-network", 
1

        "mac": "02:03:04:05:06:07", 
2

        "interface": "myiface1", 
3

        "ips": [
          "192.0.2.20/24"
          ] 
4

      }
    ]'
  name: tinypod
  namespace: ns1
spec:
  containers:
  - args:
    - pause
    image: k8s.gcr.io/e2e-test-images/agnhost:2.36
    imagePullPolicy: IfNotPresent
    name: agnhost-container
Copy to Clipboard Toggle word wrap
1
网络的名称。这个值在所有 NetworkAttachmentDefinition CRD 之间必须是唯一的。
2
为接口分配的 MAC 地址。
3
为 pod 创建的网络接口的名称。
4
要分配给网络接口的 IP 地址。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat