×

作为集群管理员,您可以收集有关集群中 Pod 网络流量的信息,以帮助以下领域:

  • 监控 Pod 网络上的入口和出口流量。

  • 排查性能问题。

  • 收集用于容量规划和安全审计的数据。

启用网络流量收集时,只会收集有关流量的元数据。例如,不会收集数据包数据,但会收集协议、源地址、目标地址、端口号、字节数和其他数据包级信息。

数据以以下一种或多种记录格式收集:

  • NetFlow

  • sFlow

  • IPFIX

当您使用一个或多个收集器 IP 地址和端口号配置集群网络运算符 (CNO) 时,运算符会在每个节点上配置 Open vSwitch (OVS) 以将网络流量记录发送到每个收集器。

您可以配置运算符以将记录发送到多种类型的网络流量收集器。例如,您可以将记录发送到 NetFlow 收集器,也可以将记录发送到 sFlow 收集器。

当 OVS 将数据发送到收集器时,每种类型的收集器都会收到相同的记录。例如,如果您配置了两个 NetFlow 收集器,则节点上的 OVS 会将相同的记录发送到这两个收集器。如果您还配置了两个 sFlow 收集器,则这两个 sFlow 收集器会收到相同的记录。但是,每种收集器类型都有唯一的记录格式。

收集网络流量数据并将记录发送到收集器会影响性能。节点以较慢的速度处理数据包。如果性能影响太大,您可以删除收集器的目标以禁用收集网络流量数据并恢复性能。

启用网络流量收集器可能会影响集群网络的整体性能。

用于跟踪网络流量的网络对象配置

下表显示了在集群网络运算符 (CNO) 中配置网络流量收集器的字段:

表 1. 网络流量配置
字段 类型 描述

metadata.name

字符串

CNO 对象的名称。此名称始终为cluster

spec.exportNetworkFlows

对象

netFlowsFlowipfix 中的一种或多种。

spec.exportNetworkFlows.netFlow.collectors

数组

最多 10 个收集器的 IP 地址和网络端口对列表。

spec.exportNetworkFlows.sFlow.collectors

数组

最多 10 个收集器的 IP 地址和网络端口对列表。

spec.exportNetworkFlows.ipfix.collectors

数组

最多 10 个收集器的 IP 地址和网络端口对列表。

将以下清单应用于 CNO 后,操作员会在集群中的每个节点上配置 Open vSwitch (OVS),以便将网络流量记录发送到侦听地址为 192.168.1.99:2056 的 NetFlow 收集器。

跟踪网络流量的示例配置
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  exportNetworkFlows:
    netFlow:
      collectors:
        - 192.168.1.99:2056

添加网络流量收集器的目标

作为集群管理员,您可以配置集群网络操作员 (CNO) 以将有关 Pod 网络的网络流量元数据发送到网络流量收集器。

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

  • 您已使用具有 cluster-admin 权限的用户登录到集群。

  • 您拥有一个网络流量收集器,并知道其侦听的 IP 地址和端口。

步骤
  1. 创建一个补丁文件,用于指定网络流量收集器类型以及收集器的 IP 地址和端口信息。

    spec:
      exportNetworkFlows:
        netFlow:
          collectors:
            - 192.168.1.99:2056
  2. 使用网络流量收集器配置 CNO。

    $ oc patch network.operator cluster --type merge -p "$(cat <file_name>.yaml)"
    示例输出
    network.operator.openshift.io/cluster patched
验证

通常不需要验证。您可以运行以下命令以确认每个节点上的 Open vSwitch (OVS) 是否已配置为将网络流量记录发送到一个或多个收集器。

  1. 查看操作员配置以确认 exportNetworkFlows 字段是否已配置。

    $ oc get network.operator cluster -o jsonpath="{.spec.exportNetworkFlows}"
    示例输出
    {"netFlow":{"collectors":["192.168.1.99:2056"]}}
  2. 查看每个节点上 OVS 中的网络流量配置。

    $ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node -o jsonpath='{[email protected][*]}{.metadata.name}{"\n"}{end}');
      do ;
        echo;
        echo $pod;
        oc -n openshift-ovn-kubernetes exec -c ovnkube-controller $pod \
          -- bash -c 'for type in ipfix sflow netflow ; do ovs-vsctl find $type ; done';
    done
    示例输出
    ovnkube-node-xrn4p
    _uuid               : a4d2aaca-5023-4f3d-9400-7275f92611f9
    active_timeout      : 60
    add_id_to_interface : false
    engine_id           : []
    engine_type         : []
    external_ids        : {}
    targets             : ["192.168.1.99:2056"]
    
    ovnkube-node-z4vq9
    _uuid               : 61d02fdb-9228-4993-8ff5-b27f01a29bd6
    active_timeout      : 60
    add_id_to_interface : false
    engine_id           : []
    engine_type         : []
    external_ids        : {}
    targets             : ["192.168.1.99:2056"]-
    
    ...

删除所有网络流量收集器的目标

作为集群管理员,您可以配置集群网络操作员 (CNO) 以停止将网络流量元数据发送到网络流量收集器。

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

  • 您已使用具有 cluster-admin 权限的用户登录到集群。

步骤
  1. 删除所有网络流量收集器。

    $ oc patch network.operator cluster --type='json' \
        -p='[{"op":"remove", "path":"/spec/exportNetworkFlows"}]'
    示例输出
    network.operator.openshift.io/cluster patched