Network Observability(网络可观察性)


OpenShift Container Platform 4.16

在 OpenShift Container Platform 中配置和使用 Network Observability Operator

摘要

使用 Network Observability Operator 观察和分析 OpenShift Container Platform 集群的网络流量流。

第 1 章 Network Observability Operator 发行注记

查看 Network Observability Operator 的新功能、增强功能、固定问题和已知问题。本发行注记提供了帮助您了解最新 Operator 发行版本中的更改和安全公告的信息。

Network Observability Operator 可让管理员观察和分析 OpenShift Container Platform 集群的网络流量流。

本发行注记介绍了 OpenShift Container Platform 中 Network Observability Operator 的开发。

1.1. Network Observability Operator 1.11.1 公告

您可以查看 Network Observability Operator 1.11.1 发行版本的公告。

1.2. Network Observability Operator 1.11.1 修复的问题

Network Observability Operator 1.11.1 发行版本包含几个固定问题,改进了 OpenShift Container Platform Web 控制台中的 eBPF 代理性能和用户体验。

eBPF 代理内存用量优化

在此次更新之前,eBPF 代理中的一个回归会导致内核内存被有意保留,用于禁用的功能。这会导致代理的平均内存用量高于预期。

在这个版本中,eBPF 代理可确保在禁用功能时保留内核内存。因此,代理的内存占用会减少,资源分配效率更高。

NETOBSERV-2656

改进了仅 Prometheus 模式中的 DNS 图形可用性

在此次更新之前,当 Loki 被禁用并启用 DNS 跟踪时,OpenShift Container Platform 控制台插件无法显示任何 DNS 图形。相反,它会显示一个错误,表示请求无法通过 Prometheus 指标执行,即使对于有效 Prometheus 数据的图形也是如此。

在这个版本中,只有在缺少配置的指标的特定图形中会显示错误。现在,所有有效的 DNS 图形都会在 web 控制台中正确显示。

NETOBSERV-2621

改进了 Topology 视图中的错误处理

在此次更新之前,在没有 Loki 的情况下,Topology 视图中的某些查询可能会导致因为缺少 Prometheus 指标而出现错误。这些错误有时会保留,直到您清除浏览器缓存。

在这个版本中,控制台不再显示缺少指标导致的无效范围。另外,控制台中的错误处理已更新,以提供更多可操作的信息,从而消除了对这些场景中手动缓存的需求。

NETOBSERV-2477

1.3. Network Observability Operator 1.11 公告

您可以查看 Network Observability Operator 1.11 版本的公告。

了解 Network Observability Operator 1.11 发行版本中的新功能和增强,包括带有 FlowCollectorSlice 资源的分层管理、新的服务部署模型以及健康规则的通用可用性。

使用 FlowCollectorSlice 资源为每个租户分层管理

此发行版本引入了 FlowCollectorSlice API 以支持分层监管,允许项目管理员独立管理其特定命名空间的抽样和子网标签。

此功能是实施的,以减少全局处理开销,并在大型环境中提供租户自主权,其中单个团队在没有集群范围配置更改的情况下需要自助服务可见性。因此,组织可以选择性地收集流量,并将数据增强到项目级别,同时保持集中集群控制。

FlowCollector 资源的新 Service 部署模型

此发行版本在 FlowCollector 自定义资源中引入了一个新的 Service 部署模型。这个模型在 DirectKafka 模型之间提供了一个中间选项。在 Service 模型中,eBPF 代理被部署为 守护进程集flowlogs-pipeline 组件被部署为可扩展的服务。

此模型通过减少组件实例之间的缓存重复来提高大型集群中的性能。

健康规则正式发布

以前版本中引入的健康警报功能作为技术预览功能提供,在 Network Observability Operator 1.11 版本中作为健康规则被完全支持。

重要

Network Observability 健康规则包括在 OpenShift Container Platform 4.16 及更高版本中。

基于 eBPF 的系统将网络指标与基础架构元数据相关联,以提供主动通知并自动深入了解集群健康状况,如流量激增或延迟趋势。因此,您可以使用 OpenShift Container Platform Web 控制台中的 Network Health 仪表板来管理分类的警报、自定义阈值,以及创建记录规则以提高视觉化性能。

增强的网络流量视觉化和过滤

此发行版本在 OpenShift Container Platform Web 控制台中引入了增强的视觉化和过滤工具。

  • 内联过滤器编辑 :现在您可以在过滤器输入字段中直接编辑过滤器芯片。此增强为修改之前截断的长过滤器值提供了更有效的方法,无需手动复制和粘贴值。在这个版本中,使用内联编辑惯例与 Saved 过滤器功能一致。
  • 外部流量快速过滤器:新的快速过滤器允许您主动监控外部入口和出口流量。此功能增强简化了网络管理,可让您快速识别和解决与外部网络通信相关的问题。
  • 直观的资源图标 :OpenShift Container Platform 控制台现在对 Kubernetes 类型、组和过滤器使用特定的图标。这些图标提供更直观且更直观的体验,可以更轻松地浏览网络拓扑并识别应用的过滤器。
DNS 解析分析

此发行版本包括基于 eBPF 的 DNS 跟踪,以便使用域名增强网络流记录。

此功能通过允许管理员立即区分网络路由故障和服务发现问题(如 NXDOMAIN 错误),从而减少识别时间(MTTI)。

与网关 API 集成

此发行版本引入了在创建 GatewayClass 资源时,在 Network Observability Operator 和 Gateway API 之间自动集成。此功能为集群入口和出口流量提供高级别流量,而无需手动配置 FlowCollector 资源。

重要

OpenShift Container Platform 4.19 及更新的版本提供了与 Gateway API 集成。

您可以在 OpenShift Container Platform Web 控制台的 ObserveNetwork Traffic 视图中验证网络流到网关 API 资源的自动映射。Owner 列显示网关名称,提供到关联的网关资源页面的直接链接。

改进了 Overview 和 Topology 视图中的数据弹性

在这个版本中,即使一些后台查询失败,功能数据在 OverviewTopology 视图中仍然可见。此功能增强可确保 Topology 视图中的范围和组下拉菜单在部分服务中断期间仍然可访问。

另外,Overview 页面现在显示活跃的错误消息,以帮助进行故障排除,从而更好地了解系统健康状况,而不会中断监控工作流。

改进了未知网络流的分类

在这个版本中,来自未知源的网络流被归类为四个不同的组:external, unknown service, unknown node, 和 unknown pod。

此增强使用子网标签来分隔未知 IP 子网,从而提供了一个更清晰的网络拓扑。这种改进的可见性有助于识别潜在的安全威胁,并允许更有针对性地分析集群中的未知元素。

提高了新 Network Observability 安装的性能

对于新的安装,Network Observability Operator 的默认性能有所改进。cacheActiveTimeout 的默认值从 5 秒增加到 15 秒,cacheMaxFlows 值从 100,000 增加到 120,000,以适应更高的流卷。

重要

这些新默认值只适用于新的安装;现有安装会保留其当前配置。

这些更改将 CPU 负载减少到 40%。

改进了 LokiStack 状态监控和报告

在这个版本中,Network Observability Operator 监控 LokiStack 资源的状态,并报告错误或配置问题。Network Observability Operator 验证 LokiStack 条件,包括待处理或失败的 pod 以及特定的警告条件。

此增强在 FlowCollector 状态中提供更可操作的信息,允许在网络可观察性中更有效地对 LokiStack 组件进行故障排除。

过滤器菜单中的 Loki 索引字段的 Visual indicators

在这个版本中,即使一些后台查询失败,功能数据在 OverviewTopology 视图中仍然可见。此功能增强可确保 Topology 视图中的范围和组下拉菜单在部分服务中断期间仍然可访问。

此功能增强通过指示哪些字段索引以加快数据检索,从而提高了查询性能。在过滤数据时使用索引字段可减少在控制台中浏览和分析网络流所需的时间。

1.5. Network Observability Operator 1.11 已知问题

以下已知问题会影响 Network Observability Operator 1.11 发行版本。

由于 lowVolumeThreshold,当抽样率增加时,健康规则不会触发

当升级抽样率时,网络可观察性警报可能无法触发,从而导致卷低于 lowVolumeThreshold 过滤器。这会导致评估或显示较少的警报。

要临时解决这个问题,请调整 lowVolumeThreshold 值,使其与抽样率保持一致,以确保警报评估。

NETOBSERV-2613

当禁用 Loki 时,DNS 指标不可用

当在 "Loki-less" 安装中启用 DNSTracking 功能时,DNS 图形所需的指标将不可用。因此,您无法在仪表板中查看 DNS 延迟和响应代码。

要临时解决这个问题,您必须禁用 DNSTracking 选项,或者在 FlowCollector 资源中启用 Loki,方法是将 spec.loki.enable 设置为 true。

NETOBSERV-2621

1.6. Network Observability Operator 1.11 修复的问题

Network Observability Operator 1.11 发行版本包含多个固定的问题,以提高性能和用户体验。

chart 中缺少日期

在此次更新之前,因为依赖项中的变化导致 chart 工具提示日期不会被显示。因此,用户会在 OpenShift Container Platform Web 控制台插件的 Overview 标签页中缺少日期信息,影响数据上下文。

在这个版本中,图表工具提示日期显示会被恢复。

NETOBSERV-2518

在扩展后没有刷新 Direct 模式的警告信息

在此次更新之前,扩展后不会刷新集群信息,从而导致大型集群中保留警告信息,而不是使用更改进行更新。

在这个版本中,集群信息会在更改时刷新,从而导致在 Direct 模式中更新大型集群的警告信息,并改进了用户可见性。

NETOBSERV-2494

丰富的 OVN IP

在此次更新之前,OVN-Kubernetes 声明的一些 IP 没有被增强,从而导致不丰富的 IP (如 100.64.0.x )不会出现在 Machines 网络中。因此,IP 无法增强会导致用户出现错误的网络可见性。

在这个版本中,OVN-Kubernetes 中缺少 IP。因此,OVN-Kubernetes 声明的 IP 被正确地增强,并出现在 Machines 网络中的网络流量源的可见性。

NETOBSERV-2484

改进了 Operator API 发现可靠性

在此次更新之前,在 Network Observability Operator 启动过程中有一个竞争条件可能会导致 API 发现静默失败。因此,Operator 可能无法识别 OpenShift Container Platform 集群,从而导致缺少强制 ClusterRoleBinding 资源并防止组件正常工作。

在这个版本中,Network Observability Operator 持续检查 API 的可用性,并在发现失败时防止协调。因此,Operator 会正确识别环境并确保创建了所有必需的角色。

NETOBSERV-2574

在 IPFIX 导出中添加了缺少的翻译字段

在此次更新之前,IPFIX 导出过程中缺少一些网络流字段。因此,导出的 IPFIX 数据不完整或难以在外部收集器中解释。

在这个版本中,缺少的翻译字段(xlat)已添加到 flowlogs-pipeline IPFIX exporter 中。IPFIX 导出现在为一致的网络可观察性提供一组完整的翻译字段。

NETOBSERV-2553

修复了 FlowMetric 表单创建链接和默认值

在此次更新之前,创建 FlowMetric 自定义资源的链接会错误地将用户定向到 YAML 编辑器,而不是预期的表单视图。另外,编辑器使用不正确的默认值预先填充。

在这个版本中,链接可以正确地使用预期的默认设置导致 FlowMetric 资源创建表单。现在,用户可以通过用户界面轻松创建 FlowMetric 资源。

NETOBSERV-2520

Topology 视图中的虚拟机资源类型图标

在此次更新之前,虚拟机(VM)所有者类型在 Topology 视图中错误地显示通用问号(?)图标。

在这个版本中,用户界面包括虚拟机资源的特定图标。因此,用户可以在网络拓扑中更轻松地识别和区分虚拟机流量。

NETOBSERV-2487

DNS 优化, 更新 DNS 警报

在此次更新之前,因为网络可观察性中使用的模糊 URL,很多 DNS "NXDOMAIN" 错误会被返回。

在这个版本中,这些 URL 被禁止,从而导致 DNS 更最佳地使用。

NETOBSERV-2485

2.1. Network Observability Operator 发行注记归档

本发行注记介绍了 OpenShift Container Platform 中 Network Observability Operator 的过去的开发。它们仅用于参考目的。

Network Observability Operator 可让管理员观察和分析 OpenShift Container Platform 集群的网络流量流。

2.1.1. Network Observability Operator 1.10.1 公告

您可以查看 Network Observability Operator 1.10.1 发行版本的公告。

2.1.2. Network Observability Operator 1.10.1 CVE

您可以查看 Network Observability Operator 1.10.1 版本的 CVE。

Network Observability Operator 1.10.1 发行版本包含几个固定问题,用于提高性能和用户体验。

在集群超过 15 个节点时为直接模式生成警告

在此次更新之前,仅在大型集群中使用 Direct 部署模型的建议。

在这个版本中,当超过 15 个节点的集群中使用 Direct 部署模式时,Network Observability Operator 会生成警告。

NETOBSERV-2460

OpenShiftSDN 上禁用了网络策略部署

在此次更新之前,当 OpenShift SDN 是集群网络插件时,启用 FlowCollector 网络策略会破坏网络可观察性 pod 之间的通信。OVN-Kubernetes 不会出现这个问题,这是默认支持的网络插件。

在这个版本中,Network Observability Operator 在检测到 OpenShift SDN 时不再尝试部署网络策略,而是会显示一个警告。另外,修改了启用网络策略的默认值: 现在,只有在 OVN-Kubernetes 被检测到为集群网络插件时,才会默认启用。

NETOBSERV-2450

为子网标签字符添加验证

在此次更新之前,子网标签 "name" 配置中不允许对字符有限制,这意味着用户可以输入包含空格或特殊字符的文本。当用户试图应用过滤器时,web 控制台插件中生成了这个错误,然后点子网标签的过滤器图标通常会失败。

在这个版本中,在 FlowCollector 自定义资源中配置时,配置的子网标签名称会立即验证。验证可确保名称只包含字母数字字符 :、、 _ 和。因此,从 web 控制台插件过滤子网标签现在可以正常工作。

NETOBSERV-2438

Network Observability CLI 每次运行时都使用唯一的临时目录

在此次更新之前,Network Observability CLI 在当前工作目录中创建或重复使用一个临时(tmp)目录。这可能导致独立运行之间冲突或数据损坏。

在这个版本中,Network Observability CLI 会为每个运行创建一个唯一的临时目录,防止潜在的冲突并改进文件管理 hygiene。

NETOBSERV-2481

2.1.4. Network Observability Operator 1.10 公告

您可以查看 Network Observability Operator 1.10 发行版本的公告。

Network Observability Operator 1.10 发行版本增强了安全性,提高性能,并引进新的 CLI UI 工具以更好地进行网络流管理。

2.1.5.1. 网络策略更新

Network Observability Operator 现在支持配置入口和出口网络策略来控制 pod 流量。此功能增强提高了安全性。

默认情况下,spec.NetworkPolicy.enable 规格现在设置为 true。这意味着,如果您使用 Loki 或 Kafka,建议您将 Loki Operator 和 Kafka 实例部署到专用命名空间中。这样可确保正确配置网络策略以允许所有组件之间的通信。

2.1.5.2. Network Observability Operator CLI UI 更新

此发行版本为 Network Observability Operator CLI (oc netobserv)用户界面(UI)提供了以下新功能和更新:

表视图增强

  • 可自定义列 :点击 Manage Columns 以选择要显示的列,并根据您的需要定制表。
  • 智能过滤 :现在实时过滤器包括自动切换,以便更轻松地选择正确的键和值。
  • 数据包预览:捕获数据包时,单击一行以直接检查 pcap 内容。

基于终端的行图表的改进

  • 指标视觉化 :实时图形直接在 CLI 中呈现。
  • 面板选择 :使用 Manage Panels 弹出菜单选择预定义的视图或自定义视图,以选择性地查看特定指标图表。
2.1.5.3. 网络可观察性控制台的改进

网络可观察性控制台插件包括一个新的视图来配置 FlowCollector 自定义资源(CR)。在这个视图中,您可以完成以下任务:

  • 配置 FlowCollector CR。
  • 计算您的资源占用量。
  • 增加了问题,如配置警告或高指标卡。
2.1.5.4. 性能改进

Network Observability Operator 1.10 提高了 Operator 的性能和内存占用,特别是在大型集群中可见。

您可以查看 Network Observability Operator 1.10 发行版本中的技术预览功能。

此发行版本引入了新的警报功能,以及自定义警报配置。这些功能是技术预览功能,必须明确启用。

要查看新警报,请在 OpenShift Container Platform web 控制台中点 ObserveAlertingAlerting rules

当您在 Network Observability Operator 中启用技术预览警报功能时,您可以通过点 Observe 查看 OpenShift Container Platform Web 控制台中的新的 Network Health 仪表板。

Network Health 仪表板提供触发的警报摘要,区分严重、警告和次要问题,并显示待处理的警报。

2.1.7. Network Observability Operator 1.10 删除的功能

查看可能会影响 Network Observability Operator 1.10 发行版的删除功能。

2.1.7.1. FlowCollector API 版本 v1beta1 已被删除

FlowCollector 自定义资源(CR) API 版本 v1beta1 已被删除,并不再被支持。使用 v1beta2 版本。

2.1.8. Network Observability Operator 1.10 已知问题

查看以下已知问题及其推荐的临时解决方案(可能会影响您对 Network Observability Operator 1.10 版本的使用)。

由于软件目录中的 FlowCollector 自定义资源定义(CRD)验证错误,升级到 OpenShift Container Platform 4.14 及更早版本上的 Network Observability Operator 1.10 可能会失败。

要解决这个问题,您必须:

  1. 从 OpenShift Container Platform Web 控制台中的软件目录中卸载 Network Observability Operator 的两个版本。

    1. 保持 FlowCollector CRD 安装,使其不会在流集合过程中造成任何中断。
  2. 运行以下命令,检查 FlowCollector CRD 的当前名称:

    $ oc get crd flowcollectors.flows.netobserv.io -o jsonpath='{.spec.versions[0].name}'

    预期输出:

    v1beta1
  3. 运行以下命令,检查 FlowCollector CRD 的当前服务状态:

    $ oc get crd flowcollectors.flows.netobserv.io -o jsonpath='{.spec.versions[0].served}'

    预期输出:

    true
  4. 运行以下命令,将 v1beta1 版本的 served 标志设置为 false

    $ oc patch crd flowcollectors.flows.netobserv.io --type='json' -p "[{'op': 'replace', 'path': '/spec/versions/0/served', 'value': false}]"
  5. 运行以下命令,验证 served 标记是否已设置为 false

    $ oc get crd flowcollectors.flows.netobserv.io -o jsonpath='{.spec.versions[0].served}'

    预期输出:

    false
  6. 安装 Network Observability Operator 1.10。

OCPBUGS-63208 , NETOBSERV-2451

Network Observability 命令行界面(CLI)数据包捕获功能中使用的 eBPF 代理与 OpenShift Container Platform 版本 4.16 及更早的版本不兼容。

这个限制可防止基于 eBPF 的数据包捕获代理(PCA)在这些较旧的集群中正常工作。

要临时解决这个问题,您必须手动配置 PCA 以使用旧的兼容 eBPF 代理容器镜像。如需更多信息,请参阅红帽知识库解决方案 eBPF 代理与 Network Observability CLI 1.10+ 中的旧的 Openshift 版本兼容

NETOBSERV-2358

当在使用 OpenShiftSDN CNI 插件的 OpenShift Container Platform 4.14 集群中运行 Network Observability Operator 1.10 时,eBPF 代理无法将流记录发送到 flowlogs-pipeline 组件。当 FlowCollector 自定义资源创建启用了 NetworkPolicy 时(spec.networkPolicy.enable: true)时会出现这种情况。

因此,流数据不会被 flowlogs-pipeline 组件处理,且不会出现在 Network Traffic dashboard 或配置的存储(Loki)中。eBPF 代理 pod 日志在尝试连接到收集器时显示 i/o timeout 错误:

time="2025-10-17T13:53:44Z" level=error msg="couldn't send flow records to collector" collector="10.0.68.187:2055" component=exporter/GRPCProto error="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 10.0.68.187:2055: i/o timeout\""

要临时解决这个问题,将 spec.networkPolicy.enable 设置为 false,以在 Network Observability Operator 1.10 的 FlowCollector 资源中禁用 NetworkPolicy

这将允许 eBPF 代理与 flowlogs-pipeline 组件通信,而无需自动部署的网络策略。

NETOBSERV-2450

2.1.9. Network Observability Operator 1.10 修复的问题

Network Observability Operator 1.10 发行版本包含多个固定的问题,以提高性能和用户体验。

2.1.9.1. 验证 MetricName 和 Remap 字段

在此次更新之前,用户可以使用无效的指标名称创建一个 FlowMetric 自定义资源(CR)。虽然 FlowMetric CR 已被成功创建,但底层指标会静默失败,而不会向用户提供任何错误反馈。

在这个版本中,FlowMetricmetricNameremap 字段会在创建前被验证,因此如果用户输入无效的名称,用户会立即获得通知。

NETOBSERV-2348

2.1.9.2. 改进了 html-to-image 导出性能

在此次更新之前,底层库中的性能问题会导致 html-to-image 导出功能需要很长时间,从而导致浏览器释放。

在这个版本中,html-to-image 库的性能有所改进,减少了导出等待时间,并在生成镜像期间消除浏览器冻结的问题。

NETOBSERV-2314

2.1.9.3. 改进了 eBPF 特权模式的警告

在此次更新之前,当用户选择 需要特权 模式的 eBPF 功能时,功能通常会失败,而不会明确告知用户缺少 特权模式 或需要启用。

在这个版本中,如果配置不一致,验证 hook 会立即警告用户。这提高了用户理解并防止错误配置。

NETOBSERV-2268

2.1.9.4. 添加到 OpenTelemetry 导出器的子网标签

在此次更新之前,OpenTelemetry 指标导出器缺少网络流标签 SrcSubnetLabelDstSubnetLabel,从而导致它们显示为空。

在这个版本中,这些标签由导出器正确提供。它们也被重命名为 source.subnet.labeldestination.subnet.label,以提高 OpenTelemetry 标准的清晰性和一致性。

NETOBSERV-2405

2.1.9.5. 减少了网络可观察性组件的默认容限

在此次更新之前,在所有网络可观察性组件上设置默认容限,允许将其调度到任何节点上,包括那些带有 NoSchedule 的污点。这可能会阻止集群升级。

在这个版本中,在 Direct 模式中配置时,默认容限只为 eBPF 代理和 Flowlogs-Pipeline 维护。在 Kafka 模式中配置时,容限已从 OpenShift Container Platform web 控制台插件和 Flowlogs-Pipeline 中删除。

另外,虽然容限总是在 FlowCollector 自定义资源(CR)中进行配置,但之前无法将容限替换为空列表。现在,可以将容限替换为空列表。

NETOBSERV-2434

2.1.10. Network Observability Operator 1.9.3 公告

您可以查看 Network Observability Operator 1.9.3 版本的公告。

2.1.11. Network Observability Operator 1.9.2 公告

您可以查看 Network Observability Operator 1.9.2 版本的公告。

2.1.12. 网络可观察性 1.9.2 程序错误修复

您可以查看 Network Observability Operator 1.9.1 发行版本的固定问题。

  • 在此次更新之前,OpenShift Container Platform 版本 4.15 及更早版本不支持 TC_ATACH_MODE 配置。这会导致命令行界面(CLI)错误,并阻止对数据包和流的观察。在这个版本中,对这些旧版本调整了流量控制 eXtension (TCX) hook 附加模式。这消除了 tcx hook 错误,并启用流和数据包观察。

2.1.13. Network Observability Operator 1.9.1 公告

您可以查看 Network Observability Operator 1.9.1 版本的公告。

以下公告可用于 Network Observability Operator 1.9.1 :

您可以查看 Network Observability Operator 1.9.1 发行版本的固定问题。

  • 在此次更新之前,因为一个不正确的附加模式设置,在 OpenShift Container Platform 4.15 中不会观察到网络流。这使用户无法正确监控网络流,特别是某些目录。在这个版本中,早于 4.16.0 的 OpenShift Container Platform 版本的默认附加模式被设置为 tc,因此流现在可以在 OpenShift Container Platform 4.15 上观察到。(NETOBSERV-2333)
  • 在此次更新之前,如果 IPFIX 收集器重启,配置 IPFIX exporter 可能会丢失其连接,并停止将网络流发送到收集器。在这个版本中,连接被恢复,网络流将可以继续发送到收集器。(NETOBSERV-2315)
  • 在此次更新之前,当您配置 IPFIX 导出器时,没有端口信息的流会被忽略(如 ICMP 流量),这会导致日志出现错误。IPFIX 导出中也缺少了 TCP 标志和 ICMP 数据。在这个版本中,包括了这些详情。缺少字段(如端口)不再会导致错误,并且是导出的数据的一部分。(NETOBSERV-2307)
  • 在此次更新之前,User Defined Networks (UDN) Mapping 功能在 OpenShift Container Platform 4.18 上显示一个配置问题和警告,因为 OpenShift 版本在代码中被错误地设置。这会影响用户体验。在这个版本中,UDN 映射支持可以正确支持 OpenShift Container Platform 4.18 而不会出现警报,从而用户可以获得更好的体验。(NETOBSERV-2305)
  • 在此次更新之前,Network Traffic 页中的扩展功能与 OpenShift Container Platform Console 4.19 存在兼容性问题。这会导致在扩展以及不一致的用户界面时出现空菜单。在这个版本中,NetflowTraffic 部分和 theme hook 的问题已被解决。Network Traffic 视图中的侧边菜单现在可以被正确管理,这提高了用户与用户界面进行交互的体验。(NETOBSERV-2304)

2.1.15. Network Observability Operator 1.9.0 公告

您可以查看 Network Observability Operator 1.9.0 版本的公告。

您可以查看 Network Observability Operator 1.9.0 发行版本的新功能和增强。

2.1.16.1. 具有网络可观察性的用户定义的网络

在这个版本中,用户定义的网络(UDN) 功能通常可用于网络可观察性。当在网络可观察性中启用 UDNMapping 功能时,流量流 表有一个 UDN 标签 列。您可以过滤 Source Network NameDestination Network Name 信息的日志。

2.1.16.2. 在 ingestion 时过滤 flowlogs

在这个版本中,您可以创建过滤器来减少生成的网络流的数量以及网络可观察性组件的资源使用情况。可以配置以下过滤器:

  • eBPF 代理过滤器
  • flowlogs-pipeline 过滤器
2.1.16.3. IPsec 支持

在这个版本中,当 OpenShift Container Platform 中启用了 IPsec 时,网络可观察性包括以下改进:

  • 网络可观察性 流量流视图 中会显示一个名为 IPsec Status 的新列,以显示流是否已成功 IPsec 加密,或者在加密/解密过程中出现错误。
  • 显示生成加密流量百分比的新仪表板。
2.1.16.4. Network Observability CLI

以下过滤选项现在可用于数据包、流和指标捕获:

  • 使用 --sampling 选项配置被抽样的数据包比率。
  • 使用 --query 选项使用自定义查询过滤流。
  • 使用 --interfaces 选项指定要监控的接口。
  • 使用 --exclude_interfaces 选项指定要排除的接口。
  • 使用 --include_list 选项指定要生成的指标名称。

如需更多信息,请参阅:

您可以查看 Network Observability Operator 1.6.0 发行版本的主要技术更改。

  • 网络 observability 1.9 中的 NetworkEvents 功能已更新,以便与 OpenShift Container Platform 4.19 的更新 Linux 内核。这个版本会破坏与旧内核的兼容性。因此,NetworkEvents 功能只能用于 OpenShift Container Platform 4.19。如果您在网络 observability 1.8 和 OpenShift Container Platform 4.18 中使用此功能,请考虑避免网络可观察性升级或升级到网络 observability 1.9,OpenShift Container Platform 升级到 4.19。
  • netobserv-reader 集群角色已重命名为 netobserv-loki-reader
  • 改进了 eBPF 代理的 CPU 性能。

您可以查看 Network Observability Operator 1.9.0 版本的技术预览功能。

此版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。请参阅红帽门户网站中关于对技术预览功能支持范围的信息:

技术预览功能支持范围

2.1.18.1. 带有网络可观察性的 eBPF Manager Operator

eBPF Manager Operator 通过管理所有 eBPF 程序来减少攻击面,并确保合规性、安全性和冲突防止。网络可观察性可以使用 eBPF Manager Operator 来加载 hook。这消除了使用特权模式或额外的 Linux 功能(如 CAP_BPFCAP_PERFMON )提供 eBPF Agent 的需要。只有 64 位 AMD 架构上才支持带有网络可观察性的 eBPF Manager Operator。

2.1.19. Network Observability Operator 1.9.0 CVE

您可以查看 Network Observability Operator 1.9.0 版本的 CVE。

您可以查看 Network Observability Operator 1.9.0 发行版本中的固定问题。

  • 在以前的版本中,当根据控制台插件的源或目标 IP 过滤时,使用无类别域间路由(CIDR)标记(如 10.128.0.0/24 )无法正常工作,返回应该过滤掉的结果。在这个版本中,可以使用 CIDR 表示法,结果会如预期过滤。(NETOBSERV-2276)
  • 在以前的版本中,网络流可能会错误地识别正在使用的网络接口,特别是混合使用 eth0ens5 的风险。只有在 eBPF 代理配置为 Privileged 时,才会出现这个问题。在这个版本中,它已被部分修复,几乎所有网络接口都会被正确识别。详情请参考以下已知问题。(NETOBSERV-2257)
  • 在以前的版本中,当 Operator 检查可用的 Kubernetes API 以适应其行为时,如果出现过时的 API,这会导致阻止 Operator 正常启动的错误。在这个版本中,Operator 忽略了不相关的 API 的错误,在相关 API 中记录错误,并继续运行。(NETOBSERV-2240)
  • 在以前的版本中,用户无法在 Console 插件的流量 视图中根据 BytesPackets 对流进行排序。在这个版本中,用户可以按 BytesPackets 对流进行排序。(NETOBSERV-2239)
  • 在以前的版本中,当使用 IPFIX 导出器配置 FlowCollector 资源时,IPFIX 流中的 MAC 地址会截断为其 2 个字节。在这个版本中,MAC 地址在 IPFIX 流中完全表示。(NETOBSERV-2208)
  • 在以前的版本中,从 Operator 验证 Webhook 发送的一些警告可能会缺少所需操作所需的清晰性。在这个版本中,其中一些消息已被检查并修改,以使它们更可操作。(NETOBSERV-2178)
  • 在以前的版本中,从 FlowCollector 资源中引用 LokiStack 时并不知道问题,比如在输入错误时。在这个版本中,FlowCollector 状态会明确指出引用的 LokiStack 在那个情形中未找到。(NETOBSERV-2174)
  • 在以前的版本中,在控制台插件流量流视图中,在文本溢出时,文本省略有时会隐藏要显示的许多文本。在这个版本中,它会尽可能显示文本。(NETOBSERV-2119)
  • 在以前的版本中,网络 observability 1.8.1 及更早版本的控制台插件无法用于 OpenShift Container Platform 4.19 web 控制台,从而使 Network Traffic 页面无法访问。在这个版本中,控制台插件兼容,在网络 observability 1.9.0 中可以访问 Network Traffic 页面。(NETOBSERV-2046)
  • 在以前的版本中,当使用对话跟踪(在 FlowCollector 资源中使用 logTypes: ConversationslogTypes: All)时,仪表板中出现的流量速率指标有缺陷,它会错误地显示以无法控制的流量。现在,指标显示更准确的流量率。但请注意,在 ConversationsEndedConversations 模式中,这些指标仍不是完全准确的,因为它们不包括长期的连接。此信息已添加到文档中。建议使用默认模式 logTypes: Flows 来避免这些不准确。(NETOBSERV-1955)

2.1.21. Network Observability Operator 1.9.0 已知问题

您可以查看 Network Observability Operator 1.9.0 发行版的已知问题。

  • 用户定义的网络(UDN)功能在与 OpenShift Container Platform 4.18 一起使用时会显示一个配置问题和一个警告,即使它被支持。这个警告可以被忽略。(NETOBSERV-2305)
  • 在某些情况下,在带有几个网络命名空间的特权 模式下运行时,eBPF 代理无法正确将流与涉及的接口关联。本发行版本中已经识别并解决了这些问题的较大部分,但仍存在一些不一致的情况,特别是 ens5 接口。(NETOBSERV-2287)

2.1.22. Network Observability Operator 1.8.1 公告

您可以查看 Network Observability Operator 1.8.1 版本的公告。

Network Observability Operator 1.8.1

2.1.23. Network Observability Operator 1.8.1 CVE

您可以查看 Network Observability Operator 1.8.1 版本的 CVE。

您可以查看 Network Observability Operator 1.8.1 版本的固定问题。

  • 在这个版本中,Observe 菜单会在以后的 OpenShift Container Platform 版本中出现一次。(NETOBSERV-2139)

2.1.25. Network Observability Operator 1.8.0 公告

您可以查看 Network Observability Operator 1.8.0 版本的公告。

您可以查看 Network Observability Operator 1.8.0 发行版本的新功能和增强。

2.1.26.1. 数据包转换

现在,您可以使用转换的端点信息增强网络流,仅显示服务,以及特定的后端 pod,以便您可以查看提供请求的 pod。

如需更多信息,请参阅:

2.1.26.2. 1.8 中的 eBPF 性能改进
  • 网络可观察性现在使用哈希映射而不是每个 CPU 映射。这意味着网络流数据会在内核空间中跟踪,新的数据包也会在此聚合。现在在内核中可以处理网络流去重复(de-duplication),因此内核和用户空间之间的数据传输的大小会获得更好的性能。通过这些 eBPF 性能改进,可能会观察 eBPF 代理中的 CPU 资源的使用减少 40% 和 57%。
2.1.26.3. Network Observability CLI

本发行版本的 Network Observability CLI 中添加了以下新功能、选项和过滤器:

  • 运行 oc netobserv metrics 命令捕获启用了过滤器的指标。
  • 使用带有流和数据包捕获和运行 oc netobserv--background 选项,运行 CLI 会在后台运行 CLI,以查看后台运行和 oc netobserv copy 的进度,以下载生成的日志。
  • 使用 --get-subnets 选项,通过 Machine、Pod 和 Services 子网进行丰富的流和指标捕获。
  • 包括了数据包、流和指标捕获的新过滤选项:

    • IP、端口、协议、操作、TCP 标记等的 eBPF 过滤器
    • 使用 --node-selector 的自定义节点
    • 只丢弃使用 --drops
    • 任何使用 -regexes 的字段

如需更多信息,请参阅 Network Observability CLI 参考

您可以查看 Network Observability Operator 1.8.0 发行版本中的固定问题。

  • 在以前的版本中,Network Observability Operator 附带一个 "kube-rbac-proxy" 容器来管理其指标服务器的 RBAC。由于此外部组件已弃用,因此需要将其删除。现在,它通过 Kubernetes controller-runtime 替换为直接 TLS 和 RBAC 管理,而无需 side-car 代理。(NETOBSERV-1999)
  • 在以前的版本中,在 OpenShift Container Platform 控制台插件中,对不等于多个值的键进行过滤不会过滤任何内容。在这个版本中,可以返回预期的结果 - 没有过滤值的流。(NETOBSERV-1990)
  • 在以前的版本中,在禁用了 Loki 的 OpenShift Container Platform 控制台插件中,由于选择不兼容的过滤器和聚合集合,这会产生一个 "Can't build query" 错误。现在,通过自动禁用不兼容的过滤器来避免这个错误,同时使用户了解过滤不兼容。(NETOBSERV-1977)
  • 在以前的版本中,当从控制台插件查看流详情时,ICMP 信息总是显示在侧面面板中,并对非 ICMP 流显示 "undefined" 值。在这个版本中,非 ICMP 流不会显示 ICMP 信息。(NETOBSERV-1969)
  • 在以前的版本中,流量流视图 中的 "Export data" 链接无法按预期工作,生成空 CSV 报告。现在,导出功能会被恢复,生成非空 CSV 数据。(NETOBSERV-1958)
  • 在以前的版本中,可以配置 FlowCollector 带有 processor.logTypes Conversations, EndedConversationsAllloki.enable 被设置为 false,尽管对话日志仅在启用 Loki 时才有用。这会导致资源使用量被浪费。现在,此配置无效,由验证 Webhook 拒绝。(NETOBSERV-1957)
  • 使用将 processor.logTypes 设置为 AllFlowCollector 配置消耗更多资源,如 CPU、内存和网络带宽,而不是其他选项。之前没有记录此内容。现在,它已被记录,并从验证 Webhook 触发警告。(NETOBSERV-1956)
  • 在以前的版本中,在高压力下,eBPF 代理生成的一些流被错误地忽略,从而导致流量带宽较低。现在,这些生成的流不会被忽略。(NETOBSERV-1954)
  • 在以前的版本中,当在 FlowCollector 配置中启用网络策略时,到 Operator Webhook 的流量会被阻断,破坏 FlowMetrics API 验证。现在,允许 Webhook 流量。(NETOBSERV-1934)
  • 在以前的版本中,当部署默认网络策略时,在 additionalNamespaces 字段中默认设置命名空间 openshift-consoleopenshift-monitoring,从而导致重复的规则。现在,没有默认设置额外的命名空间,这有助于避免获取重复的规则。(NETOBSERV-1933)
  • 以前,在 OpenShift Container Platform 控制台插件中,对 TCP 标记进行过滤会匹配只有准确所需标记的流。现在,任何至少具有所需标志的流都会在过滤流中出现。(NETOBSERV-1890)
  • 当 eBPF 代理以特权模式运行且 pod 持续添加或删除时,会发生文件描述符(FD)泄漏。此修复可确保删除网络命名空间时 FD 的正确冲突。( NETOBSERV-2063)
  • 在以前的版本中,CLI 代理 DaemonSet 不会在 master 节点上部署。现在,在代理 DaemonSet 上添加了一个容限,以便在设置污点时在每个节点上调度。现在,CLI 代理 DaemonSet pod 在所有节点上运行。(NETOBSERV-2030)
  • 在以前的版本中,当只使用 Prometheus 存储时,Source ResourceSource Destination 过滤自动完成功能无法正常工作。现在这个问题已被解决,建议会如预期显示。(NETOBSERV-1885)
  • 在以前的版本中,Topology 视图中会单独显示使用多个 IP 的资源。现在,资源在视图中显示为单个拓扑节点。(NETOBSERV-1818)
  • 在以前的版本中,当鼠标指针悬停在列上时,控制台会刷新 Network traffic 表查看内容。现在,显示已被修复,因此行的高度会与鼠标指针一起保持恒定。(NETOBSERV-2049)

您可以查看 Network Observability Operator 1.8.0 发行版本中的已知问题。

  • 如果集群中有流量使用重叠的子网,则 eBPF 代理会有一些小的风险,从重叠的 IP 混合了流。如果不同的连接发生于具有相同源和目标 IP,并且端口和协议位于 5 秒时间内并在同一节点上发生,则会出现这种情况。除非配置了二级网络或 UDN,否则不应该执行此操作。即使在这种情况下,在正常的网络流量中仍然不太可能发生,因为源端口通常是一个很好的区分器。(NETOBSERV-2115)
  • 在 OpenShift Container Platform Web 控制台表单视图中选择要在 FlowCollector 资源 spec.exporters 部分中配置的导出类型后,该类型的详细配置不会以表单显示。解决办法是直接配置 YAML。(NETOBSERV-1981)

2.1.29. Network Observability Operator 1.7.0 公告

您可以查看 Network Observability Operator 1.7.0 发行版本的公告。

您可以查看 Network Observability Operator 1.7.0 发行版本中的以下新功能和增强。

2.1.30.1. OpenTelemetry 支持

现在,您可以将增强的网络流导出到兼容的 OpenTelemetry 端点,如红帽构建的 OpenTelemetry。

如需更多信息,请参阅:

2.1.30.2. 网络可观察性开发人员视角

现在,您可以在 Developer 视角中使用网络可观察性。

如需更多信息,请参阅:

2.1.30.3. TCP 标记过滤

现在,您可以使用 tcpFlags 过滤器来限制 eBPF 程序处理的数据包卷。

如需更多信息,请参阅:

2.1.30.4. OpenShift Virtualization 的网络可观察性

您可以通过识别来自连接到二级网络的虚拟机(如通过 Open Virtual Network (OVN)-Kubernetes)的 eBPF 增强网络流来观察 OpenShift Virtualization 设置中的网络模式。

如需更多信息,请参阅:

在这个版本中,您可以配置 FlowCollector 自定义资源(CR)来为网络可观察性部署网络策略。在以前的版本中,如果需要网络策略,您必须手动创建一个。手动创建网络策略的选项仍然可用。

如需更多信息,请参阅:

2.1.30.6. FIPS 合规性
  • 您可以在以 FIPS 模式运行的 OpenShift Container Platform 集群中安装和使用 Network Observability Operator。

    重要

    要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅将 RHEL 切换到 FIPS 模式

    当以 FIPS 模式运行 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS)时,OpenShift Container Platform 核心组件使用 RHEL 加密库,在 x86_64、ppc64le 和 s390x 架构上提交到 NIST FIPS 140-2/140-3 Validation。

2.1.30.7. eBPF 代理增强

eBPF 代理有以下改进:

  • 如果 DNS 服务映射到与 53 不同的端口,您可以使用 spec.agent.ebpf.advanced.env.DNS_TRACKING_PORT 指定此 DNS 跟踪端口。
  • 现在,您可以将两个端口用于传输协议(TCP、UDP 或 SCTP)过滤规则。
  • 现在,您可以通过将 protocol 字段留空来过滤带有通配符协议的传输端口。

如需更多信息,请参阅:

2.1.30.8. Network Observability CLI

Network Observability CLI (oc netobserv) 现已正式发布。从 1.6 技术预览版本开始进行了以下改进:

  • 现在,与流捕获类似的数据包捕获都有 eBPF 丰富的过滤器。
  • 现在,您可以在流和数据包捕获中使用过滤 tcp_flags
  • 当达到 max-bytes 或 max-time 时,auto-teardown 选项可用。

如需更多信息,请参阅:

您可以查看 Network Observability Operator 1.7.0 发行版本中的以下固定问题。

  • 在以前的版本中,当使用 RHEL 9.2 实时内核时,一些 Webhook 无法正常工作。现在,提供了一个修复程序,用于检查是否使用了这个 RHEL 9.2 实时内核。如果使用内核,则会显示有关无法正常工作的功能的警告,如数据包丢弃,以及使用 s390x 架构时的 Round-trip Time。相关的修复包括在 OpenShift 4.16 及更高版本中。(NETOBSERV-1808)
  • 在以前的版本中,在 Overview 选项卡中的 Manage 面板 对话框中,根据 total, bar, donut, or line 过滤不会显示结果。现在,可以正确地过滤可用的面板。(NETOBSERV-1540)
  • 在以前的版本中,在高力下,eBPF 代理容易进入一个会生成大量小的流而几乎不聚合它们的状态。在这个版本中,在高压的情况下聚合过程仍然可以进行,因此会创建较少的流。在这个版本中,改进了在 eBPF 代理中,以及 flowlogs-pipeline 和 Loki 中的资源消耗。(NETOBSERV-1564)
  • 在以前的版本中,当启用了 workload_flows_total 指标而不是 namespace_flows_total 指标时,健康仪表板会停止显示 By namespace 流图表。在这个版本中,当启用了 workload_flows_total 时,健康仪表板会显示流图表。(NETOBSERV-1746)
  • 在以前的版本中,当您使用 FlowMetrics API 生成自定义指标并稍后修改其标签时,指标会停止填充,并在 flowlogs-pipeline 日志中显示错误。在这个版本中,您可以修改标签,在 flowlogs-pipeline 日志中不再引发错误。(NETOBSERV-1748)
  • 在以前的版本中,默认的 Loki WriteBatchSize 配置不一致:在 FlowCollector CRD 中被设置为 100 KB,在 OLM 示例或默认配置中被设置为 10 MB。现在,它们都一致地设置为 10,这通常会提供更好的性能并减少资源占用量。(NETOBSERV-1766)
  • 在以前的版本中,如果您没有指定协议,则端口上的 eBPF 流过滤器会被忽略。在这个版本中,您可以独立于端口和或协议设置 eBPF 流过滤器。(NETOBSERV-1779)
  • 在以前的版本中,Topology 视图中隐藏了从 Pod 到服务的流量。只有从 Services 到 Pod 的返回流量才可见。在这个版本中,流量会被正确显示。(NETOBSERV-1788)
  • 在以前的版本中,当具有 Network Observability 访问权限的非集群管理员用户试图过滤触发自动完成的内容(如命名空间)时,控制台插件中的错误会在控制台插件中看到一个错误。在这个版本中,不会显示错误,自动完成会返回预期的结果。( NETOBSERV-1798)
  • 当添加二级接口支持时,您必须多次使用 netlink 注册每个网络命名空间,以了解接口通知。同时,因为使用 TCX hook,不成功的处理程序会导致泄漏文件描述符。这与 TC 不同,在接口停止时需要显式删除处理程序。另外,当删除网络命名空间时,没有 Go 关闭频道事件来终止 netlink goroutine 套接字,这会导致 go 线程泄漏。现在,在创建和删除 pod 时,不会再泄漏文件描述符或 go 线程。(NETOBSERV-1805)
  • 在以前的版本中,即使流 JSON 中相关的数据可用,ICMP 类型和值在流量流表中显示 'n/a'。在这个版本中,ICMP 列在流表中按预期显示相关值。(NETOBSERV-1806)
  • 在以前的版本中,在控制台插件中,无法为未设置的字段过滤,如取消设置 DNS 延迟。在这个版本中,可以对未设置的字段进行过滤。(NETOBSERV-1816)
  • 在以前的版本中,当您在 OpenShift Web 控制台插件中清除过滤器时,有时会在进入另一个页面后重新应用过滤器,并返回带有过滤器的页面。在这个版本中,过滤器在清除后不会意外地重新显示它们。(NETOBSERV-1733)

2.1.32. Network Observability Operator 1.7.0 已知问题

您可以查看 Network Observability Operator 1.7.0 发行版本中的以下已知问题。

  • 当您将 must-gather 工具与网络可观察性搭配使用时,当集群启用了 FIPS 时,不会收集日志。(NETOBSERV-1830)
  • 当在 FlowCollector 中启用 spec.networkPolicy 时,它会在 netobserv 命名空间中安装网络策略,无法使用 FlowMetrics API。网络策略块调用验证 Webhook。作为临时解决方案,请使用以下网络策略:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-from-hostnetwork
      namespace: netobserv
    spec:
      podSelector:
        matchLabels:
          app: netobserv-operator
      ingress:
        - from:
            - namespaceSelector:
                matchLabels:
                  policy-group.network.openshift.io/host-network: ''
      policyTypes:
        - Ingress

    (NETOBSERV-193)

您可以查看 Network Observability Operator 1.6.2 版本的公告。

您可以查看 Network Observability Operator 1.6.2 版本的 CVE。

您可以查看 Network Observability Operator 1.6.2 发行版本的固定问题。

  • 当添加了二级接口支持时,需要多次使用 netlink 注册每个网络命名空间,以了解接口通知。同时,因为使用 TCX hook,不成功的处理程序会导致泄漏文件描述符。这与 TC 不同,在接口停止时需要显式删除处理程序。现在,创建和删除 pod 时不再泄漏文件描述符。(NETOBSERV-1805)

您可以查看 Network Observability Operator 1.6.2 发行版本的已知问题。

  • 与控制台插件存在兼容性问题,它们会阻止在 OpenShift Container Platform 集群以后的版本上安装网络可观察性。通过升级到 1.6.2,兼容性问题已解决,网络可观察性可以如预期安装。(NETOBSERV-1737)

您可以查看 Network Observability Operator 1.6.1 版本的公告。

您可以查看 Network Observability Operator 1.6.1 版本的 CVE。

您可以查看 Network Observability Operator 1.6.1 发行版本的固定问题。

  • 在以前的版本中,关于数据包丢弃的信息(如原因和 TCP 状态)仅在 Loki 数据存储中提供,而不是在 Prometheus 中提供。因此,OpenShift Web 控制台插件 Overview 中的丢弃统计信息仅适用于 Loki。在这个版本中,有关数据包丢弃的信息也添加到指标中,因此您可以在禁用 Loki 时查看丢弃统计信息。(NETOBSERV-1649)
  • 当 eBPF 代理 PacketDrop 功能被启用,并抽样被配置为一个大于 1 的值时,报告的丢弃的字节并丢弃数据包会忽略抽样配置。虽然这样做的目的为了不遗漏任何数据丢弃,但这样做的一个副作用是报告的丢弃数据与非丢弃数据的比例变得有倾向性。例如,对于一个非常高的抽样率(如 1:1000)中,在控制台插件中观察到的情况是,几乎所有流量都被丢弃。在这个版本中,抽样配置会正确处理丢弃的字节和数据包。(NETOBSERV-1676)
  • 在以前的版本中,如果首先创建了接口,然后才部署 eBPF 代理,则不会检测到这个 SR-IOV 二级接口。只有在先部署了代理,然后再创建 SR-IOV 接口时,才会检测到它。在这个版本中,无论部署序列是什么,都会检测到 SR-IOV 二级接口。(NETOBSERV-1697)
  • 在以前的版本中,当禁用 Loki 时,OpenShift Web 控制台中的 Topology 视图始终会在网络拓扑图旁边的滑块中显示集群区域聚合选项,即使未启用相关的功能。在这个版本中,滑块只根据启用的功能显示选项。(NETOBSERV-1705)
  • 在以前的版本中,当 Loki 被禁用时,OpenShift Web 控制台第一次加载时,可能会显示错误:Request failed with status code 400 Loki is disabled。在这个版本中,不再会出现错误。(NETOBSERV-1706)
  • 在以前的版本中,在 OpenShift Web 控制台的 Topology 视图中,当点击任何图形节点旁边的 Step into 图标时,过滤器不会根据需要应用,从而将重点设置为所选图形节点,从而导致在 OpenShift Web 控制台中显示 Topology 视图的广泛视图。在这个版本中,正确设置了过滤,有效缩小 Topology 的范围。作为此更改的一部分,点节点上的 Step into 图标进入 Resource 范围而不是 Namespaces 范围。(NETOBSERV-1720)
  • 在以前的版本中,当 Loki 被禁用时,在 OpenShift Web 控制台的 Topology 视图中,将 Scope 设置为 Owner,点任何图形节点旁的 Step into 图标会使 Scope 变为 Resource,在没有 Loki 的情况下不可用,因此会显示错误消息。在这个版本中,当 Loki 被禁用时,在 Owner 范围中会隐藏 Step into 图标,因此不再会发生此场景。(NETOBSERV-1721)
  • 在以前的版本中,当禁用 Loki 时,当设置了一个组时,OpenShift Web 控制台的 Topology 视图中会显示一个错误,但会更改范围,以便组变得无效。在这个版本中,无效的组会被删除,从而导致错误。(NETOBSERV-1722)
  • 从 OpenShift web 控制台 Form view 创建 FlowCollector 资源时,与 YAML 视图 不同,以下设置被 web 控制台: agent.ebpf.metrics.enableprocessor.subnetLabels.openShiftAutoDetect 管理。这些设置只能在 YAML 视图中被禁用,不能在 Form 视图中禁用。为避免混淆,这些设置已从 Form 视图中删除。它们仍可在 YAML 视图中访问。(NETOBSERV-1731)
  • 在以前的版本中,eBPF 代理无法在非正常崩溃前清理安装的流量控制流,例如因为 SIGTERM 信号造成崩溃。这会导致使用相同名称创建多个流量控制流过滤,因为旧的流没有被删除。在这个版本中,在代理启动时,所有之前安装的流量控制流都会被清理。(NETOBSERV-1732)
  • 在以前的版本中,当配置自定义子网标签并保持 OpenShift 子网自动检测时,OpenShift 子网优先于自定义子网,从而导致在集群子网中定义自定义标签。在这个版本中,自定义的子网具有优先权,允许在集群子网中定义自定义标签。(NETOBSERV-1734)

您可以查看 Network Observability Operator 1.6.0 版本的公告。

您可以查看 Network Observability Operator 1.6.0 的以下新功能和增强。

现在,在使用 Network Observability Operator 时,您可以使用 Prometheus 指标并依赖 Loki 进行存储。

如需更多信息,请参阅:

2.1.41.2. 自定义 metrics API

您可以使用 FlowMetrics API 从 flowlogs 数据中创建自定义指标。flowlogs 数据可用于 Prometheus 标签,以便在仪表板上自定义集群信息。您可以为要在流和指标中识别的任何子网添加自定义标签。此功能增强还可用于使用新标签 SrcSubnetLabelDstSubnetLabel 来更轻松地识别外部流量,它们同时存在于流日志和指标中。当存在外部流量时,这些字段为空,它提供了一种方法来识别它。

如需更多信息,请参阅:

2.1.41.3. eBPF 性能增强

提高了 eBPF 代理的性能,在 CPU 和内存方面有以下更新:

  • eBPF 代理现在使用 TCX Webhook 而不是 TC。
  • NetObserv / Health 仪表板有一个新的部分,显示 eBPF 指标。

    • 根据新的 eBPF 指标,当 eBPF 代理丢弃流时,会向您发送警报。
  • 现在,因为删除了重复的流,Loki 存储需求会显著减少。现在,使用一个带有相关网络接口列表的非重复的流,而不是使用多个流,每个网络接口都带有独立重复的流。
重要

通过对重复流机制的更新,网络流量表中的InterfaceInterface Direction 字段被重命名为 InterfacesInterface Directions,任何使用这些字段的 快速过滤查询都需要更新为使用新的 interfacesifdirections

如需更多信息,请参阅:

2.1.41.4. 基于 eBPF 集合规则的过滤

您可以使用基于规则的过滤来减少创建的流的数量。启用这个选项后,eBPF 代理统计的 Netobserv / Health 仪表板会提供一个过滤的流速率视图。

如需更多信息,请参阅:

您可以查看 Network Observability Operator 1.6.0 的以下固定问题。

  • 在以前的版本中,Operator Lifecycle Manager (OLM)表单中会显示到 OpenShift Container Platform 文档的死链接,用于创建 FlowMetrics API。现在,链接已被更新以指向有效的页面。(NETOBSERV-1607)
  • 在以前的版本中,Operator Hub 中的 Network Observability Operator 描述信息中显示的一个到文档的链接有问题。在这个版本中,这个链接也被修正。(NETOBSERV-1544)
  • 在以前的版本中,如果 Loki 被禁用,且 Loki Mode 被设置为 LokiStack,或者配置了 Loki manual TLS 配置,Network Observability Operator 仍然会尝试读取 Loki CA 证书。在这个版本中,当 Loki 被禁用时,即使在 Loki 配置中有设置,也不会读 Loki 证书。(NETOBSERV-1647)
  • 在以前的版本中,Network Observability Operator 的 oc must-gather 插件只适用于 amd64 架构,并在所有其他架构上都会失败,这是因为对于 oc,插件使用了 amd64。现在,Network Observability Operator oc must-gather 插件会在任何架构平台上收集日志。
  • 在以前的版本中,当使用 不等于 逻辑过滤 IP 地址时,Network Observability Operator 会返回请求错误。现在,对于 IP 地址和范围的 IP 过滤,可以正常使用等于不等于逻辑。(NETOBSERV-1630)
  • 在以前的版本中,当用户不是管理员时,错误消息与 web 控制台中的 Network Traffic 视图的所选标签页不一致。现在,user not admin 错误可以正确地在任何标签页中显示。(NETOBSERV-1621)

2.1.43. Network Observability Operator 1.6.0 已知问题

您可以查看 Network Observability Operator 1.6.0 的以下已知问题。

  • 当 eBPF 代理 PacketDrop 功能被启用,并抽样被配置为一个大于 1 的值时,报告的丢弃的字节并丢弃数据包会忽略抽样配置。虽然这样做的目的为了不遗漏任何数据丢弃,但这样做的一个副作用是报告的丢弃数据与非丢弃数据的比例变得有倾向性。例如,对于一个非常高的抽样率(如 1:1000 )中,在控制台插件中观察到的情况是,几乎所有流量都被丢弃。(NETOBSERV-1676)
  • Overview 选项卡中的 Manage panels 窗口中,过滤 总计,bar,donut, or line 不会显示任何结果。(NETOBSERV-1540)
  • 如果首先创建了接口,然后才部署 eBPF 代理,则不会检测到这个 SR-IOV 二级接口。只有在先部署了代理,然后再创建 SR-IOV 接口时,才会检测到它。(NETOBSERV-1697)
  • 当禁用 Loki 时,OpenShift Web 控制台中的 Topology 视图始终会在网络拓扑图旁边的滑块中显示集群区域聚合选项,即使未启用相关的功能。现在还没有可以解决这个问题的临时解决方案,只能忽略这些滑块选项。(NETOBSERV-1705)
  • 当 Loki 被禁用时,OpenShift Web 控制台第一次加载时,可能会显示错误:Request failed with status code 400 Loki is disabled。作为临时解决方案,您可以继续在 Network Traffic 页面中切换内容,如点 TopologyOverview 选项卡。这个错误应该会消失。(NETOBSERV-1706)

2.1.44. Network Observability Operator 1.5.0 公告

您可以查看 Network Observability Operator 1.5 发行版本的以下公告。

Network Observability Operator 1.5.0

您可以查看 Network Observability Operator 1.5 的以下新功能和增强。

2.1.45.1. DNS 跟踪增强

在 1.5 中,除了 UDP 外,还支持 TCP 协议。在 Network Traffic 页面的 Overview 视图中添加了新的仪表板。

如需更多信息,请参阅:

2.1.45.2. 往返时间 (RTT)

您可以使用从 fentry/tcp_rcv_ established Extended Berkeley Packet Filter (eBPF) hookpoint 中捕获的 TCP 握手 Round-Trip Time (RTT) 来读取平稳的往返时间(SRTT) 并分析网络流。在 web 控制台中的 OverviewNetwork Traffic、和 Topology 页面中,您可以监控网络流量,并使用 RTT 指标、过滤和边缘标记进行故障排除。

如需更多信息,请参阅:

2.1.45.3. 指标、仪表板和警报增强

ObserveDashboardsNetObserv 中的网络可观察性指标仪表板有新的指标类型,可用于创建 Prometheus 警报。现在,您可以在 includeList 规格中定义可用指标。在以前的版本中,这些指标在 ignoreTags 规格中定义。

有关这些指标的完整列表,请参阅:

您可以使用 DNS、Packet drop 和 RTT 指标为 Netobserv 仪表板创建 Prometheus 警报,即使您不使用 Loki。在以前的网络可观察性版本中 1.4,这些指标仅适用于在 Network TrafficOverviewTopology 视图中查询和分析,这些视图在没有 Loki 的情况下不可用。

如需更多信息,请参阅:

2.1.45.5. 可用区

您可以配置 FlowCollector 资源来收集有关集群可用区的信息。此配置增强了使用应用到节点的 topology.kubernetes.io/zone 标签值的网络流数据。

如需更多信息,请参阅:

2.1.45.6. 主要改进

Network Observability Operator 的 1.5 发行版本为 OpenShift Container Platform Web 控制台插件和 Operator 配置添加了改进和新功能。

2.1.45.7. 性能增强
  • spec.agent.ebpf.kafkaBatchSize 的默认设置从 10MB 改为 1MB,以便在使用 Kafka 时增强 eBPF 性能。

    重要

    当从现有安装升级时,不会在配置中自动设置这个新值。如果您在升级后发现 eBPF 代理内存消耗的性能出现回归的问题,您可以考虑将 kafkaBatchSize 减少为一个新值。

2.1.45.8. Web 控制台增强:
  • 在 DNS 和 RTT 的 Overview 视图中添加了新的面板:Min、Max、P90、P99。
  • 添加了新的面板显示选项:

    • 专注于一个面板,同时保持其他面板可查看但没有主要关注。
    • 切换图形类型。
    • 显示 TopOverall
  • 自定义时间范围 窗口中会显示集合延迟警告。
  • 增强了管理面板管理列弹出窗口内容的可见性。
  • 在 web 控制台的 Network Traffic 页面中,可以使用 egress QoS 的 Differentiated Services Code Point (DSCP) 字段来对 QoS DSCP 进行过滤。
2.1.45.9. 配置增强:
  • spec.loki.mode 规格中的 LokiStack 模式会自动设置 URL、TLS、集群角色和集群角色绑定,以及 authToken 值,来简化安装。Manual 模式允许对这些设置进行更多控制。
  • API 版本从 flows.netobserv.io/v1beta1 更新到 flows.netobserv.io/v1beta2

您可以查看 Network Observability Operator 1.5 发行版本的以下固定问题。

  • 在以前的版本中,如果禁用了 console 插件的自动注册功能,则无法在 web 控制台界面中手动注册 console 插件。如果在 FlowCollector 资源中将 spec.console.register 值设置为 false,Operator 会覆盖并清除插件注册。在这个版本中,将 spec.console.register 值设置为 false 不会影响控制台插件注册或删除。因此,可以安全地手动注册插件。(NETOBSERV-1134)
  • 在以前的版本中,使用默认指标设置,NetObserv/Health 仪表板显示一个名为 Flows Overhead 的空图形。这个指标只能通过从 ignoreTags 列表中删除 "namespaces-flows" 和 "namespaces" 时才可用。在这个版本中,在使用默认指标设置时,此指标可见。(NETOBSERV-1351)
  • 在以前的版本中,运行 eBPF 代理的节点无法使用一个特定的集群配置解析。这会导致一连串的后果,并导致无法提供一些流量指标。在这个版本中,eBPF 代理的节点 IP 由 Operator 安全提供,从 pod 状态推断出。现在,缺少的指标会被恢复。(NETOBSERV-1430)
  • 在以前的版本中,Loki Operator 的 Loki 错误 'Input size too long' 错误中没有包括可以帮助进行故障排除的额外信息。在这个版本中,帮助信息在 web 控制台中的错误旁显示,并带有直接链接来获得更详细的信息。(NETOBSERV-1464)
  • 在以前的版本中,控制台插件读取超时被强制为 30s。使用 FlowCollector v1beta2 API 更新,您可以配置 spec.loki.readTimeout 规格来根据 Loki Operator queryTimeout 限制更新这个值。(NETOBSERV-1443)
  • 在以前的版本中,Operator 捆绑包不会按预期显示 CSV 注解的一些支持功能,如 features.operators.openshift.io/…​。在这个版本中,这些注解会在 CSV 中按预期设置。(NETOBSERV-1305)
  • 在以前的版本中,在协调过程中,FlowCollector 状态有时会在 DeploymentInProgressReady 状态之间转换。在这个版本中,只有在所有底层组件都完全就绪时,状态才会变为 Ready。(NETOBSERV-1293)

2.1.47. Network Observability Operator 1.5.0 已知问题

您可以查看 Network Observability Operator 1.5 发行版本的以下已知问题。

  • 当尝试访问 web 控制台时,OCP 4.14.10 上的缓存问题会阻止访问 Observe 视图。Web 控制台显示错误消息:Failed to get a valid plugin manifest from /api/plugins/monitoring-plugin/.推荐的解决方法是,把集群升级到最新的次版本。如果这无法解决问题,请参阅红帽知识库文章。(NETOBSERV-1493)
  • 由于 Network Observability Operator 的 1.3.0 发行版本,安装 Operator 会导致出现警告内核污点。此错误的原因是网络可观察 eBPF 代理具有内存限制,阻止预分配整个哈希映射表。Operator eBPF 代理设置 BPF_F_NO_PREALLOC 标志,以便在 hashmap 过内存扩展时禁用预分配。

2.1.48. Network Observability Operator 1.4.2 公告

以下公告可用于 Network Observability Operator 1.4.2:

2.1.49. Network Observability Operator 1.4.2 CVE

您可以在 Network Observability Operator 1.4.2 发行版本中查看以下 CVE。

2.1.50. Network Observability Operator 1.4.1 公告

您可以查看 Network Observability Operator 1.4.1 的以下公告。

2.1.51. Network Observability Operator release 1.4.1 CVE

您可以在 Network Observability Operator 1.4.1 发行版本中查看以下 CVE。

您可以在 Network Observability Operator 1.4.1 发行版本中查看以下固定问题。

  • 在 1.4 中,向 Kafka 发送网络流数据时存在一个已知问题。Kafka 消息密钥被忽略,从而导致带有连接跟踪的错误。现在,密钥用于分区,因此来自同一连接的每个流都会发送到同一处理器。(NETOBSERV-926)
  • 在 1.4 中,引入了 Inner 流方向,以考虑在同一节点上运行的 pod 间的流。在生成的 Prometheus 指标中不会考虑从流派生的 Prometheus 指标中的带有 Inner 方向的流,从而导致出现以下字节和数据包率。现在,派生的指标包括带有 Inner 方向的流,提供正确的字节和数据包率。(NETOBSERV-1344)

2.1.53. 网络可观察性发行注记 1.4.0 公告

您可以查看 Network Observability Operator 1.4.0 发行版本的公告。

您可以在 Network Observability Operator 1.4.0 发行版本中查看以下新功能和增强。

2.1.54.1. 主要改进

Network Observability Operator 的 1.4 发行版本为 OpenShift Container Platform Web 控制台插件和 Operator 配置添加了改进和新功能。

2.1.54.2. Web 控制台增强:
  • Query Options 中,添加了 Duplicate 流 复选框,以选择要显示重复流。
  • 现在,您可以使用 arrow up long solid 单向、 arrow up long solid arrow down long solid Back- and-forth 过滤源和目标流量,以及 Swap 过滤器。
  • ObserveDashboardsNetObservNetObserv / Health 中的网络可观察性指标仪表板会修改,如下所示:

    • NetObserv 仪表板显示顶级字节、数据包发送、每个节点、命名空间和工作负载接收的数据包。流图从此仪表板中删除。
    • NetObserv / Health 仪表板显示流开销,以及每个节点的流率、命名空间和工作负载。
    • 基础架构和应用程序指标显示在命名空间和工作负载的 split-view 中。

如需更多信息,请参阅:

2.1.54.3. 配置增强:
  • 现在,您可以选择为任何配置的 ConfigMap 或 Secret 引用指定不同的命名空间,如证书配置中。
  • 添加 spec.processor.clusterName 参数,以便集群名称出现在流数据中。这在多集群上下文中很有用。使用 OpenShift Container Platform 时,留空,使其自动决定。

如需更多信息,请参阅:

2.1.54.4. 没有 Loki 的 Network Observability

Network Observability Operator 现在可以在没有 Loki 的情况下正常工作。如果没有安装 Loki,它只能导出流到 KAFKA 或 IPFIX 格式,并在网络可观察性指标仪表板中提供指标。

如需更多信息,请参阅:

2.1.54.5. DNS 跟踪

在 1.4 中,Network Observability Operator 使用 eBPF 追踪点 hook 启用 DNS 跟踪。您可以监控网络,执行安全分析,并对 web 控制台中的 Network TrafficOverview 页面中的 DNS 问题进行故障排除。

如需更多信息,请参阅:

2.1.54.6. SR-IOV 支持

现在,您可以使用单根 I/O 虚拟化(SR-IOV)设备从集群收集流量。

如需更多信息,请参阅:

2.1.54.7. 支持 IPFIX exporter

现在,您可以将 eBPF 丰富的网络流导出到 IPFIX 收集器。

如需更多信息,请参阅:

2.1.54.8. 数据包丢弃

在 Network Observability Operator 的 1.4 发行版本中,eBPF 追踪点 hook 用于启用数据包丢弃跟踪。现在,您可以检测和分析数据包丢弃的原因,并做出决策来优化网络性能。在 OpenShift Container Platform 4.14 及更高版本中,会检测主机丢弃和 OVS 丢弃。在 OpenShift Container Platform 4.13 中,只检测主机丢弃。

如需更多信息,请参阅:

2.1.54.9. s390x 架构支持

Network Observability Operator 现在可在 s390x 构架中运行。以前,它在 amd64ppc64learm64 上运行。

您可以从 Network Observability Operator 1.4.0 发行版本中查看以下删除的功能。

2.1.55.1. 频道删除

您必须将频道从 v1.0.x 切换到 stable,以接收最新的 Operator 更新。v1.0.x 频道现已被删除。

您可以在 Network Observability Operator 1.4.0 发行版本中查看以下固定问题。

  • 在以前的版本中,网络可观察性导出的 Prometheus 指标被计算出可能重复的网络流。在相关的仪表板中,在 ObserveDashboards 中,这可能会导致潜在的双倍率。请注意,来自 Network Traffic 视图中的仪表板不会受到影响。现在,会过滤网络流以消除指标计算前的重复项,仪表板中会显示正确的流量率。(NETOBSERV-1131)
  • 在以前的版本中,当使用 Multus 或 SR-IOV (非默认网络命名空间)配置时,Network Observability Operator 代理无法捕获网络接口上的流量。现在,所有可用的网络命名空间都会被识别并用于捕获 SR-IOV 的流量。FlowCollectorSRIOVnetwork 自定义资源需要配置来收集流量。(NETOBSERV-1283)
  • 在以前的版本中,在 OperatorsInstalled Operators 的 Network Observability Operator 详情中,FlowCollector Status 字段可能会报告有关部署状态的错误信息。现在,status 字段会显示正确的信息。保持的事件历史记录,按事件日期排序。(NETOBSERV-1224)
  • 在以前的版本中,在网络流量负载激增时,某些 eBPF pod 被 OOM 终止,并进入 CrashLoopBackOff 状态。现在,eBPF 代理内存占用率有所改进,因此 pod 不会被 OOM 终止,并进入 CrashLoopBackOff 状态。(NETOBSERV-975)
  • 在以前的版本中,当 processor.metrics.tls 设置为 PROVIDED 时,insecureSkipVerify 选项值被强制为 true。现在,您可以将 insecureSkipVerify 设置为 truefalse,并在需要时提供 CA 证书。(NETOBSERV-1087)

您可以在 Network Observability Operator 1.4.0 发行版本中查看以下已知问题。

  • 由于 Network Observability Operator 的 1.2.0 发行版本使用 Loki Operator 5.6,Loki 证书更改会定期影响 flowlogs-pipeline pod,并导致丢弃流而不是写入 Loki 的流。一段时间后,问题会自行修正,但它仍然会在 Loki 证书更改过程中导致临时流数据丢失。此问题仅在有 120 个节点或更多节点的大型环境中观察到。(NETOBSERV-980)
  • 目前,当 spec.agent.ebpf.features 包括 DNSTracking 时,更大的 DNS 数据包需要 eBPF 代理在第一套接字缓冲区(SKB)网段外查找 DNS 标头。需要实施新的 eBPF 代理帮助程序功能来支持它。目前,这个问题还没有临时解决方案。(NETOBSERV-1304)
  • 目前,当 spec.agent.ebpf.features 包括 DNSTracking 时,通过 TCP 数据包的 DNS 需要 eBPF 代理在 1st SKB 段外查找 DNS 标头。需要实施新的 eBPF 代理帮助程序功能来支持它。目前,这个问题还没有临时解决方案。(NETOBSERV-1245)
  • 目前,在使用 KAFKA 部署模型时,如果配置了对话跟踪,则对话事件可能会在 Kafka 用户间重复,导致跟踪对话不一致和不正确的 volumetric 数据。因此,不建议在 deploymentModel 设置为 KAFKA 时配置对话跟踪。(NETOBSERV-926)
  • 目前,当 processor.metrics.server.tls.type 配置为使用 PROVIDED 证书时,Operator 会进入一个没有就绪的状态,该状态可能会影响其性能和资源消耗。在解决此问题解决前,建议不要使用 PROVIDED 证书,而是使用自动生成的证书,将 processor.metrics.server.tls.type 设置为 AUTO。(NETOBSERV-1293
  • 由于 Network Observability Operator 的 1.3.0 发行版本,安装 Operator 会导致出现警告内核污点。此错误的原因是网络可观察 eBPF 代理具有内存限制,阻止预分配整个哈希映射表。Operator eBPF 代理设置 BPF_F_NO_PREALLOC 标志,以便在 hashmap 过内存扩展时禁用预分配。

2.1.58. Network Observability Operator 1.3.0 公告

您可以查看 Network Observability Operator 1.3.0 发行版本中的以下公告。

您可以在 Network Observability Operator 1.3.0 发行版本中查看以下新功能和增强。

2.1.59.1. 网络可观察性中的多租户
  • 系统管理员可以将单独的用户访问或组访问权限限制为存储在 Loki 中的流。如需更多信息,请参阅"网络可观察性中的多租户"。
2.1.59.2. 基于流的指标仪表板
  • 此发行版本添加了一个新的仪表板,它概述了 OpenShift Container Platform 集群中的网络流。如需更多信息,请参阅"网络可观察性指标仪表板"。
2.1.59.3. 使用 must-gather 工具进行故障排除
  • 有关 Network Observability Operator 的信息现在可以包含在 must-gather 数据中以进行故障排除。如需更多信息,请参阅"网络可观察性 must-gather"。
2.1.59.4. 现在支持多个构架
  • Network Observability Operator 现在可在 amd64ppc64learm64 架构上运行。在以前的版本中,它只在 amd64 上运行。

您可以查看 Network Observability Operator 1.3.0 发行版本中的以下已弃用的功能。

2.1.60.1. 频道弃用

您必须将频道从 v1.0.x 切换到 stable,以接收将来的 Operator 更新。v1.0.x 频道已弃用,计划在以后的发行版本中删除。

2.1.60.2. 弃用的配置参数设置

Network Observability Operator 1.3 发行版本弃用了 spec.Loki.authToken HOST 设置。使用 Loki Operator 时,现在必须使用 FORWARD 设置。

您可以在 Network Observability Operator 1.3.0 发行版本中查看以下固定问题。

  • 在以前的版本中,当通过 CLI 安装 Operator 时,Cluster Monitoring Operator 所需的 RoleRoleBinding 不会按预期安装。从 Web 控制台安装 Operator 时,不会出现这个问题。现在,安装 Operator 的任何方法都会安装所需的 RoleRoleBinding。(NETOBSERV-1003)
  • 自版本 1.2 起,Network Observability Operator 可以在流集合出现问题时引发警报。在以前的版本中,由于一个程序错误,用于禁用警报的相关配置,spec.processor.metrics.disableAlerts 无法正常工作,有时无效。现在,此配置已被修复,可以禁用警报。(NETOBSERV-976)
  • 在以前的版本中,当将 spec.loki.authToken 设置为 DISABLED 时,只有 kubeadmin 集群管理员能够查看网络流。其他类型的集群管理员收到授权失败。现在,任何集群管理员都可以查看网络流。(NETOBSERV-972)
  • 在以前的版本中,一个 bug 会阻止用户将 spec.consolePlugin.portNaming.enable 设置为 false。现在,此设置可以设置为 false 来禁用端口到服务名称转换。(NETOBSERV-971)
  • 在以前的版本中,Cluster Monitoring Operator (Prometheus) 不会收集由 console 插件公开的指标,因为配置不正确。现在,配置已被修复,控制台插件指标可以被正确收集并从 OpenShift Container Platform Web 控制台访问。(NETOBSERV-765)
  • 在以前的版本中,当在 FlowCollector 中将 processor.metrics.tls 设置为 AUTO 时,flowlogs-pipeline servicemonitor 不会适应适当的 TLS 方案,且指标在 web 控制台中不可见。现在,这个问题已针对 AUTO 模式解决。(NETOBSERV-1070)
  • 在以前的版本中,证书配置(如 Kafka 和 Loki)不允许指定 namespace 字段,这意味着证书必须位于部署网络可观察性的同一命名空间中。另外,当在 TLS/mTLS 中使用 Kafka 时,用户必须手动将证书复制到部署 eBPF 代理 pod 的特权命名空间,并手动管理证书更新,如证书轮转时。现在,通过为 FlowCollector 资源中的证书添加 namespace 字段来简化网络可观察性设置。现在,用户可以在不同的命名空间中安装 Loki 或 Kafka,而无需在网络可观察性命名空间中手动复制其证书。原始证书会被监视,以便在需要时自动更新副本。(NETOBSERV-773)
  • 在以前的版本中,网络可观察性代理不包括 SCTP、ICMPv4 和 ICMPv6 协议,从而更全面的网络流覆盖。现在,这些协议可以被识别以改进流覆盖。(NETOBSERV-934)

2.1.62. Network Observability Operator 1.3.0 已知问题

您可以查看以下问题及其临时解决方案(如果可用),以排除 Network Observability Operator 1.3.0 发行版本中的问题。

  • FlowCollector 中的 processor.metrics.tls 设置为 PROVIDED 时,flowlogs-pipeline servicemonitor 不会适应 TLS 方案。(NETOBSERV-1087)
  • 由于 Network Observability Operator 的 1.2.0 发行版本使用 Loki Operator 5.6,Loki 证书更改会定期影响 flowlogs-pipeline pod,并导致丢弃流而不是写入 Loki 的流。一段时间后,问题会自行修正,但它仍然会在 Loki 证书更改过程中导致临时流数据丢失。此问题仅在有 120 个节点或更多节点的大型环境中观察到。(NETOBSERV-980)
  • 安装 Operator 时,可能会出现警告内核污点。此错误的原因是网络可观察 eBPF 代理具有内存限制,阻止预分配整个哈希映射表。Operator eBPF 代理设置 BPF_F_NO_PREALLOC 标志,以便在 hashmap 过内存扩展时禁用预分配。

将 Network Observability Operator 的更新频道从已弃用的 v1.0.x 切换到 stable 频道,以继续获得将来的发行版本和更新。

已安装的 Operator 的订阅指定一个更新频道,用于跟踪和接收 Operator 的更新。在 Network Observability Operator 的 1.2 发布前,唯一可用的频道为 v1.0.x。Network Observability Operator 的 1.2 发行版本引入了用于跟踪和接收更新的 stable 更新频道。您必须将频道从 v1.0.x 切换到 stable,以接收将来的 Operator 更新。v1.0.x 频道已弃用,计划在以后的发行版本中删除。

2.1.64. Network Observability Operator 1.2.0 公告

您可以查看 Network Observability Operator 1.2.0 发行版本的以下公告。

您可以查看 Network Observability Operator 1.2.0 的以下新功能和增强。

2.1.65.1. 流量流视图中的直方图

现在,您可以选择显示一段时间内流的直方图。histogram 可让您视觉化流历史记录,而不会达到 Loki 查询的限制。如需更多信息,请参阅"使用直方图"。

2.1.65.2. 对话跟踪

现在,您可以通过 Log Type 查询流,它允许对同一对话一部分的网络流进行分组。如需更多信息,请参阅"使用对话"。

2.1.65.3. 网络可观察性健康警报

现在,如果因为写入阶段出现错误,或者达到 Loki ingestion 速率限制,Network Observability Operator 会在 flowlogs-pipeline 丢弃流时自动创建自动警报。如需更多信息,请参阅"Health dashboard"。

您可以查看 Network Observability Operator 1.2.0 发行版本的以下固定问题。

  • 在以前的版本中,在更改 FlowCollector spec 中的 namespace 值后,在前一个命名空间中运行的 eBPF 代理 pod 没有被适当删除。现在,在上一个命名空间中运行的 pod 会被正确删除。(NETOBSERV-774)
  • 在以前的版本中,在更改 FlowCollector spec (如 Loki 部分)中的 caCert.name 值后,FlowLogs-Pipeline pod 和 Console 插件 pod 不会重启,因此它们不知道配置更改。现在,pod 被重启,因此它们会获得配置更改。(NETOBSERV-772)
  • 在以前的版本中,在不同节点上运行的 pod 间的网络流有时没有正确识别为重复,因为它们由不同的网络接口捕获。这会导致控制台插件中显示过量的指标。现在,流会被正确识别为重复,控制台插件会显示准确的指标。(NETOBSERV-755)
  • 控制台插件中的 "reporter" 选项用于根据源节点或目标节点的观察点过滤流。在以前的版本中,无论节点观察点是什么,这个选项都会混合流。这是因为在节点级别将网络流错误地报告为 Ingress 或 Egress。现在,网络流方向报告是正确的。源观察点的 "reporter" 选项过滤器,或目标观察点如预期。( NETOBSERV-696)
  • 在以前的版本中,对于配置为直接将流作为 gRPC+protobuf 请求发送的代理,提交的有效负载可能太大,并由处理器的 GRPC 服务器拒绝。这会在有非常高负载的场景中发生,且只会发生在一些代理配置中。代理记录错误消息,例如:grpc: received message larger than max。因此,缺少有关这些流的信息丢失。现在,当大小超过阈值时,gRPC 有效负载被分成多个信息。因此,服务器可以维护连接状态。(NETOBSERV-617)

2.1.67. Network Observability Operator 1.2.0 已知问题

您可以查看以下问题及其临时解决方案(如果可用),以排除 Network Observability Operator 1.2.0 发行版本中的问题。

  • 在 Network Observability Operator 的 1.2.0 发行版本中,使用 Loki Operator 5.6,Loki 证书转换会定期影响 flowlogs-pipeline pod,并导致丢弃流而不是写入 Loki 的流程。一段时间后,问题会自行修正,但它仍然会在 Loki 证书转换过程中导致临时流数据丢失。(NETOBSERV-980)

因为新的技术变化,Network Observability Operator 1.2.0 发行版本需要在 openshift-netobserv-operator 命名空间中安装。以前使用自定义命名空间的用户必须删除旧实例并重新安装 Operator。

在以前的版本中,您可以使用自定义命名空间安装 Network Observability Operator。此发行版本引入了 转换 Webhook,它更改了 ClusterServiceVersion。由于这个变化,所有可用的命名空间不再被列出。另外,要启用 Operator 指标集合,无法使用与其他 Operator 共享的命名空间(如 openshift-operators 命名空间)。

现在,Operator 必须安装在 openshift-netobserv-operator 命名空间中。

如果您之前使用自定义命名空间安装 Network Observability Operator,则无法自动升级到新的 Operator 版本。如果您之前使用自定义命名空间安装 Operator,您必须删除已安装的 Operator 实例,并在 openshift-netobserv-operator 命名空间中重新安装 Operator。务必要注意,对于 FlowCollector、Loki、Kafka 和其他插件,仍可使用自定义命名空间(如常用的 netobserv 命名空间)。

2.1.69. Network Observability Operator 1.1.0 的改进

您可以查看 Network Observability Operator 1.1.0 的以下公告:

Network Observability Operator 现在稳定,发行频道已升级到 v1.1.0

您可以查看 Network Observability Operator 1.1.0 发行版本的以下固定问题。

  • 在以前的版本中,除非 Loki authToken 配置被设置为 FORWARD 模式,否则不会强制身份验证,允许未授权用户检索流。现在,无论 Loki authToken 模式如何,只有集群管理员才能检索流。(BZ#2169468)

第 3 章 关于网络可观察性

使用 Network Observability Operator 通过 eBPF 技术观察网络流量,通过 Prometheus metrics 和 Loki 日志提供故障排除分析。

您可以在 OpenShift Container Platform 控制台中查看和分析此信息,以进一步洞察和故障排除。

3.1. Network Observability Operator

Network Observability Operator 提供集群范围的 FlowCollector API 自定义资源,用于管理在 Loki 或 Prometheus 中收集、增强和存储网络流的 eBPF 代理和服务管道。

FlowCollector 实例部署组成监控管道的 pod 和服务。

eBPF 代理部署为 daemonset 对象,并创建网络流。管道收集并增强 Kubernetes 元数据的网络流,然后再将其存储在 Loki 中或生成 Prometheus 指标。

3.2. Network Observability Operator 的可选依赖项

将 Network Observability Operator 与可选依赖项集成,如用于流存储的 Loki Operator,以及用于具有弹性、大型数据处理和可扩展性的 AMQ Streams (Kafka)。

支持的可选依赖项包括用于流存储的 Loki Operator,使用 Kafka 进行大型数据处理 AMQ Streams。

Loki Operator
您可以使用 Loki 作为后端,以 maximal 级别存储所有收集的流。建议您使用红帽支持的 Loki Operator 安装 Loki。您还可以选择在没有 Loki 的情况下使用网络可观察性,但需要考虑一些因素。如需更多信息,请参阅"没有 Loki 的网络可观察性"。
AMQ Streams Operator

Kafka 为大规模部署在 OpenShift Container Platform 集群中提供可扩展性、弹性和高可用性。

注意

如果您选择使用 Kafka,建议使用 Red Hat 支持的 AMQ Streams Operator。

3.3. OpenShift Container Platform 控制台集成

Network Observability Operator 与 OpenShift Container Platform 控制台集成,提供概述、拓扑视图和流量流表。

ObserveDashboards 中的 Network observability 指标仪表板仅适用于具有管理员权限的用户。

注意

要为开发人员访问权限以及对命名空间具有有限访问权限的管理员启用多租户,您必须通过定义角色来指定权限。如需更多信息,请参阅"在网络可观察性中启用多租户"。

3.3.1. 网络可观察性指标仪表板

查看 OpenShift Container Platform 控制台中的网络可观察性指标仪表板,它提供整个流量流聚合、过滤选项和专用仪表板来监控 Operator 健康状况。

在 OpenShift Container Platform 控制台的 Overview 选项卡上,您可以查看集群上网络流量流的整体聚合指标。您可以选择按集群、节点、命名空间、所有者、pod 和服务显示信息。过滤器和显示选项可以进一步优化指标。如需更多信息,请参阅"从 Overview 视图保留网络流量"。

ObserveDashboards 中,Netobserv 仪表板可让您快速了解 OpenShift Container Platform 集群中的网络流。Netobserv/Health 仪表板提供有关 Operator 健康状况的指标。如需更多信息,请参阅"网络可观察性指标"和"查看健康信息"。

3.3.2. 网络可观察性拓扑视图

OpenShift Container Platform 控制台中的网络可观察拓扑视图显示组件间的流量流的图形表示,您可以使用各种过滤和显示选项对其进行优化。

OpenShift Container Platform 控制台提供 Topology 选项卡,它以网络图的形式来代表 OpenShift Container Platform 组件之间的流量。您可以使用过滤器和显示选项重新定义图形。您可以访问集群、区域、udn、节点、命名空间、所有者、pod 和服务的信息。

3.3.3. 流量流表

OpenShift Container Platform Web 控制台中的流量流表提供了原始网络流的详细视图,提供强大的过滤选项和可配置列,以进行深入分析。

OpenShift Container Platform Web 控制台中的 Traffic flows 选项卡显示网络流的数据和流量数量。

3.4. Network Observability CLI

Network Observability CLI (oc netobserv)是一个轻量级工具,它可快速流传输和数据包数据,以快速了解网络问题,而无需完整的 Network Observability Operator 安装。

Network Observability CLI 是一个流和数据包视觉化工具,它依赖于 eBPF 代理将收集的数据流传输到临时收集器 pod。在捕获过程中不需要持久性存储。运行后,输出将传输到您的本地计算机。这可以实现快速了解数据包和流数据,而无需安装 Network Observability Operator。

第 4 章 安装 Network Observability Operator

在使用 Network Observability Operator 前,建议安装 Loki Operator。您可以在没有 Loki 的情况下使用网络可观察性,但如果您只需要指标或外部导出器,则需要特殊考虑。

Loki Operator 集成了通过 Loki 实现多租户和身份验证的网关,以进行数据流存储。LokiStack 资源管理 Loki,它是一个可扩展、高度可用、多租户日志聚合系统和使用 OpenShift Container Platform 身份验证的 Web 代理。LokiStack 代理使用 OpenShift Container Platform 身份验证来强制实施多租户,并方便在 Loki 日志存储中保存和索引数据。

注意

Loki Operator 也可用于 配置 LokiStack 日志存储。Network Observability Operator 需要一个专用的、与日志分开的 LokiStack。

4.1. 没有 Loki 的 Network Observability

比较与网络可观察性相关的功能,而不安装 Loki Operator。

如果您只想将流导出到 Kafka 消费者或 IPFIX 收集器,或者您只需要仪表板指标,则不需要为 Loki 安装 Loki 或为 Loki 提供存储。下表比较了在使用和没有使用 Loki 时的功能比较。

Expand
表 4.1. 功能可用性与没有 Loki 的功能的比较
 带有 Loki没有 Loki

Exporters

X

X

多租户

X

X

完整的过滤和聚合功能 [1]

X

 

部分过滤和聚合功能 [2]

X

X

基于流的指标和仪表板

X

X

流量流视图概述 [3]

X

X

流量流视图表

X

 

拓扑视图

X

X

OpenShift Container Platform 控制台 Network Traffic 标签页集成

X

X

  1. 例如,每个 pod。
  2. 例如,每个工作负载或命名空间。
  3. 使用在使用 Loki 时才可以获得数据包丢弃的统计信息。

4.2. 安装 Loki Operator

从软件目录中安装支持的 Loki Operator 版本以启用安全 LokiStack 实例,它为网络可观察性提供自动集群身份验证和授权。

Loki Operator 版本 6.0+ 是网络可观察性支持的 Loki Operator 版本。这些版本提供了使用 openshift-network 租户配置模式创建 LokiStack 实例的功能,并为网络可观察性提供完全自动的、集群身份验证和授权支持。

先决条件

  • 有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。
  • 您可以访问受支持的对象存储。例如:AWS S3、Google Cloud Storage、Azure、Swift、Minio 或 OpenShift Data Foundation。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  2. 从可用的 Operator 列表中选择 Loki Operator,然后点 Install
  3. Installation Mode 下,选择 All namespaces on the cluster

验证

  1. 验证您安装了 Loki Operator。访问 OperatorsInstalled Operators 页面,并查找 Loki Operator
  2. 验证 Loki Operator 是否在所有项目中 StatusSucceeded
重要

要卸载 Loki,请参考与用来安装 Loki 的方法相关的卸载过程。您可能会有剩余的 ClusterRoleClusterRoleBindings、存储在对象存储中的数据,以及需要被删除的持久性卷。

4.2.1. 为 Loki 存储创建 secret

使用云存储凭证(如 Amazon Web Services (AWS))创建 secret,以允许 Loki Operator 访问日志持久性所需的对象存储。

Loki Operator 支持几个日志存储选项,如 AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation。以下示例演示了如何为 AWS S3 存储创建 secret。本例中创建的 secret loki-s3 在"Creating a LokiStack custom resource"中引用。您可以通过 web 控制台或 CLI 中创建此 secret。

流程

  1. 使用 Web 控制台,进入到 ProjectAll Projects 下拉菜单,再选择 Create Project
  2. 将项目命名为 netobserv,再点 Create
  3. 使用右上角的 Import 图标 +。将 YAML 文件粘贴到编辑器中。

    下面显示了一个 S3 存储的 secret YAML 文件示例:

    apiVersion: v1
    kind: Secret
    metadata:
      name: loki-s3
      namespace: netobserv-loki
    stringData:
      access_key_id: QUtJQUlPU0ZPRE5ON0VYQU1QTEUK
      access_key_secret: d0phbHJYVXRuRkVNSS9LN01ERU5HL2JQeFJmaUNZRVhBTVBMRUtFWQo=
      bucketnames: s3-bucket-name
      endpoint: https://s3.eu-central-1.amazonaws.com
      region: eu-central-1

    其中:

    metadata.namespace
    指定 Loki S3 secret 的命名空间。虽然本示例使用 netobserv-loki,但您可以为不同的组件使用不同的命名空间。
    stringData.access_key_id
    指定 S3 存储桶的访问密钥 ID。
    stringData.access_key_secret
    指定 S3 存储桶的 secret 访问密钥。
    stringData.bucketnames
    指定 S3 存储桶的名称。
    stringData.endpoint
    指定 S3 服务的端点 URL。
    stringData.region
    指定存储桶所在的 AWS 区域。

验证

  • 创建 secret 后,您可以查看 web 控制台中的 WorkloadsSecrets 下列出的 secret。

4.2.2. 创建 LokiStack 自定义资源

使用 Web 控制台或 OpenShift CLI (oc)部署 LokiStack 自定义资源,确保为 Loki 对象存储配置正确的命名空间、部署大小和 secret 名称。

您可以部署 LokiStack 自定义资源(CR)来创建命名空间或新项目。

流程

  1. 进入到 OperatorsInstalled Operators,从 Project 下拉菜单查看 All projects
  2. 查找 Loki Operator。在详情的 Provided APIs 下,选择 LokiStack
  3. Create LokiStack
  4. 确保在 Form ViewYAML 视图中指定以下字段:

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: loki
      namespace: netobserv-loki
    spec:
      size: 1x.small
      storage:
        schemas:
        - version: v13
          effectiveDate: '2022-06-01'
        secret:
          name: loki-s3
          type: s3
      storageClassName: gp3
      tenants:
        mode: openshift-network

    其中:

    metadata.namespace
    指定 LokiStack 资源的命名空间。虽然本示例使用 netobserv-loki,但您可以为不同的组件使用不同的命名空间。
    spec.size

    指定部署大小。在 Loki Operator 5.8 及更新的版本中,Loki 的生产实例支持的大小选项为 1x.extra-small1x.small1x.medium

    重要

    对于部署大小,无法更改 1x 值。

    spec.storageClassName

    指定集群中可用于 ReadWriteOnce 访问模式的存储类名称。为获得最佳性能,请指定分配块存储的存储类。使用 oc get storageclasses 命令查看集群中的可用存储类。

    重要

    您不能重复使用用于日志记录的同一 LokiStack 自定义资源。

  5. Create

4.2.3. 为 cluster-admin 用户角色创建新组

重要

cluster-admin 用户身份查询多个命名空间的应用程序日志,其中集群中所有命名空间的字符总和大于 5120,会导致错误 Parse error: input size too long (XXXX > 5120)。为了更好地控制 LokiStack 中日志的访问,请使 cluster-admin 用户成为 cluster-admin 组的成员。如果 cluster-admin 组不存在,请创建它并将所需的用户添加到其中。

使用以下步骤为具有 cluster-admin 权限的用户创建新组。

流程

  1. 输入以下命令创建新组:

    $ oc adm groups new cluster-admin
  2. 输入以下命令将所需的用户添加到 cluster-admin 组中:

    $ oc adm groups add-users cluster-admin <username>
  3. 输入以下命令在组中添加 cluster-admin 用户角色:

    $ oc adm policy add-cluster-role-to-group cluster-admin cluster-admin

4.2.4. 自定义 admin 组访问

如果您需要看到集群范围的日志,而不一定是管理员,或者已经定义了想要使用的组,您可以使用 adminGroup 字段指定自定义组。属于 LokiStack 自定义资源(CR) 的 adminGroups 字段中指定的组成员的用户,具有与管理员相同的读取访问权限。

管理员用户有权访问整个集群中的所有网络日志。

LokiStack CR 示例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: loki
  namespace: netobserv
spec:
  tenants:
    mode: openshift-network 
1

    openshift:
      adminGroups: 
2

      - cluster-admin
      - custom-admin-group 
3

1
自定义管理组仅在此模式中可用。
2
为此字段输入空 list [] 值会禁用 admin 组。
3
覆盖默认组(system:cluster-admins,cluster-admin,dedicated-admin)

4.2.5. Loki 部署大小

Loki 的大小使用 1x.<size> 格式,其中值 1x 是实例数量,<size> 指定性能功能。

重要

对于部署大小,无法更改 1x 值。

Expand
表 4.2. Loki 大小
 1x.demo1x.extra-small1x.small1x.medium

数据传输

仅用于演示

100GB/day

500GB/day

2TB/day

每秒查询数 (QPS)

仅用于演示

1-25 QPS at 200ms

25-50 QPS at 200ms

25-75 QPS at 200ms

复制因子

None

2

2

2

总 CPU 请求

None

14 个 vCPU

34 个 vCPU

54 个 vCPU

内存请求总数

None

31Gi

67Gi

139Gi

磁盘请求总数

40Gi

430Gi

430Gi

590Gi

4.2.6. LokiStack ingestion 限制和健康警报

LokiStack 实例包括默认的 ingestion 和查询限制,管理员可覆盖这些限制来管理性能并防止系统警报或错误。

注意

如果您在 Console 插件中或 flowlogs-pipeline 日志中收到 Loki 错误,则可能需要更新 ingestion 和查询限制。

以下是配置的限制示例:

spec:
  limits:
    global:
      ingestion:
        ingestionBurstSize: 40
        ingestionRate: 20
        maxGlobalStreamsPerTenant: 25000
      queries:
        maxChunksPerQuery: 2000000
        maxEntriesLimitPerQuery: 10000
        maxQuerySeries: 3000

有关这些设置的更多信息,请参阅 LokiStack API 参考

4.3. 安装 Network Observability Operator

安装 Network Observability Operator,并使用设置向导创建 FlowCollector 自定义资源定义(CRD)来完成初始配置。

在创建 FlowCollector 时,您可以在 web 控制台中设置规格。

重要

Operator 的实际内存消耗取决于集群大小和部署的资源数量。可能需要调整内存消耗。如需更多信息,请参阅"重要流收集器配置注意事项"部分中的"网络 Observability 控制器管理器 pod 内存不足"。

先决条件

  • 如果您选择使用 Loki,请安装 Loki Operator 版本 5.7+
  • 您必须具有 cluster-admin 权限。
  • 需要以下支持的架构之一:amd64, ppc64le, arm64, 或 s390x
  • Red Hat Enterprise Linux (RHEL) 9 支持的任何 CPU。
  • 必须使用 OVN-Kubernetes 或 OpenShift SDN 配置为主网络插件,并可以选择使用二级接口,如 Multus 和 SR-IOV。
注意

另外,这个安装示例使用 netobserv 命名空间,该命名空间在所有组件中使用。您可以选择使用不同的命名空间。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  2. OperatorHub 中的可用 Operator 列表中选择 Network Observability Operator,然后点 Install
  3. 选中 Enable Operator recommended cluster monitoring on this Namespace 的复选框。
  4. 导航到 OperatorsInstalled Operators。在 Provided APIs for Network Observability 下, 选择 Flow Collector 链接。
  5. 按照 Network Observability FlowCollector 设置向导
  6. Create

验证

要确认这一点,当您进入到 Observe 时,您应该看到选项中列出的 Network Traffic

如果 OpenShift Container Platform 集群中没有应用程序流量,默认过滤器可能会显示"No results",这会导致没有视觉流。在过滤器选择旁边,选择 Clear all filters 来查看流。

4.4. 在网络可观察性中启用多租户

通过配置集群角色和命名空间角色来授予项目管理员和开发人员对 Loki 和 Prometheus 中的流和指标的限制,在网络可观察性中启用多租户。

为项目管理员启用访问权限。对某些命名空间具有有限访问权限的项目管理员只能访问这些命名空间的流。

对于开发人员,多租户可用于 Loki 和 Prometheus,但需要不同的访问权限。

前提条件

流程

  • 对于每个租户访问权限,您必须具有 netobserv-loki-reader 集群角色和 netobserv-metrics-reader 命名空间角色才能使用 Developer 视角。对这个访问级别运行以下命令:

    $ oc adm policy add-cluster-role-to-user netobserv-loki-reader <user_group_or_name>
    $ oc adm policy add-role-to-user netobserv-metrics-reader <user_group_or_name> -n <namespace>
  • 对于集群范围的访问权限,非集群管理员必须具有 netobserv-loki-readercluster-monitoring-viewnetobserv-metrics-reader 集群角色。在这种情况下,您可以使用 admin 视角或开发者视角。对这个访问级别运行以下命令:

    $ oc adm policy add-cluster-role-to-user netobserv-loki-reader <user_group_or_name>
    $ oc adm policy add-cluster-role-to-user cluster-monitoring-view <user_group_or_name>
    $ oc adm policy add-cluster-role-to-user netobserv-metrics-reader <user_group_or_name>

4.5. 重要的流收集器配置注意事项

在初始部署前查看基本 FlowCollector 配置选项,以避免在以后重新配置导致的 pod 中断。主要设置包括 Kafka 集成、增强的流数据导出、SR-IOV 流量监控以及 DNS 和数据包丢弃的高级跟踪。

在创建 FlowCollector 实例时,您可以重新配置它,但 pod 会再次终止并重新创建,这可能会造成破坏性。

因此,您可以考虑在首次创建 FlowCollector 时配置以下选项。

4.5.1. 迁移删除了 FlowCollector CRD 的存储版本

FlowCollector 自定义资源定义(CRD) storedVersion 列表中手动删除已弃用的 v1alpha1 版本,以防止升级错误,并成功迁移到 Network Observability Operator 1.6。

删除存储版本有两个选项:

  1. 使用 Storage Version Migrator Operator。
  2. 卸载并重新安装 Network Observability Operator,确保安装处于干净的状态。

先决条件

  • 已安装旧版本的 Operator,并希望准备集群来安装最新版本的 Operator。或者您试图安装 Network Observability Operator 1.6 并遇到错误:Failed risk of data loss updating "flowcollectors.flows.netobserv.io": new CRD removes version v1alpha1 that is listed as a stored version on the existing CRD

流程

  1. 验证旧的 FlowCollector CRD 版本仍然在 storedVersion 中被引用:

    $ oc get crd flowcollectors.flows.netobserv.io -ojsonpath='{.status.storedVersions}'
  2. 如果 v1alpha1 出现在结果列表中,请按照以下步骤 a 使用 Kubernetes Storage Version Migrator 或 Step b 来卸载并重新安装 CRD 和 Operator。

    1. 选项 1: Kubernetes Storage Version Migrator: 创建一个 YAML 来定义 StorageVersionMigration 对象,如 migrate-flowcollector-v1alpha1.yaml

      apiVersion: migration.k8s.io/v1alpha1
      kind: StorageVersionMigration
      metadata:
        name: migrate-flowcollector-v1alpha1
      spec:
        resource:
          group: flows.netobserv.io
          resource: flowcollectors
          version: v1alpha1
      1. 保存该文件。
      2. 运行以下命令来应用 StorageVersionMigration

        $ oc apply -f migrate-flowcollector-v1alpha1.yaml
      3. 更新 FlowCollector CRD,以从 storedVersion 中手动删除 v1alpha1

        $ oc edit crd flowcollectors.flows.netobserv.io
    2. 选项 2:FlowCollector CR 的 Network Observability Operator 1.5 版本保存到文件中,如 flowcollector-1.5.yaml

      $ oc get flowcollector cluster -o yaml > flowcollector-1.5.yaml
      1. 按照"卸载 Network Observability Operator"中的步骤,它会卸载 Operator 并删除现有的 FlowCollector CRD。
      2. 安装 Network Observability Operator 最新版本 1.6.0。
      3. 使用在第 b 步中保存的备份创建 FlowCollector

验证

  • 运行以下命令:

    $ oc get crd flowcollectors.flows.netobserv.io -ojsonpath='{.status.storedVersions}'

    结果列表应该不再显示 v1alpha1,仅显示最新版本 v1beta1

4.6. 安装 Kafka (可选)

Kafka Operator 支持大规模环境。Kafka 提供高吞吐量和低延迟数据源,以便以更具弹性且可扩展的方式转发网络流数据。

您可以从 Operator Hub 将 Kafka Operator 作为 Red Hat AMQ Streams 安装,就像 Loki Operator 和 Network Observability Operator 安装一样。请参阅"使用 Kafka 配置 FlowCollector 资源"以将 Kafka 配置为存储选项。

注意

要卸载 Kafka,请参考与用来安装的方法对应的卸载过程。

4.7. 卸载 Network Observability Operator

使用 OpenShift Container Platform Web 控制台 Operator Hub 卸载 Network Observability Operator,在 EcosystemInstalled Operators 区域中工作。

流程

  1. 删除 FlowCollector 自定义资源。

    1. Provided APIs 列中的 Network Observability Operator 旁边的 Flow Collector
    2. 集群点选项菜单 kebab ,选择 Delete FlowCollector
  2. 卸载 Network Observability Operator。

    1. 返回到 OperatorsInstalled Operators 区。
    2. Network Observability Operator 旁边的选项菜单 kebab ,选择 Uninstall Operator
    3. HomeProjects 并选择 openshift-netobserv-operator
    4. 进入到 Actions,再选择 Delete Project
  3. 删除 FlowCollector 自定义资源定义 (CRD)。

    1. 进入到 AdministrationCustomResourceDefinitions
    2. 查找 FlowCollector 并点选项菜单 kebab
    3. 选择 Delete CustomResourceDefinition

      重要

      如果已安装,Loki Operator 和 Kafka 会保留,需要被独立删除。另外,在一个对象存储中可能会有剩余的数据,以及持久性卷,这需要被删除。

OpenShift Container Platform 的 Network Observability Operator 部署一个监控管道。此管道收集并增强由 eBPF 代理 生成的网络流量流。

5.1. 查看状态

使用 oc get 命令检查 FlowCollector 资源状态以及 eBPF 代理,flowlogs-pipeline, 和控制台插件 Pod 的状态,查看 Network Observability Operator 的运行状态。

Network Observability Operator 提供 Flow Collector API。创建 Flow Collector 资源时,它会部署 pod 和服务,以在 Loki 日志存储中创建和存储网络流,并在 OpenShift Container Platform Web 控制台中显示仪表板、指标和流。

流程

  1. 运行以下命令来查看 Flowcollector 的状态:

    $ oc get flowcollector/cluster

    输出示例

    NAME      AGENT   SAMPLING (EBPF)   DEPLOYMENT MODEL   STATUS
    cluster   EBPF    50                DIRECT             Ready

  2. 输入以下命令检查在 netobserv 命名空间中运行的 pod 状态:

    $ oc get pods -n netobserv

    输出示例

    NAME                              READY   STATUS    RESTARTS   AGE
    flowlogs-pipeline-56hbp           1/1     Running   0          147m
    flowlogs-pipeline-9plvv           1/1     Running   0          147m
    flowlogs-pipeline-h5gkb           1/1     Running   0          147m
    flowlogs-pipeline-hh6kf           1/1     Running   0          147m
    flowlogs-pipeline-w7vv5           1/1     Running   0          147m
    netobserv-plugin-cdd7dc6c-j8ggp   1/1     Running   0          147m

    flowlogs-pipeline pod 收集流,增强收集的流,然后将流发送到 Loki 存储。netobserv-plugin pod 为 OpenShift Container Platform 控制台创建一个视觉化插件。

  3. 输入以下命令检查在 netobserv-privileged 命名空间中运行的 pod 状态:

    $ oc get pods -n netobserv-privileged

    输出示例

    NAME                         READY   STATUS    RESTARTS   AGE
    netobserv-ebpf-agent-4lpp6   1/1     Running   0          151m
    netobserv-ebpf-agent-6gbrk   1/1     Running   0          151m
    netobserv-ebpf-agent-klpl9   1/1     Running   0          151m
    netobserv-ebpf-agent-vrcnf   1/1     Running   0          151m
    netobserv-ebpf-agent-xf5jh   1/1     Running   0          151m

    netobserv-ebpf-agent pod 监控节点的网络接口以获取流并将其发送到 flowlogs-pipeline pod。

  4. 如果使用 Loki Operator,请输入以下命令检查 netobserv 命名空间中 LokiStack 自定义资源的 component pod 的状态:

    $ oc get pods -n netobserv

    输出示例

    NAME                                                READY   STATUS    RESTARTS   AGE
    lokistack-compactor-0                               1/1     Running   0          18h
    lokistack-distributor-654f87c5bc-qhkhv              1/1     Running   0          18h
    lokistack-distributor-654f87c5bc-skxgm              1/1     Running   0          18h
    lokistack-gateway-796dc6ff7-c54gz                   2/2     Running   0          18h
    lokistack-index-gateway-0                           1/1     Running   0          18h
    lokistack-index-gateway-1                           1/1     Running   0          18h
    lokistack-ingester-0                                1/1     Running   0          18h
    lokistack-ingester-1                                1/1     Running   0          18h
    lokistack-ingester-2                                1/1     Running   0          18h
    lokistack-querier-66747dc666-6vh5x                  1/1     Running   0          18h
    lokistack-querier-66747dc666-cjr45                  1/1     Running   0          18h
    lokistack-querier-66747dc666-xh8rq                  1/1     Running   0          18h
    lokistack-query-frontend-85c6db4fbd-b2xfb           1/1     Running   0          18h
    lokistack-query-frontend-85c6db4fbd-jm94f           1/1     Running   0          18h

5.2. Network Observablity Operator 架构

查看 Network Observability Operator 架构,详细说明 FlowCollector 资源如何管理 eBPF 代理,该代理收集并增强流,将数据发送到 Loki 以存储或 Prometheus 用于指标数据。

Network Observability Operator 提供 FlowCollector API,它在安装时实例化,并配置为协调 eBPF 代理flowlogs-pipelinenetobserv-plugin 组件。只支持每个集群有一个 FlowCollector

eBPF 代理 在每个集群节点上运行,具有一些特权来收集网络流。flowlogs-pipeline 接收网络流数据,并使用 Kubernetes 标识符增强数据。如果您选择使用 Loki,flowlogs-pipeline 会将流日志数据发送到 Loki 用于存储和索引。netobserv-plugin,它是一个动态 OpenShift Container Platform Web 控制台插件,查询 Loki 来获取网络流数据。Cluster-admins 可以在 web 控制台中查看数据。

如果不使用 Loki,您可以使用 Prometheus 生成指标。这些指标及其关联的仪表板可在 web 控制台中访问。如需更多信息,请参阅"没有 Loki 的 Network Observability"。

Network Observability eBPF 导出架构

Network Observability Operator 有三个部署模型选项。

注意

Network Observability Operator 不管理 Loki 或其他数据存储。您必须使用 Loki Operator 单独安装 Loki。如果使用 Kafka,则必须使用 Kafka Operator 单独安装它。

服务部署模型
FlowCollector 资源中的 spec.deploymentModel 字段设置为 Service 时,代理会作为守护进程集部署。flowlogs-pipeline 是带有服务的标准部署。您可以使用 spec.processor.consumerReplicas 字段来扩展 flowlogs-pipeline 组件。
直接部署模型
spec.deploymentModel 字段设置为 Direct 时,代理和 flowlogs-pipeline 都作为守护进程集部署。此模型适用于技术评估和小型集群。但是,在大型集群中,内存效率较低,因为每个 flowlogs-pipeline 实例都会缓存相同的集群信息。
Kafka 部署模型(可选)

如果使用 Kafka 选项,eBPF 代理 会将网络流数据发送到 Kafka。您可以使用 spec.processor.consumerReplicas 字段来扩展 flowlogs-pipeline 组件。flowlogs-pipeline 组件在将数据发送到 Loki 之前从 Kafka 主题读取,如下图所示。

使用 Kafka 的网络可观察性

使用 oc describe flowcollector/cluster 命令检查 Network Observability Operator 的当前状态、配置详情和生成的资源。

流程

  1. 运行以下命令,以查看 Network Observability Operator 的状态和配置:

    $ oc describe flowcollector/cluster

第 6 章 配置 Network Observability Operator

通过更新集群范围的 FlowCollector API 资源(集群)来配置 Network Observability Operator,以管理组件配置和流集合设置。

FlowCollector 在安装过程中明确创建。由于此资源在集群范围内运行,因此只允许单个 FlowCollector,且必须命名为 cluster。如需更多信息,请参阅 FlowCollector API 参考

6.1. 查看 FlowCollector 资源

通过集成设置、高级表单或通过直接编辑 YAML 来配置 Network Observability Operator,在 OpenShift Container Platform web 控制台中查看和修改 FlowCollector 资源。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。在这里,您可以修改 FlowCollector 资源来配置 Network Observability operator。

6.1.1. FlowCollector 资源示例

查看 FlowCollector 自定义资源的综合示例,它演示了 eBPF 抽样、对话跟踪、Loki 集成和控制台快速过滤器的配置。

6.1.1.1. 抽样 FlowCollector 资源
apiVersion: flows.netobserv.io/v1beta2
kind: FlowCollector
metadata:
  name: cluster
spec:
  namespace: netobserv
  deploymentModel: Service
  networkPolicy:
    enable: true
  agent:
    type: eBPF
    ebpf:
      sampling: 50
      privileged: false
      features: []
  processor:
    addZone: false
    subnetLabels:
      openShiftAutoDetect: true
      customLabels: []
    consumerReplicas: 3
  loki:
    enable: true
    mode: LokiStack
    lokiStack:
      name: loki
      namespace: netobserv-loki
  consolePlugin:
    enable: true
  exporters: []

其中:

spec.agent.type
必须是 eBPF,因为只有 OpenShift Container Platform 支持的选项。
spec.agent.ebpf.sampling
指定抽样间隔。默认情况下,eBPF 抽样设置为 50,因此数据包被抽样为 50 个几率。较低的抽样间隔值需要更多计算、内存和存储资源。值 01 表示所有数据包都是抽样的。建议您以默认值开始,并将其优化为决定集群的最佳设置。
spec.agent.ebpf.privileged
指定 eBPF 代理 pod 是否应以特权运行。对一些功能(如监控非默认网络和跟踪数据包丢弃)需要以特权方式运行。为安全起见,根据最小特权的原则,只有在需要其中一些功能时才应启用。如果您启用了需要特权模式的功能,则会显示一个警告,而无需明确将其设置为 true。
spec.processor.addZone
用于在网络流中注入云可用性区域。
spec.processor.subnetLabels
根据 CIDR 匹配,指定要在网络流中注入的自定义标签列表。
spec.processor.consumerReplicas
指定处理器 pod 的副本数(flowlogs-pipeline)。有关根据集群大小的建议,请参阅 Resource management and performance considerations 部分。
spec.loki.mode
根据安装模式,指定如何配置到 Loki 的连接。如果您使用"安装 Loki Operator"中描述的安装路径,则必须将模式设置为 LokiStack,并且 spec.loki.lokiStack 应引用安装的 LokiStack 资源名称和命名空间。
spec.loki.lokistack.namespace
指定 LokiStack 资源的命名空间。这个值必须与 LokiStack 自定义资源中定义的 metadata.namespace 匹配。虽然本示例使用 netobserv-loki,但您可以为不同的组件使用不同的命名空间。

6.2. 使用 Kafka 配置 FlowCollector 资源

FlowCollector 资源配置为使用 Kafka 进行高吞吐量和低延迟数据源。

您必须有一个正在运行的 Kafka 实例,并在专用于 OpenShift Container Platform Network Observability 的实例中创建一个 Kafka 主题。如需更多信息,请参阅 AMQ Streams 的 Kafka 文档

先决条件

  • 已安装 Kafka。红帽支持使用 AMQ Streams Operator 的 Kafka。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. 在 Network Observability Operator 的 Provided APIs 标题下,选择 Flow Collector
  3. 选择集群,然后点 YAML 选项卡。
  4. 将 OpenShift Container Platform Network Observability Operator 的 FlowCollector 资源更改为使用 Kafka,如下例所示:

    FlowCollector 资源中的 Kafka 配置示例

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      deploymentModel: Kafka
      kafka:
        address: "kafka-cluster-kafka-bootstrap.netobserv"
        topic: network-flows
        tls:
          enable: false

    其中:

    spec.deploymentModel
    指定部署模型。设置为 Kafka 而不是 Service 来启用 Kafka 部署模型。
    spec.kafka.address
    指定 Kafka bootstrap 服务器地址。如果需要,您可以指定一个端口,如 kafka-cluster-kafka-bootstrap.netobserv:9093,以便在端口 9093 上使用 TLS。
    spec.kafka.topic
    指定 Kafka 中创建的主题名称。它应该与 Kafka 中创建的主题名称匹配。
    spec.kafka.tls
    指定通信加密。使用此设置加密所有与带有 TLS 或 mTLS 的 Kafka 的通信。启用后,Kafka CA 证书必须作为 ConfigMap 或两个命名空间中的 Secret 提供:部署 flowlogs-pipeline 处理器组件的命名空间(默认为 netobserv)以及部署 eBPF 代理的命名空间(默认为 netobserv-privileged)。使用 spec.kafka.tls.caCert 引用证书。使用 mTLS 时,使客户端 secret 在这些命名空间中也可用。您可以使用 Red Hat AMQ Streams User Operator 生成 secret。使用 spec.kafka.tls.userCert 引用 secret。

6.3. 导出增强的网络流数据

配置 FlowCollector 资源,同时将增强的网络流数据导出到 Kafka、IPFIX 或 OpenTelemetry 端点,供 Splunk 或 Prometheus 等工具使用外部使用。

对于 Kafka 或 IPFIX,支持这些输入的任何处理器或存储(如 Splunk、Elasticsearch 或 Fluentd)都可以使用增强的网络流数据。

对于 OpenTelemetry,网络流数据和指标可以导出到兼容的 OpenTelemetry 端点,如红帽构建的 OpenTelemetry 或 Prometheus。

配置后,网络流数据可以发送到可用的输出。如需更多信息,请参阅"网络流格式参考"。

先决条件

  • 您的 Kafka、IPFIX 或 OpenTelemetry 收集器端点可从 Network Observability flowlogs-pipeline pod 中提供。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 编辑 FlowCollector 以配置 spec.exporters,如下所示:

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      exporters:
      - type: Kafka
          kafka:
            address: "kafka-cluster-kafka-bootstrap.netobserv"
            topic: netobserv-flows-export
            tls:
              enable: false
      - type: IPFIX
          ipfix:
            targetHost: "ipfix-collector.ipfix.svc.cluster.local"
            targetPort: 4739
            transport: tcp
     -  type: OpenTelemetry
          openTelemetry:
            targetHost: my-otelcol-collector-headless.otlp.svc
            targetPort: 4317
            type: grpc
            logs:
              enable: true
            metrics:
              enable: true
              prefix: netobserv
              pushTimeInterval: 20s
              expiryTime: 2m
       #    fieldsMapping:
       #      input: SrcAddr
       #      output: source.address

    其中:

    spec.exporters.type
    指定导出类型。您可以单独或同时将流导出到 IPFIX,OpenTelemetry, 和 Kafka
    spec.exporters.kafka.topic
    指定 Network Observability Operator 导出所有流的 Kafka 主题。
    spec.exporters.kafka.tls.enable
    指定是否加密与带有 SSL/TLS 或 mTLS 的 Kafka 的通信。启用后,Kafka CA 证书必须作为 ConfigMap 或部署 flowlogs-pipeline 处理器组件的命名空间中的 Secret 提供(默认为 netobserv)。使用 spec.exporters.tls.caCert 引用证书。对于 mTLS,客户端 secret 还必须在这些命名空间中可用,并使用 spec.exporters.tls.userCert 引用。
    spec.exporters.ipfix.transport
    指定传输协议。默认值为 tcp,但您也可以指定 udp
    spec.exporters.openTelemetry.type
    指定 OpenTelemetry 连接协议。可用的选项包括 httpgrpc
    spec.exporters.openTelemetry.logs
    指定导出日志的 OpenTelemetry 配置,它们与为 Loki 创建的日志相同。
    spec.exporters.openTelemetry.metrics
    指定用于导出指标的 OpenTelemetry 配置,其与为 Prometheus 创建的指标相同。它们在 FlowCollector 资源的 spec.processor.metrics.includeList 参数或通过 FlowMetrics 资源定义。
    spec.exporters.openTelemetry.metrics.pushTimeInterval
    指定将指标发送到 OpenTelemetry 收集器的时间间隔。
    spec.exporters.openTelemetry.fieldsMapping
    指定自定义 OpenTelemetry 格式输出的可选映射。Network Observability 流格式自动重命名为 OpenTelemetry 兼容格式,但此参数允许自定义覆盖。例如,在 YAML 示例中,SrcAddr 是 Network Observability 输入字段,它会在 OpenTelemetry 输出中被重命名为 source.address您可以在 "Network flow format reference" 中看到 Network Observability 和 OpenTelemetry 格式。

6.4. 更新 FlowCollector 资源

除了使用 Web 控制台外,使用 oc patch 命令和 flowcollector 自定义资源来快速更新特定规格,如 eBPF 抽样

流程

  1. 运行以下命令来修补 flowcollector CR 并更新 spec.agent.ebpf.sampling 值:

    $ oc patch flowcollector cluster --type=json -p "[{"op": "replace", "path": "/spec/agent/ebpf/sampling", "value": <new value>}] -n netobserv"

6.5. 在 ingestion 处过滤网络流

创建过滤来减少生成的网络流数量。过滤网络流可减少 Network Observability 组件的资源使用情况。

您可以配置两种类型的过滤器:

  • eBPF 代理过滤器
  • flowlogs-pipeline 过滤器

6.5.1. eBPF 代理过滤器

eBPF 代理过滤可提高性能,因为它们在网络流集合过程的最早阶段生效。

要使用 Network Observability Operator 配置 eBPF 代理过滤器,请参阅 "Filtering eBPF flow data using multiple rules"。

6.5.2. flowlogs-pipeline 过滤器

flowlogs-pipeline 过滤器提供对流量选择的更多控制,因为它们在网络流集合过程中生效。它们主要用于改进数据存储。

flowlogs-pipeline 过滤器使用简单的查询语言来过滤网络流,如下例所示:

(srcnamespace="netobserv" OR (srcnamespace="ingress" AND dstnamespace="netobserv")) AND srckind!="service"

查询语言使用以下语法:

Expand
表 6.1. 查询语言语法
类别Operator

逻辑布尔值运算符(不区分大小写)

and, or

比较运算符

= (equals),

!= (不等于),

=~ (匹配 regexp),

!~ (不匹配 regexp)、

& lt ; / <= (小于或等于)

& gt ; / & gt;=(greater than or equal)

Unary 操作

with (field) (字段存在),

without (field) (缺少字段)

您可以在 FlowCollector 资源的 spec.processor.filters 部分中配置 flowlogs-pipeline 过滤器。例如:

YAML Flowlogs-pipeline 过滤器示例

apiVersion: flows.netobserv.io/v1beta2
kind: FlowCollector
metadata:
  name: cluster
spec:
  namespace: netobserv
  agent:
  processor:
    filters:
      - query: |
          (SrcK8S_Namespace="netobserv" OR (SrcK8S_Namespace="openshift-ingress" AND DstK8S_Namespace="netobserv"))
        outputTarget: Loki
        sampling: 10

其中:

spec.processor.filters.outputTarget
指定匹配流的输出目的地,如 LokiPrometheus 或外部系统。如果省略此参数,系统会将流发送到所有配置的输出。
spec.processor.filters.sampling
指定可选的抽样间隔,以限制存储或导出的匹配流数量。例如,值 10 表示保留流的 10 个机会。

6.6. 配置快速过滤器

使用可用源、目的地和通用过滤器键列表来修改 FlowCollector 资源中的快速过滤。

可以使用双引号对值进行完全匹配。否则,会对文本值进行部分匹配。感叹号(!)字符放置在键的末尾,表示负效果。有关修改 YAML 的更多信息,请参阅示例 FlowCollector 资源。

注意

匹配类型"all"或"any of"的过滤器是用户可从查询选项进行修改的 UI 设置。它不是此资源配置的一部分。

以下是所有可用过滤器键的列表:

Expand
表 6.2. 过滤键
Universal*Source目的地描述

namespace

src_namespace

dst_namespace

过滤与特定命名空间相关的流量。

name

src_name

dst_name

过滤与给定叶资源名称相关的流量,如特定 pod、服务或节点(用于 host-network 流量)。

kind

src_kind

dst_kind

过滤与给定资源类型相关的流量。资源类型包括叶资源 (Pod、Service 或 Node) 或所有者资源(Deployment 和 StatefulSet)。

owner_name

src_owner_name

dst_owner_name

过滤与给定资源所有者相关的流量;即工作负载或一组 pod。例如,它可以是 Deployment 名称、StatefulSet 名称等。

resource

src_resource

dst_resource

过滤与特定资源相关的流量,它们通过其规范名称表示,以唯一标识它。规范表示法是 kind.namespace.name 用于命名空间类型,或 node.name 用于节点。例如,Deployment.my-namespace.my-web-server

address

src_address

dst_address

过滤与 IP 地址相关的流量。支持 IPv4 和 IPv6。还支持 CIDR 范围。

mac

src_mac

dst_mac

过滤与 MAC 地址相关的流量。

port

src_port

dst_port

过滤与特定端口相关的流量。

host_address

src_host_address

dst_host_address

过滤与运行 pod 的主机 IP 地址相关的流量。

protocol

N/A

N/A

过滤与协议相关的流量,如 TCP 或 UDP。

  • 任何源或目的地的通用密钥过滤器。例如,过滤 name: 'my-pod' 表示从 my-pod 和所有流量到 my-pod 的所有流量,无论使用的匹配类型是什么,无论是 匹配所有 还是 匹配任何

6.7. 资源管理和性能注意事项

查看关键配置设置,包括 eBPF 抽样、功能启用和资源限制,以提高性能标准并优化网络可观察性的资源消耗。

Network Observability 所需的资源量取决于集群的大小以及集群要存储可观察数据的要求。要管理集群的资源并设置性能标准,请考虑配置以下设置。配置这些设置可能会满足您的最佳设置和可观察性需求。

以下设置可帮助您管理 outset 中的资源和性能:

eBPF Sampling
您可以设置 Sampling 规格 spec.agent.ebpf.sampling,以管理资源。默认情况下,eBPF 抽样设置为 50,因此流抽样为 50 个几率。较低的抽样间隔值需要更多计算、内存和存储资源。值 01 表示所有流都是抽样的。建议您以默认值开始,并将其优化为决定集群的最佳设置。
eBPF 功能
启用更多功能,CPU 和内存受到影响。如需这些功能的完整列表,请参阅"保留网络流量"。
没有 Loki
您可以减少 Network Observability 所需资源量,而不是使用 Loki,而依赖于 Prometheus。例如,当在没有 Loki 的情况下配置网络可观察性时,内存用量总节省在 20-65% 范围内,CPU 使用率低于 10-30%,具体取决于抽样间隔值。如需更多信息,请参阅 "Network Observability without Loki"。
限制或排除接口
通过为 spec.agent.ebpf.interfacesspec.agent.ebpf.excludeInterfaces 设置值来减少观察到的流量。默认情况下,代理获取系统中的所有接口,但 excludeInterfaceslo (本地接口)中列出的接口除外。请注意,接口名称可能会因使用的 Container Network Interface (CNI) 而异。
性能微调

以下设置可用于在 Network Observability 运行后对性能进行微调:

  • 资源要求和限制:使用 spec.agent.ebpf.resourcesspec.processor.resources 规格将资源要求和限制化到集群中预期的负载和内存用量。800MB 的默认限制可能足以满足大多数中型集群。
  • 缓存最大流超时 :控制使用 eBPF 代理的 spec.agent.ebpf.cacheMaxFlows and spec.agent.ebpf.cacheActiveTimeout 规格的代理报告网络流量的频率。较大的值会导致代理生成较少的流量,与较低 CPU 负载相关联。但是,较大的值会导致内存消耗稍有更高的,并可能会在流集合中生成更多延迟。

6.7.1. 资源注意事项

Network Observability Operator 配置可根据集群工作负载大小进行调整。使用以下基准示例来确定环境的适当资源限值和配置设置。

表中概述的示例演示了为特定工作负载量身定制的场景。每个示例仅作为基准,可以进行调整以适应您的工作负载需求。

用于这些建议的测试是:

  • 额外小:每个 worker 10 个节点集群、4 个 vCPU 和 16 GiB 内存,Loki size 1x.extra-small,在 AWS M6i 实例上测试。
  • Small: 25 个节点集群、每个 worker 16 vCPU 和 64 GiB 内存,Loki size 1x.small,在 AWS M6i 实例上测试。
  • large: 250 个节点集群、每个 worker 16 vCPU 和 64 GiB 内存,Loki size 1x.medium,在 AWS M6i 实例上测试。除了 worker 和控制器节点外,还测试三个基础架构节点(size M6i.12xlarge)和一个工作负载节点(size M6i.8xlarge)。
Expand
表 6.3. 集群大小的资源建议
有条件Extra small (10 个节点)Small (25 个节点)Large (250 节点)

Operator 内存限值: Subscription spec.config.resources

400Mi (默认)

400Mi (默认)

400Mi (默认)

eBPF 代理抽样间隔: FlowCollector spec.agent.ebpf.sampling

50 (默认)

50 (默认)

50 (默认)

eBPF 代理内存限值: FlowCollector spec.agent.ebpf.resources

800Mi (默认)

800Mi (默认)

1600Mi

eBPF 代理缓存大小: FlowCollector spec.agent.ebpf.cacheMaxSize

50,000

120,000 (默认)

120,000 (默认)

处理器内存限制: FlowCollector spec.processor.resources

800Mi (默认)

800Mi (默认)

800Mi (默认)

处理器副本: FlowCollector spec.processor.consumerReplicas

3 (默认)

6

18

部署模型: FlowCollector spec.deploymentModel

服务 (默认)

Kafka

Kafka

Kafka 分区: Kafka 安装

N/A

48

48

Kafka 代理: Kafka 安装

N/A

3 (默认)

3 (默认)

6.7.2. 总内存和 CPU 用量

参阅在不同 eBPF 抽样值下,详细介绍了网络可观察性组件的总平均 CPU 和内存用量(Test 1Test 2)。

下表概述了在两个不同的测试中抽样值为 150 的集群的总资源使用量: Test 1Test 2。这三个测试间的不同:

  • 除了 OpenShift Container Platform 集群中的命名空间、Pod 和服务总数外,Test 1 还考虑高入口流量卷,将负载放置在 eBPF 代理上,并代表给定集群大小有大量工作负载的用例。例如,Test 1 由 76 个命名空间、5153 个 Pod 和 2305 服务组成,网络流量大小为 ~350 MB/s。
  • 除了 OpenShift Container Platform 集群中的命名空间总数、Pod 和服务总数外,Test 2 还考虑高入口流量卷,并代表具有给定集群大小大量工作负载的用例。例如,Test 2 包括 553 命名空间、6998 个 Pod 和 2508 服务,网络流量扩展为 ~950 MB/s。

因为在不同的测试中使用了不同类型的集群,因此在一对一比较时,此表中的数字并不会线性扩展。相反,它们旨在用于评估个人集群使用情况的基准。表中概述的示例演示了为特定工作负载量身定制的场景。每个示例仅作为基准,可以进行调整以适应您的工作负载需求。

注意

导出到 Prometheus 的指标可能会影响资源使用量。指标的 cardinality 值可帮助确定资源受到影响量。如需更多信息,请参阅附加资源部分中的"网络流格式"。

Expand
表 6.4. 总平均资源使用量
抽样值使用的资源Test 1 (25 个节点)Test 2 (250 个节点)

Sampling = 50

总 NetObserv CPU 用量

1.35

5.39

总 NetObserv RSS (内存)用量

16 GB

63 GB

sampling = 1

总 NetObserv CPU 用量

1.82

11.99

总 NetObserv RSS (内存)用量

22 GB

87 GB

Summary:此表显示 Network Observability 的平均资源使用量,其中包括启用了所有功能的 Agents、FLP、Kafka 和 Loki。有关启用功能的详情,请查看"Observing网络流量"中涵盖的功能,其中包括为此测试启用的所有功能。

第 7 章 每个租户模型的网络可观察性

使用 FlowCollectorSlice 资源将网络流量分析管理委派给项目管理员,同时维护全局集群监管。

7.1. 每个租户分层监管和租户 autonomy

集群管理员可以维护全局监管,同时允许项目管理员管理其特定命名空间中的网络流量可观察性。

Network Observability Operator 使用分层配置模型来支持多租户。此架构对大规模部署和托管 control plane 环境很有用,其中单个团队需要自助服务可见性,而无需集群管理员干预。

层次结构模型由以下组件组成:

全局监管
集群管理员管理全局 FlowCollector 资源。此资源定义 observability 基础架构,并决定是否允许每个租户配置。
租户 autonomy
项目管理员管理 FlowCollectorSlice 资源。此命名空间范围的自定义资源(CR)允许团队为其工作负载定义特定的可观察性设置。

7.2. 用于粒度流集合的 FlowCollectorSlice 资源

FlowCollectorSlice 是一个自定义资源定义(CRD),它允许粒度的多租户网络流集合。通过基于命名空间或子网定义逻辑片段,您可以选择性地收集流量,并将自定义抽样应用到特定工作负载而不是整个集群。

它通过启用粒度、选择和多租户感知流集合来补充现有的 FlowCollector 自定义资源,而不是统一应用于所有流量的单一全局配置。

启用基于片段的集合时,只会收集与至少一个 FlowCollectorSlice 匹配的流量,允许管理员精确控制观察到哪些网络流。

7.2.1. FlowCollectorSlice 的好处

默认情况下,网络流集合统一地应用到集群中的所有流量。这可能导致过度的数据卷并具有有限的灵活性。

使用 FlowCollectorSlice 提供以下优点:

  • 为特定命名空间或工作负载启用选择流集合。
  • 支持多租户和基于环境的可观察性。
  • 通过过滤不相关的流量来降低存储和处理成本。
  • 通过 opt-in 配置保留向后兼容性。

7.2.2. FlowCollector 和 FlowCollectorSlice 之间的关系

虽然 FlowCollector 资源为集群定义全局流集合行为,但 FlowCollectorSlice 资源定义了在启用基于分片的过滤时哪个流量有资格收集。

FlowCollector.spec.slicesConfig 字段控制如何应用片段定义。

7.2.3. 集合模式

分片行为由 FlowCollector.spec.slicesConfig.collectionMode 字段管理。将该字段设置为以下集合模式之一:

AlwaysCollect
  • 从所有集群命名空间中收集网络流。
  • 应用 FlowCollectorSlice 资源中定义的子网和抽样配置。
  • 忽略 FlowCollectorSlice 资源中的命名空间选择逻辑。
  • 维护默认的集合行为,以便向后兼容。
AllowList
  • 仅收集与至少一个 FlowCollectorSlice 资源匹配的流量。
  • 可选的命名空间允许列表包括集合中所选命名空间。

7.2.4. FlowCollectorSlice 状态

每个 FlowCollectorSlice 资源都会公开一个报告 的状态 子资源:

  • 验证结果。
  • 协调状态。
  • 片段是否已成功应用。

此状态允许管理员验证片段定义是否活跃并可按预期工作。

FlowCollector 资源中启用 FlowCollectorSlice 功能,集群管理员可以将流收集和数据增强管理委派给特定的命名空间。

在项目管理员可以管理自己的设置前,集群管理员必须启用 FlowCollector 自定义资源来监视 FlowCollectorSlice 自定义资源。

先决条件

  • Network Observability Operator 已安装。
  • 集群中存在 FlowCollector 自定义资源。
  • cluster-admin 权限。

流程

  1. 运行以下命令来编辑 FlowCollector 自定义资源:

    $ oc edit flowcollector cluster
  2. 配置 spec.processor.slicesConfig 字段,以定义允许哪些命名空间使用片段:

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      processor:
        slicesConfig:
          enable: true
          collectionMode: AllowList
          namespacesAllowList:
           - /openshift-.*|netobserv.*/

    其中:

    spec.processor.sliceConfig.enable
    指定是否启用了 FlowCollectorSlice 功能。如果没有,则忽略所有类型 FlowCollectorSlice 的资源。
    spec.processor.sliceConfig.collectionMode
    指定 FlowCollectorSlice 自定义资源如何影响流集合过程。当设置为 AlwaysCollect 时,所有流都会被收集,无论 FlowCollectorSlice 是否存在。当设置为 AllowList 时,仅收集与存在 FlowCollectorSlice 资源或通过全局 namespacesAllowList 配置的命名空间相关的流。
    spec.processor.sliceConfig.namespacesAllowList

    指定始终收集流的命名空间列表,无论这些命名空间中存在 FlowCollectorSlice

    注意

    namespacesAllowList 字段支持正则表达式,如 /openshift- record/ 来捕获多个命名空间,或严格相等(如 netobserv )以匹配特定的命名空间。

  3. 保存更改并退出编辑器。

验证

  • 验证 web 控制台的 Network Traffic 页面中仅显示以 openshift- 开头的 netobserv 命名空间和命名空间的网络流量。

在 Network Observability Operator 中禁用基于 slice 的过滤来恢复全局流集合,同时保留现有的 FlowCollectorSlice 资源。

流程

  1. 运行以下命令来编辑 FlowCollector 资源:

    $ oc edit flowcollector cluster
  2. spec.processor.slicesConfig.collectionMode 字段设置为 AlwaysCollect

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      processor:
        slicesConfig:
          enable: true
          collectionMode: AlwaysCollect
          ...
  3. 保存更改。

    流集合恢复所有流量,现有 FlowCollectorSlice 资源仍可用,以备将来使用。

7.4. 将 FlowCollectorSlice 配置为项目管理员

通过配置 FlowCollectorSlice 自定义资源来分散网络流量分析,项目管理员可以在自己的命名空间中管理流收集和数据。

先决条件

  • Network Observability Operator 已安装。
  • 具有命名空间的 project-admin 权限。

流程

  1. 创建名为 flowCollectorSlice.yaml 的 YAML 文件:

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowCollectorSlice
    metadata:
      name: flowcollectorslice-sample
      namespace: my-app
    spec:
      sampling: 1
      subnetLabels:
        - name: EXT:Database
          cidrs:
            - 192.168.50.0/24
  2. 运行以下命令来应用配置:

    $ oc apply -f flowCollectorSlice.yaml

验证

  1. 在 OpenShift Container Platform 控制台中,导航到 ObserveNetwork Traffic
  2. 使用 EXT:Database 标签观察到 Flow to 192.168.50.0/24 子网。

7.5. FlowCollectorSlice [flows.netobserv.io/v1alpha1]

描述
FlowCollectorSlice 是 API,用于分散每个命名空间租户的一些 FlowCollector 配置。
类型
object
Expand
属性类型描述

apiVersion

string

APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

string

kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

object

标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

spec

object

FlowCollectorSliceSpec 定义所需的 FlowCollectorSlice 状态

7.5.1. .metadata

描述
标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
类型
object

7.5.2. .spec

描述
FlowCollectorSliceSpec 定义所需的 FlowCollectorSlice 状态
类型
object
Expand
属性类型描述

sampling

整数

sampling 是应用于此片段的可选抽样间隔。例如,值 50 表示,50 个中的 1 个匹配流被抽样。

subnetLabels

数组

subnetLabels 允许您自定义子网和 IP 标签,例如识别集群外部工作负载或 Web 服务。外部子网必须使用前缀 EXT: 或根本未标记,才能使用提供的默认快速过滤器和一些指标示例。

请注意,在 FlowCollectorSlice 中配置的子网标签不仅限于相关命名空间的流:整个集群中的任何流都可以使用此配置进行标记。但是,在出现冲突规则时,集群范围的 FlowCollector 中定义的子网标签具有优先权。

7.5.3. .spec.subnetLabels

描述

subnetLabels 允许您自定义子网和 IP 标签,例如识别集群外部工作负载或 Web 服务。外部子网必须使用前缀 EXT: 或根本未标记,才能使用提供的默认快速过滤器和一些指标示例。

请注意,在 FlowCollectorSlice 中配置的子网标签不仅限于相关命名空间的流:整个集群中的任何流都可以使用此配置进行标记。但是,在出现冲突规则时,集群范围的 FlowCollector 中定义的子网标签具有优先权。

类型
数组

7.5.4. .spec.subnetLabels[]

描述
SubnetLabel 允许标记子网和 IP,如标识集群外部工作负载或 Web 服务。
类型
object
必填
  • cidrs
  • name
Expand
属性类型描述

cidrs

数组(字符串)

CIDR 列表,如 ["1.2.3.4/32"]

name

string

标签名称,用于标记匹配流。外部子网必须使用前缀 EXT: 或根本未标记,才能使用提供的默认快速过滤器和一些指标示例。

第 8 章 Network Policy

作为管理员,您可以为 netobserv 命名空间创建一个网络策略。此策略保护 Network Observability Operator 的入站和出站访问。

8.1. 使用 FlowCollector 自定义资源配置网络策略

您可以设置入口和出口网络策略来控制 pod 流量。这提高了安全性,仅收集您需要的网络流数据。这减少了 noise,支持合规性,并提高网络通信的可见性。

您可以配置 FlowCollector 自定义资源(CR)来为网络可观察性部署出口和入口网络策略。默认情况下,spec.NetworkPolicy.enable 规格被设置为 true

如果您在具有网络策略的不同命名空间中安装 Loki、Kafka 或任何导出器,您必须确保网络可观察性组件可以与它们通信。考虑以下有关您的设置的信息:

  • 到 Loki 的连接(由 FlowCollector CR 中的 spec.loki 参数定义)
  • 到 Kafka 的连接(由 FlowCollector CR 的 spec.kafka 参数定义)
  • 到任何导出器的连接(由 FlowCollector CR spec.exporters 参数定义)
  • 如果您使用 Loki 并将其包含在策略目标中,到外部对象存储的连接(在 LokiStack 相关的 secret 中定义的)

流程

  1. 在 Web 控制台中,进入 OperatorsInstalled Operators 页。
  2. Network ObservabilityProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 配置 FlowCollector CR。示例配置示例如下:

    网络策略的 FlowCollector CR 示例

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      networkPolicy:
        enable: true
        additionalNamespaces: ["openshift-console", "openshift-monitoring"]
    # ...

    其中:

    spec.networkPolicy.enable
    指定是否启用网络策略管理。默认值为 true
    spec.networkPolicy.additionalNamespaces
    指定要包含在网络策略中的命名空间。默认值为 ["openshift-console", "openshift-monitoring "]。

第 9 章 网络可观察性 DNS 解析分析

了解 DNS 解析分析如何使用基于 eBPF 的解码来识别服务发现问题,并按照 steps 在 FlowCollector 资源中启用 DNS 跟踪,以使用域名增强网络流记录。

9.1. DNS 解析分析的战略性优势

使用 DNS 解析分析,通过通过域名和状态代码增强 eBPF 流记录来区分网络传输失败和服务发现问题。

标准流日志仅显示端口 53 上发生的流量。DNS 解析分析允许您完成以下任务:

  • 减少 Mean 时间以识别(Mtti):在网络路由故障和 DNS 解析失败之间立即识别(Mtti),如 NXDOMAIN 错误。
  • 测量内部服务延迟:跟踪 CoreDNS 响应特定内部查找所需的时间(如 my-service.namespace.svc.cluster.local)。
  • 审计外部依赖项:您的工作负载与之通信的外部 API 或第三方域的审计,无需 sidecar 或手动数据包捕获。
  • 改进的安全后:通过审核内部工作负载查询的全限定域名(FQDN)来检测潜在的数据声明或命令和控制(C2)活动。

9.1.1. DNS 流增强

当这个功能处于活跃状态时,eBPF 代理会增强流记录。此元数据允许您根据连接(域)的意图而不是仅对源 IP 对流量进行分组和过滤。

增强的 DNS 解码允许 eBPF 代理检查端口 53 上的 UDP 和 TCP DNS 流量,以及 DNS 请求的查询名称。

9.2. 为网络可观察性配置 DNS 域跟踪

在 Network Observability Operator 中启用 DNS 跟踪,以监控集群中网络流的 DNS 查询名称、响应代码和延迟。

先决条件

  • Network Observability Operator 已安装。
  • cluster-admin 权限。
  • 您熟悉 FlowCollector 自定义资源。

流程

  1. 运行以下命令来编辑 FlowCollector 资源:

    $ oc edit flowcollector cluster
  2. 配置 eBPF 代理以启用 DNS 跟踪功能:

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      agent:
        type: eBPF
        ebpf:
          features:
            - DNSTracking

    其中:

    spec.agent.type.ebpf.features
    指定要为 eBPF 代理启用的功能列表。要启用 DNS 跟踪,请在此列表中添加 DNSTracking
  3. 保存并退出编辑器。

验证

  1. 在 OpenShift Container Platform web 控制台中进入到 ObserveNetwork Traffic
  2. Traffic Flows 视图中,点 Manage 列 图标。
  3. 确保已选中 DNS Query NameDNS Response CodeDNS Latency 列。
  4. 通过将端口设置为 53 来过滤结果。
  5. 确认流表列填充了域名和 DNS 元数据。

9.3. DNS 流程增强和分析参考

识别添加到网络流的元数据,利用 DNS 数据进行网络优化,并了解对集群的性能和存储影响。

下表描述了启用 DNS 跟踪时添加到网络流中的元数据字段。

注意

由于压缩指针或缓存限制,查询名称可能会缺失或截断。

Expand
表 9.1. DNS 流元数据
字段描述示例

dns_query_name

正在查询的完全限定域名(FQDN)。

example.com

dns_response_code

DNS 服务器返回的状态代码。

NOERROR,NXDomain

dns_id

用于与响应匹配的查询的事务 ID。

45213

9.3.1. 使用 DNS 数据进行网络优化

将捕获的 DNS 元数据用于以下操作结果:

  • 审计外部依赖项:确保工作负载没有到达未授权的外部 API 或高风险域。
  • 性能调优:监控 DNS 延迟,以识别 CoreDNS pod 是否需要额外的扩展,或者是否出现上游 DNS 供应商。

9.3.2. 识别错误配置错误

NXDOMAIN 响应的频率通常表示应用代码或过时的环境变量中的服务发现错误。

由于对服务和 pod 的 DNS 搜索,Kubernetes 中可能会频繁频繁使用 NXDOMAIN 错误。虽然这些结果不一定表示错误配置或损坏的 URL,但它们可能会对性能造成负面影响。

当返回 NXDOMAIN 错误时,尽管存在明显有效的 Service 或 Pod 主机名(如 my-svc.my-namespace.svc ),但解析器可能会被配置为查询不同的后缀的 DNS。您可以通过向完全限定域名添加尾随点来优化,以告诉解析器名称不清。

例如,使用 https://my-svc.my-namespace.svc.cluster.local 而不是使用 https://my-svc.my-namespace.svc.cluster.local,带有尾随点。https://my-svc.my-namespace.svc

9.3.3. Loki 存储注意事项

DNS 跟踪会增加标签数量和每个流的元数据数量。确保 Loki 存储的大小已调整,以适应增加的日志卷。

第 10 章 观察网络流量

作为管理员,您可以观察 OpenShift Container Platform Web 控制台中的网络流量,以了解故障排除和分析的详细故障排除和分析。此功能帮助您从不同的流量流的图形表示获得见解。

10.1. 从 Overview 视图观察网络流量

Network Traffic Overview 视图提供了聚合流指标,并对应用程序通信进行视觉分析。管理员可以使用指标来监控数据卷,对连接进行故障排除,并检测集群中的异常流量模式。

Overview 视图显示 OpenShift Container Platform 集群中的聚合网络流量,允许您查看哪些应用程序正在通信以及传输的数据卷。它根据源、目的地和流类型提供详细的见解,以及顶级流量流和平均字节率。

作为管理员,您可以对连接问题进行故障排除,检测异常流量模式,并优化应用性能。它提供网络行为的快速概述,方便优先处理操作并确保有效的资源使用量。

10.1.1. 使用 Overview 视图

导航到 OpenShift Container Platform 控制台中的网络流量 Overview 视图,以查看流速率统计的图形表示,并使用可用选项配置显示范围。

前提条件

  • 使用管理员权限访问集群。

流程

  1. 进入到 ObserveNetwork Traffic
  2. Network Traffic 页面中,点 Overview 选项卡。
  3. 单击菜单图标,以配置每个流速率数据的范围。

10.1.2. 为 Overview 视图配置高级选项

通过配置高级选项(如图形范围、标签截断和面板管理)来自定义网络流量 Overview 视图,以优化流速率统计和流量数据的显示。

要访问高级选项,点 Show advanced options。您可以使用 Display options 下拉菜单在图形中配置详情。可用的选项如下:

  • Scope :选择查看网络流量流在其中进行的组件。您可以将范围设置为 Node,Namespace,Owner,Zones,ClusterResourceOwner 是一个资源聚合。Resource 可以是一个 pod、服务、节点(主机网络流量),或未知 IP 地址。默认值为 Namespace
  • Truncate labels:从下拉列表中选择标签所需的宽度。默认值为 M
10.1.2.1. 管理面板和显示

您可以选择显示所需的面板,对它们进行重新排序,并专注于特定的面板。要添加或删除面板,请点 Manage panels

默认情况下会显示以下面板:

  • 顶级 X 平均字节率
  • 顶级 X 字节率堆栈总计

Manage panels 中可以添加其他面板:

  • 顶级 X 平均数据包率
  • 顶级 X 数据包速率堆栈总计

通过 查询选项,您可以选择是否显示 Top 5Top 10Top 15 率。

10.1.3. 数据包丢弃跟踪

使用基于 eBPF 的数据包丢弃跟踪(用于标识丢弃位置、检测主机或特定于 OVS 的丢弃原因)来监控和分析网络数据包丢失,并在 Overview 视图中提供专用图形面板。

您可以在 Overview 视图中使用数据包丢失来配置网络流记录的图形表示。通过使用 eBPF 追踪点 hook,您可以获得对 TCP、UDP、SCTP、ICMPv4 和 ICMPv6 协议的数据包丢弃的宝贵见解,这可能会导致以下操作:

  • 身份识别:指定发生数据包丢弃的确切位置和网络路径。确定特定设备、接口或路由是否更易于丢弃。
  • 根本原因分析:检查 eBPF 程序收集的数据,以了解数据包丢弃的原因。例如,它们是拥塞、缓冲区问题还是特定的网络事件的结果?
  • 性能优化:通过数据包丢弃的清晰了解,您可以采取步骤来优化网络性能,如调整缓冲区大小、重新配置路由路径或实施服务质量(QoS)测量。

启用数据包丢弃跟踪后,您可以在 Overview 中默认看到以下面板:

  • 顶级 X 数据包丢弃状态的堆栈为总计
  • 顶级 X 数据包丢弃会导致堆栈总计
  • 顶级 X 平均丢弃的数据包率
  • 顶级 X 丢弃的数据包速率堆栈为总计

可以在管理面板中添加其他数据包丢弃面板 :

  • 顶级 X 平均丢弃的字节率
  • 顶级 X 丢弃的字节速率堆栈为总计
10.1.3.1. 数据包丢弃的类型

网络可观察性检测到两种数据包丢弃:主机丢弃和 OVS 丢弃。主机丢弃的带有 SKB_DROP 前缀,OVS drops 带有 OVS_DROP 前缀。丢弃流在 流量流 表的侧面面板中显示,以及指向每个丢弃类型的描述的链接。主机丢弃原因示例如下:

  • SKB_DROP_REASON_NO_SOCKET :由于缺少套接字而丢弃数据包。
  • SKB_DROP_REASON_TCP_CSUM :由于 TCP checksum 错误而丢弃的数据包。

OVS 丢弃原因示例如下:

  • OVS_DROP_LAST_ACTION :OVS 数据包因为隐式丢弃操作而丢弃,例如因为配置了网络策略。
  • OVS_DROP_IP_TTL :由于 IP TTL 已过期的 OVS 数据包丢弃。

有关启用和使用数据包丢弃跟踪的更多信息,请参阅本节的附加资源

10.1.4. DNS 跟踪

使用基于 eBPF 的 DNS 跟踪监控 DNS 活动,以深入了解查询模式,检测安全威胁,并通过 Overview 视图中的专用图形面板排除延迟问题。

您可以在 Overview 视图中配置对网络流的域名系统(DNS)跟踪的图形表示。使用带有扩展 Berkeley Packet Filter (eBPF)追踪点 hook 的 DNS 跟踪可以满足各种目的:

  • 网络监控 :深入了解 DNS 查询和响应,帮助网络管理员识别异常模式、潜在瓶颈或性能问题。
  • 安全分析:拒绝 DNS 活动,如恶意软件使用的域名生成算法(DGA),或者识别可能指示安全漏洞的未授权 DNS 解析。
  • 故障排除:通过追踪 DNS 解析步骤、跟踪延迟和识别错误配置来调试与 DNS 相关的问题。

默认情况下,当启用 DNS 跟踪时,您可以在 Overview 中的 donut 或 line chart 中看到以下非空指标:

  • 顶级 X DNS 响应代码
  • 顶级 X 平均 DNS 延迟数
  • 顶部 X 90th percentile DNS 延迟

可以在管理面板中添加其他 DNS 跟踪面板:

  • 底部 X 最小 DNS 延迟
  • 顶级 X 最大 DNS 延迟
  • 顶级 X 99th percentile DNS latencies

IPv4 和 IPv6 UDP 和 TCP 协议支持此功能。

有关启用和使用此视图的更多信息,请参阅本节中的 附加资源

10.1.5. 往返时间 (RTT)

使用 TCP Round-Trip Time (RTT)指标分析网络流延迟,该指标使用 eBPF hookpoints 来识别性能瓶颈,并通过 Overview 视图中专用面板排除 TCP 相关问题。

您可以使用 TCP smoothed Round-Trip Time (sRTT) 来分析网络流延迟。您可以使用在 fentry/tcp_rcv_ established eBPF hookpoint 捕获的 RTT 来读取来自 TCP 套接字的 sRTT 来帮助实现:

  • 网络监控:深入了解 TCP 延迟,帮助网络管理员识别异常模式、潜在瓶颈或性能问题。
  • 故障排除:通过跟踪延迟和识别错误配置来调试与 TCP 相关的问题。

默认情况下,当启用 RTT 时,您可以看到 Overview 中代表的以下 TCP RTT 指标:

  • 总的 Top X 90th percentile TCP Round Trip Time
  • 总的 Top X average TCP Round Trip Time
  • 总的 Bottom X minimum TCP Round Trip Time

可以在管理面板中添加其他 RTT 面板:

  • 总的 Top X maximum TCP Round Trip Time
  • 总的 Top X 99th percentile TCP Round Trip Time

有关启用和使用此视图的更多信息,请参阅本节中的 附加资源

10.1.6. eBPF 流规则过滤

使用 eBPF 流规则过滤来控制数据包捕获卷,以根据端口和 CIDR 表示法指定捕获标准,同时通过专用健康仪表板和 Prometheus 指标监控过滤器性能。

您可以使用基于规则的过滤来控制缓存在 eBPF 流表中的数据包的数量。例如,过滤器可以指定只捕获来自端口 100 的数据包。然后,只捕获与过滤器匹配的数据包,并丢弃剩余的数据包。

您可以应用多个过滤器规则。

10.1.6.1. 入口和出口流量过滤

无类别域间路由(CIDR)表示法通过将基本 IP 地址与前缀长度相结合来有效地表示 IP 地址范围。对于入口和出口流量,首先使用源 IP 地址来匹配使用 CIDR 表示法配置的过滤规则。如果存在匹配项,则过滤将继续。如果没有匹配项,则使用目标 IP 匹配使用 CIDR 表示法配置的过滤规则。

在匹配源 IP 或目标 IP CIDR 后,您可以使用 peerIP 找出特定的端点以区分数据包的目标 IP 地址。根据置备的操作,流数据会在 eBPF 流表中缓存,或者不缓存。

10.1.6.2. 仪表板和指标集成

启用这个选项后,eBPF 代理统计Netobserv/Health 仪表板会提供一个过滤的流速率视图。另外,在 ObserveMetrics 中,您可以查询 netobserv_agent_filtered_flows_total 来观察 FlowFilterAcceptCounter,FlowFilterNoMatchCounterFlowFilterRecjectCounter 的原因。

10.1.6.3. 流过滤配置参数

FlowCollector 资源中配置流过滤器规则(包括 CIDR 范围、过滤操作、协议和特定端口配置)引用所需的和可选参数。

Expand
表 10.1. 所需的配置参数
参数描述

enable

enable 设置为 true 以启用 eBPF 流过滤功能。

cidr

为流过滤规则提供 IP 地址和 CIDR 掩码。支持 IPv4 和 IPv6 地址格式。如果要与任何 IP 匹配,可以使用 0.0.0.0/0(用于 IPv4),或 ::/0(用于 IPv6)。

action

描述为流过滤规则执行的操作。可能的值为 AcceptReject

  • 对于 Accept 操作匹配规则,流数据在 eBPF 表中缓存,并使用全局指标 FlowFilterAcceptCounter 更新。
  • 如果匹配规则的操作是 Reject,流数据将被丢弃,且不会在 eBPF 表中缓存。流数据使用全局指标 FlowFilterRejectCounter 更新。
  • 如果规则不匹配,流会在 eBPF 表中缓存,并使用全局指标 FlowFilterNoMatchCounter 更新。
Expand
表 10.2. 可选的配置参数
参数描述

direction

定义流过滤规则的方向。可能的值为 IngressEgress

protocol

定义流过滤规则的协议。可能的值有 TCPUDPSCTPICMPICMPv6

tcpFlags

定义用于过滤流的 TCP 标志。可能的值包括 SYN, SYN-ACK, ACK, FIN, RST, PSH, URG, ECE, CWR, FIN-ACK, 和 RST-ACK

ports

定义用于过滤流的端口。它可用于源或目标端口。要过滤一个单一端口,使用一个整数值。例如 ports: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如 ports: "80-100"

sourcePorts

定义用于过滤流的源端口。要过滤一个单一端口,使用一个整数值。例如 sourcePorts: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如 sourcePorts: "80-100"

destPorts

DestPorts 定义用于过滤流的目标端口。要过滤一个单一端口,使用一个整数值。例如 destPorts: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如 destPorts: "80-100"

icmpType

定义用于过滤流的 ICMP 类型。

icmpCode

定义用于过滤流的 ICMP 代码。

peerIP

定义用于过滤流的 IP 地址,例如:10.10.10.10

10.2. 从流量流视图观察网络流量

使用 流量流视图 监控集群组件之间的实时和历史网络通信。通过分析由 eBPF 收集的粒度流数据,您可以审核网络流量,验证网络策略,以及导出外部报告和分析的数据。

Network Observability Operator 中的 流量流视图 在 OpenShift Container Platform 集群中提供网络活动的粒度、表格形式。通过利用 eBPF 技术收集流数据,此视图允许管理员监控 pod、服务和节点之间的实时和历史通信。这种可见性对于审核网络流量、验证网络策略以及识别集群基础架构中意外通信模式至关重要。

流量流 界面中,您可以通过与单独行交互来分析特定的连接详情,以检索详细的流信息。视图通过 Display options 菜单支持高级自定义,您可以在其中调整行密度并管理列。通过选择和重新排序特定列,您可以定制表来突出显示环境的最相关的数据点,如源和目标端点或流量卷。

为了支持外部分析和报告,流量流视图 包括数据导出功能。您可以导出整个数据集,或选择特定的字段来生成网络活动的目标报告。此功能可确保可以长期审计或第三方监控工具访问网络流数据,从而提供灵活的方法来记录和分析 OpenShift Container Platform 环境网络健康状况。

10.2.1. 使用流量流视图

使用流量流表来查看和分析详细的 网络流 信息。

作为管理员,您可以进入 流量流 表来查看网络流信息。

前提条件

  • 有管理员访问权限。

流程

  1. 进入到 ObserveNetwork Traffic
  2. Network Traffic 页面中,点 流量流 选项卡。
  3. 点每行来获取对应的流信息。

10.2.2. 流量流显示设置

流量流 视图包含用于自定义显示密度、数据列和数据导出选项的设置。

10.2.2.1. 显示选项

流量流视图 中有以下元素:

显示高级选项
指定用于自定义和导出当前视图的菜单。
显示选项 下拉菜单
指定 data 表的行大小。默认值为 Normal
管理列
指定用于选择和重新排序 流量流 表中显示的列的对话框。

10.2.3. 导出流量流数据

将来自 流量流视图 的网络流数据导出到 CSV 文件,以进行外部分析或报告。

流程

  1. Export data
  2. 在窗口中,选中 Export all data 复选框以导出所有数据,然后清除复选框以选择要导出的必填字段。
  3. 单击 Export

10.2.4. 使用 FlowCollector 自定义资源配置 IPsec

FlowCollector 资源中启用 IPsec 跟踪来监控加密流量,在流量流视图中添加 IPsec status 列并生成专用加密仪表板。

在 OpenShift Container Platform 中,默认禁用 IPsec。您可以按照"配置 IPsec 加密"中的说明启用 IPsec。

前提条件

  • 您已在 OpenShift Container Platform 上启用 IPsec 加密。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 为 IPsec 配置 FlowCollector 自定义资源:

    IPsec 的 FlowCollector 配置示例

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      agent:
        type: eBPF
        ebpf:
          features:
          - "IPSec"

验证

启用 IPsec 时:

  • Network Observability Traffic flows 视图中会显示一个名为 IPsec Status 的新列,以显示流是否已成功 IPsec 加密,或者在加密/解密过程中出现错误。
  • 显示生成加密流量百分比的新仪表板。

10.2.5. 使用对话跟踪

配置 FlowCollector 自定义资源,以启用对话跟踪在 web 控制台中对相关网络流进行分组和分析。

作为管理员,您可以对属于同一对话的网络流进行分组。对话被定义为一组由 IP 地址、端口和协议标识的对等点,从而产生唯一的 Conversation Id。您可以在 web 控制台中查询对话事件。这些事件在 web 控制台中表示,如下所示:

  • Conversation start :连接启动或 TCP 标记被截获时发生此事件
  • Conversation tick:此事件在连接处于活跃状态时根据 FlowCollector spec.processor.conversationHeartbeatInterval 参数中定义的每个指定间隔发生。
  • Conversation end :当达到 FlowCollector spec.processor.conversationEndTimeout 参数或 TCP 标志被截获时,会发生此事件。
  • Flow :这是在指定间隔内的网络流量流。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 配置 FlowCollector 自定义资源,以便根据您的观察需求设置 spec.processor.logTypes, conversationEndTimeout, 和 conversationHeartbeatInterval 参数。示例配置示例如下:

    配置 FlowCollector 以对话跟踪

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
     processor:
      logTypes: Flows
      advanced:
       conversationEndTimeout: 10s
       conversationHeartbeatInterval: 30s

    其中:

    spec.processor.logTypes
    指定要导出的事件类型。当设置为 Flows 时,只会导出 Flow 事件。当设置为 All 时,对话和流事件都会在 Network Traffic 页面中导出并可见。要只专注于对话事件,请指定 Conversations 以导出 Conversation start、ConConversation tickConversation end 事件。要仅导出 Conversation end 事件,请指定 EndedConversationsAll 对于存储的请求最高,EndedConversations 对于存储的要求最低。
    spec.processor.advanced.conversationEndTimeout
    指定在达到超时或 TCP 标志后触发 Conversation end 事件的时间。
    spec.processor.advanced.conversationHeartbeatInterval

    指定在网络连接活跃时 Conversation tick 事件的时间间隔。

    注意

    如果您更新了 logType 选项,则之前选择中的流不会从控制台插件中清除。例如,如果您最初将 logType 设置为 Conversations,持续到 10 AM,然后移到 EndedConversations,控制台插件会显示 10 AM 之前的所有对话事件,且仅在 10 AM 后终止对话。

  5. 刷新 Traffic flows 标签页中的 Network Traffic。通知请注意,有两个新列: Event/TypeConversation Id。当 Flow 是所选查询选项时,所有 Event/Type 字段都是 Flow
  6. 选择 Query Options 并选择 Log Type,Conversation。现在,Event/Type 会显示所有所需的对话事件。
  7. 接下来,您可以过滤侧面板中的 Conversation 和 Flow 日志类型选项的特定 对话 ID 或切换。

10.2.6. 使用数据包丢弃

通过将 FlowCollector 资源配置为监控和视觉化 web 控制台中的网络数据丢失,在 Network Observability Operator 中启用数据包丢弃。

当网络流数据的一个或多个数据包无法访问其目的地时,会发生数据包丢失。您可以通过将 FlowCollector 编辑到以下 YAML 示例中的规格来跟踪这些丢弃。

重要

启用此功能时,CPU 和内存用量会增加。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 集群,然后选择 YAML 选项卡。
  4. 为数据包丢弃配置 FlowCollector 自定义资源,例如:

    FlowCollector 配置示例

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      agent:
        type: eBPF
        ebpf:
          features:
           - PacketDrop
          privileged: true

    其中:

    spec.agent.ebpf.features
    指定要启用的功能。include PacketDrop 为每个网络流开始报告数据包丢弃。
    spec.agent.ebpf.privileged
    指定是否启用了特权模式。对于数据包丢弃跟踪,必须设置为 true

验证

  • 刷新 Network Traffic 页面时,OverviewTraffic FlowTopology 视图会显示有关数据包丢弃的新信息:

    1. Manage 面板中选择新选择,以选择要在 Overview 中显示的数据包丢弃的图形视觉化。
    2. Manage 列中选择新选择,以选择要在流量流表中显示哪些数据包丢弃信息。

      1. 流量流视图 中,您还可以展开侧面板来查看有关数据包丢弃的更多信息。主机丢弃的带有 SKB_DROP 前缀,OVS drops 带有 OVS_DROP 前缀。
    3. Topology 视图中,会显示红色的行,其中出现 drops。

10.2.7. 使用 DNS 跟踪

配置 FlowCollector 自定义资源,以启用 DNS 跟踪来监控 web 控制台中的网络性能、安全分析和 DNS 故障排除。

您可以通过将 FlowCollector 编辑到以下 YAML 示例中的规格来跟踪 DNS。

重要

启用这个功能时,在 eBPF 代理中观察到 CPU 和内存用量。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. Network ObservabilityProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 配置 FlowCollector 自定义资源。示例配置示例如下:

    为 DNS 跟踪配置 FlowCollector

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      agent:
        type: eBPF
        ebpf:
          features:
           - DNSTracking
          sampling: 1

    • 您可以设置 spec.agent.ebpf.features 参数列表,以便在 web 控制台中启用每个网络流的 DNS 跟踪。
    • 您可以将 sampling 设置为 1,以获得更准确的指标并捕获 DNS 延迟。如果 sampling 的值大于 1,您可以使用 DNS Response CodeDNS Id 观察流,且不太可能观察 DNS 延迟
  5. 刷新 Network Traffic 页面时,您可以选择在 OverviewTraffic Flow 视图和可以应用的新过滤器中查看新的 DNS 表示。

    1. Manage 面板中选择新的 DNS 选项,在 Overview 中显示图形视觉化和 DNS 指标。
    2. Manage 列中选择新选择,将 DNS 列添加到 流量流视图 中。
    3. 过滤特定 DNS 指标,如 DNS IdDNS Error DNS LatencyDNS Response Code,并在侧面面板中查看更多信息。默认情况下会显示 DNS LatencyDNS Response Code 列。

      注意

      TCP 握手数据包没有 DNS 标头。在 DNS LatencyID响应代码 值 "n/a" 的流量流中会显示没有 DNS 标头的 TCP 协议流。您可以过滤掉流数据,以只查看使用通用过滤器 "DNSError" 等于 "0" 的 DNS 标头的流。

10.2.8. 使用 RTT 追踪

通过配置 FlowCollector 自定义资源,使用 Web 控制台监控和分析网络延迟,以启用 Round Trip Time (RTT)追踪。

您可以通过将 FlowCollector 编辑到以下 YAML 示例中的规格来跟踪 RTT。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题中,选择 Flow Collector
  3. 选择 集群,然后选择 YAML 选项卡。
  4. 为 RTT 追踪配置 FlowCollector 自定义资源,例如:

    FlowCollector 配置示例

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      agent:
        type: eBPF
        ebpf:
          features:
           - FlowRTT

    其中:

    spec.agent.ebpf.features
    指定要启用的 eBPF 功能列表。向此列表添加 FlowRTT,以开始追踪往返时间(RTT)网络流。

验证

Network Traffic 页面刷新后,概述流量流Topology 视图会显示 RTT 信息。

  1. Overview 视图中,点 Manage panels 以选择要显示的 RTT 图形视觉化。
  2. 流量流 表中,验证 Flow RTT 列是否默认可见。若要管理列,可点 Manage 列
  3. Traffic flow 视图中,展开侧面板来查看 RTT 元数据:

    1. 通过在过滤器搜索栏中输入 protocol= TCP 来过滤 TCP 协议的流数据。
    2. 验证所有 TCP 过滤的流 都大于 0。
    3. 通过在过滤器搜索栏中输入 time_flow_rtt>=10000000 来过滤一个大于 10,000,000 纳秒(10 ms)的 FlowRTT 值。
    4. 删除过滤器。
  4. Topology 视图中,点 Display 选项 下拉菜单。在 Edge labels 列表中,选择 RTT

10.2.9. 使用直方图

histogram 提供了网络流日志的视觉化,可用于分析流量卷趋势,并根据特定时间间隔过滤流数据。

您可以点 Show histogram 来显示工具栏视图,以使用栏图的形式可视化流历史记录。histogram 显示一段时间内的日志数量。您可以选择直方图的一部分在下面的工具栏中过滤网络流数据。

10.2.10. 使用可用区

配置 FlowCollector 自定义资源来收集可用区数据,启用 web 控制台中的不同集群区间的网络流量的视觉化和分析。

您可以配置 FlowCollector 以收集有关集群可用区的信息。这可让您使用应用到节点的 topology.kubernetes.io/zone 标签值增强网络流数据。

流程

  1. 在 Web 控制台中,进入 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 配置 FlowCollector 自定义资源,使 spec.processor.addZone 参数设置为 true。示例配置示例如下:

    为可用区集合配置 FlowCollector

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
    # ...
     processor:
       addZone: true
    # ...

验证

刷新 Network Traffic 页面时,OverviewTraffic FlowTopology 视图会显示有关可用区的新信息:

  1. Overview 选项卡中,您可以将 Zones 视为可用 Scope
  2. Network TrafficTraffic flows 中,Zone 可以在 SrcK8S_Zone 和 DstK8S_Zone 字段下查看。
  3. Topology 视图中,您可以将 Zones 设置为 ScopeGroup

10.2.11. 使用多个规则过滤 eBPF 流数据

根据 IP 地址和数据包条件,在 FlowCollector 自定义资源中配置多个过滤规则,以通过接受或拒绝特定的 eBPF 流来优化网络流量数据收集。

重要
  • 您不能在过滤规则中使用重复的 CIDR。
  • 当 IP 地址与多个过滤器规则匹配时,具有最具体 CIDR 前缀(前缀最长)的规则具有优先权。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. Network ObservabilityProvided APIs 标题下,选择 Flow Collector
  3. 选择 集群,然后选择 YAML 选项卡。
  4. 配置 FlowCollector 自定义资源。

10.2.12. eBPF 流数据过滤示例

使用这些 FlowCollector 自定义资源示例,使用多个规则过滤 eBPF 流,以控制在 eBPF 流表中缓存的数据包流。

默认情况下,所有其他流都会被拒绝。

apiVersion: flows.netobserv.io/v1beta2
kind: FlowCollector
metadata:
  name: cluster
spec:
  namespace: netobserv
  deploymentModel: Service
  agent:
    type: eBPF
    ebpf:
      flowFilter:
        enable: true
        rules:
         - action: Accept
           cidr: 0.0.0.0/0
           sampling: 1
         - action: Accept
           cidr: 10.128.0.0/14
           peerCIDR: 10.128.0.0/14
         - action: Accept
           cidr: 172.30.0.0/16
           peerCIDR: 10.128.0.0/14
           sampling: 50

其中:

spec.agent.ebpf.flowFilter.enable
指定是否启用 eBPF 流过滤。设置为 true 以启用流过滤。
spec.agent.ebpf.flowFilter.rules.action
指定流过滤器规则的操作。有效值为 AcceptReject
spec.agent.ebpf.flowFilter.rules.cidr
指定流过滤器规则的 IP 地址和 CIDR 掩码。这个参数支持 IPv4IPv6 地址格式。使用 0.0.0.0/0 作为 IPv4::/0 用于 IPv6 以匹配任何 IP 地址。
spec.agent.ebpf.flowFilter.rules.peerCIDR
指定用于过滤流的 Peer IP CIDR
spec.agent.ebpf.flowFilter.rules.sampling
指定匹配流的抽样间隔。这个值会覆盖 spec.agent.ebpf.sampling 中定义的全局抽样设置。
10.2.12.2. 使用数据包丢弃过滤流的 YAML 示例

默认情况下,所有其他流都会被拒绝。

apiVersion: flows.netobserv.io/v1beta2
kind: FlowCollector
metadata:
  name: cluster
spec:
  namespace: netobserv
  deploymentModel: Service
  agent:
    type: eBPF
    ebpf:
      privileged: true
      features:
        - PacketDrop
      flowFilter:
        enable: true
        rules:
        - action: Accept
          cidr: 172.30.0.0/16
          pktDrops: true

其中:

spec.agent.ebpf.privileged
指定是否启用特权模式,这是报告数据包丢弃所需的。
spec.agent.ebpf.features
指定要启用的 eBPF 功能列表。将 PacketDrop 值添加到此列表报告每个网络流的数据包丢弃。
spec.agent.ebpf.flowFilter.enable
指定是否启用 eBPF 流过滤。
spec.agent.ebpf.flowFilter.rules.action
指定流过滤器规则的操作。有效值为 AcceptReject
spec.agent.ebpf.flowFilter.rules.pktDrops
指定是否过滤包含数据包丢弃的流。

10.2.13. 端点转换(xlat)

端点转换(xlat)使用 eBPF 来增强网络流日志,它们带有转换的 pod 级别元数据,从而可以了解特定后端 pod 服务于服务或负载均衡器后面的流量。

您可以使用 Network Observability 和扩展的 Berkeley Packet Filter (eBPF)了解集成视图中的端点服务流量。通常,当流量流通过服务、egressIP 或负载均衡器时,流量流信息会被抽象到其中一个可用 pod。如果您尝试获取有关流量的信息,则只能查看服务相关信息,如服务 IP 和端口,而不获取有关服务请求的特定 pod 的信息。通常,服务流量和虚拟服务端点的信息都捕获为两个独立的流,这导致故障排除变得复杂。

要解决这个问题,端点 xlat 可通过以下方式帮助:

  • 捕获内核级别的网络流,这会影响性能。
  • 使用转换的端点信息增强网络流,仅显示服务,以及特定的后端 pod,以便您可以查看提供请求的 pod。

在处理网络数据包时,eBPF hook 会增强流日志,其中包含有关转换端点的元数据,其中包括您可以在一行中的 Network Traffic 页中查看以下信息:

10.2.14. 使用端点转换(xlat)

FlowCollector 资源中启用端点转换(xlat),以使用转换数据包信息增强网络流。您可以使用这些信息来识别通过专用 xlat 列提供服务流量的特定 pod 和对象。

您可以使用 Network Observability 和 eBPF 来增强来自带有转换端点信息的 Kubernetes 服务网络流,了解端点服务流量。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题中,选择 Flow Collector
  3. 选择 集群,然后选择 YAML 选项卡。
  4. PacketTranslation 配置 FlowCollector 自定义资源,例如:

    FlowCollector 配置示例

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      agent:
        type: eBPF
        ebpf:
          features:
           - PacketTranslation

    • 您可以通过列出 spec.agent.ebpf.features 规格列表中的 PacketTranslation 参数来启动带有转换数据包信息的增强网络流。
  5. 刷新 Network Traffic 页面来过滤有关转换数据包的信息:

    1. 根据 Destination kind: Service 过滤网络流数据。
    2. 您可以查看 xlat 列,它区分显示转换的信息的位置,以及以下默认列:

      • Xlat Zone ID
      • Xlat Src Kubernetes 对象
      • Xlat Dst Kubernetes 对象
    3. 您可以在 Manage 列中管理其他 xlat 列。

10.3. 从 Topology 视图中观察网络流量

Network Traffic 页面中的 Topology 视图提供了 OpenShift Container Platform 集群中的网络流和流量卷的图形化表示。作为管理员,您可以使用此视图来监控应用程序流量数据,并视觉化各种网络组件之间的关系。

视觉化表示网络实体,因为节点和流量流为边缘。通过选择图形中的各个组件,您可以访问包含该资源特定指标和健康详情的侧面板。通过这种互动方法,可以快速识别集群中的流量模式和连接问题。

要管理复杂的环境,Topology 视图包含高级配置选项,供您自定义布局和数据密度。您可以调整视图 的范围,应用 组来代表 资源所有权,然后选择不同的 布局 算法来优化图形显示。另外,您可以启用 Edge 标签 在流行中直接显示实时测量,如平均字节率。

为了报告或外部分析,Topology 视图提供了一个导出功能。您可以将当前的图形表示下载为 PNG 镜像,或者生成指向特定视图配置的直接链接,以与其他管理员共享。这些工具可确保网络访问和轻松记录网络见解。

10.3.1. 使用 Topology 视图

访问 Topology 视图以可视化检查集群网络关系并选择单独的组件来查看详细的流量指标和元数据。

作为管理员,您可以进入到 Topology 视图来查看组件的详情和指标。

先决条件

  • 有管理员访问权限。

流程

  1. 进入到 ObserveNetwork Traffic
  2. Network Traffic 页面中,点 Topology 选项卡。
  3. Topology 选项卡中的每个组件查看其详情和指标。

10.3.2. 为 Topology 视图配置高级选项

查看 Topology 视图中可用的高级选项,以自定义显示设置、配置组件分组和布局,并将网络图导出为镜像。

您可以使用 Show advanced options 自定义和导出视图。高级选项视图具有以下功能:

  • Find in view: 要在视图中搜索所需组件。
  • Display options :要配置以下选项:

    • Edge labels :将指定的测量显示为边缘标签。默认值为显示 Average rate(以 Bytes 为单位)。
    • Scope :选择网络流量流之间的组件范围。默认值为 Namespace
    • :通过对组件进行分组来充分了解所有权。默认值为 None
    • Layout:要选择图形表示的布局。默认值为 ColaNoForce
    • 显示 :要选择需要显示的详细信息。默认检查所有选项。可以选项为:Edges, Edges label, 和 Badges
    • Truncate labels:从下拉列表中选择标签所需的宽度。默认值为 M
    • 折叠组 :要展开或折叠组。默认会扩展组。如果 Groups 的值为 None,这个选项会被禁用。
10.3.2.1. 导出拓扑视图

要导出视图,点 Export topology view。该视图以 PNG 格式下载。

10.4. 过滤网络流量

查看 Network Traffic 视图中可用的查询选项并过滤参数,以优化数据搜索、分析特定日志类型,并管理方向的流量可见性。

默认情况下,Network Traffic 页面根据 FlowCollector 实例中配置的默认过滤器显示集群中的流量流数据。您可以通过更改 preset 过滤器,使用过滤器选项观察所需的数据。

另外,您也可以访问 Namespaces, Services, Routes, Nodes, and Workloads 页中的 Network Traffic 标签页,它们提供了相关部分的聚合过滤数据。

查询选项

您可以使用 Query Options 来优化搜索结果,如下所示:

  • 日志类型 :可用选项 ConversationFlows 提供了按日志类型查询流的能力,如流日志、新对话、完成对话和心跳,这是长期对话的定期记录。对话是同一对等点之间的流聚合。
  • Match filters:您可以确定高级过滤器中选择的不同过滤器参数之间的关系。可用的选项包括 Match allMatch anyMatch all 提供与所有值都匹配的结果,而 Match any 则提供与输入的任何值匹配的结果。默认值为 Match all
  • DataSource :您可以选择用于查询的数据源: LokiPrometheusAuto。当使用 Prometheus 而不是 Loki 用作数据源 时,性能会有显著的提高,但 Prometheus 支持的过滤和聚合的功能有限。默认数据源是 Auto。如果查询支持,使用 Prometheus,如果查询不支持 Prometheus,则使用 Loki。
  • 丢弃过滤器 :您可以使用以下查询选项查看不同的丢弃数据包级别:

    • 完全丢弃 显示带有完全丢弃的数据包的流记录。
    • 包含丢弃 显示包含丢弃但可以发送的流记录。
    • 没有丢弃 显示包含已发送数据包的记录。
    • All 显示上述所有记录。
  • Limit:内部后端查询的数据限制。根据匹配和过滤器设置,流量流数据的数量显示在指定的限制中。
快速过滤器
Quick 过滤器 下拉菜单中的默认值在 FlowCollector 配置中定义。您可从控制台修改选项。
高级过滤器
您可以通过从下拉列表中选择要过滤的参数来设置高级过滤器、CommonSourceDestination。流数据根据选择进行过滤。要启用或禁用应用的过滤器,您可以点过滤器选项下面列出的应用过滤器。

您可以在 arrow up long solid 单向 arrow up long solidarrow down long solid 后端过滤间切换arrow up long solid 验证方法 过滤器只根据您的过滤器选择显示 SourceDestination 流量。您可以使用 Swap 来更改 SourceDestination 流量的方向视图。 arrow up long solid arrow down long solid Back and forth 过滤器包括带有 SourceDestination 过滤器的返回流量。网络流量的方向流在流量流表中的 Direction 列中显示为 Ingress`or `Egress(对于不同节点间的流量)和 'Inner'(对于单一节点内的流量)。

您可以点 Reset default 删除现有过滤器,并应用 FlowCollector 配置中定义的过滤器。

注意

要了解指定文本值的规则,请点了解更多

第 11 章 网络可观察性健康规则

Network Observability Operator 使用内置指标和 OpenShift Container Platform 监控堆栈提供警报,以报告集群网络健康状况。

重要

网络可观察性健康警报需要 OpenShift Container Platform 4.16 或更高版本。

11.1. 用于健康和性能的网络可观察性规则

网络可观察性包括用于管理基于 Prometheus 的规则的系统。使用这些规则来监控 OpenShift Container Platform 应用程序和基础架构的健康状态和性能。

Network Observability Operator 将这些规则转换为 PrometheusRule 资源。Network Observability Operator 支持以下规则类型:

  • 警报规则:指定 Prometheus AlertManager 管理的规则,以提供网络异常或基础架构失败的通知。
  • 记录规则 :指定预计算复杂 Prometheus Query Language (PromQL)表达式到新的时间序列中,以提高仪表板性能和视觉化。

运行以下命令,查看 netobserv 命名空间中的 PrometheusRule 资源:

$ oc get prometheusrules -n netobserv -o yaml

11.1.1. 网络健康监控和警报规则

Network Observability Operator 包括一个基于规则的系统,用于检测网络异常和基础架构失败。通过将配置转换为警报规则,Operator 通过 OpenShift Container Platform Web 控制台启用自动监控和故障排除。

11.1.1.1. 监控结果

Network Observability Operator 在以下区中提供网络状态:

警报 UI
特定的警报会出现在 ObserveAlerting 中,其中通知通过 Prometheus AlertManager 管理。
网络健康 仪表板
ObserveNetwork Health 中的特殊仪表板提供集群网络状态的高级概述。

Network Health 仪表板将违反信息分类到标签页中,以隔离问题的范围:

  • 全局 :汇总整个集群的健康状况。
  • 节点 :特定于基础架构节点的冲突。
  • 命名空间 :特定于单个命名空间的冲突。
  • 工作负载 :特定于资源的冲突,如 DeploymentDaemonSet
11.1.1.2. 预定义的健康规则

Network Observability Operator 为常见网络场景提供默认规则。只有在 FlowCollector 自定义资源(CR)中启用了对应的功能时,这些规则才会激活。

以下列表包含可用默认规则的子集:

PacketDropsByDevice
高百分比的数据包丢弃来自网络设备的触发器。它基于标准 node-exporter 指标,不需要 PacketDrop 代理功能。
PacketDropsByKernel
内核丢弃的高百分比的触发器。需要 PacketDrop 代理功能。
IPsecErrors
当检测到 IPsec 加密错误时触发。需要 IPSec 代理功能。
NetpolDenied
当检测到网络策略的流量时触发。需要 NetworkEvents 代理功能。
LatencyHighTrend
当检测到 TCP 延迟时触发。需要 FlowRTT 代理功能。
DNSErrors
当检测到 DNS 错误时触发。需要 DNSTracking 代理功能。

Network Observability Operator 的操作警报:

NetObservNoFlows
当管道处于活跃状态但没有观察到流时触发。
NetObservLokiError
当因为 Loki 错误而丢弃流时触发器。

有关规则和 runbooks 的完整列表,请参阅 Network Observability Operator runbooks

11.1.1.3. 规则依赖项和功能要求

Network Observability Operator 根据 FlowCollector 自定义资源(CR)中启用的功能创建规则。

例如,只有在启用了 PacketDrop 代理功能时,才会创建与数据包丢弃相关的规则。规则基于指标构建 ; 如果缺少所需的指标,则可能会出现配置警告。在 FlowCollector 资源的 spec.processor.metrics.includeList 对象中配置指标。

11.2. 使用记录规则进行性能优化

对于大型集群,记录规则优化了 Prometheus 处理网络数据的方式。记录规则提高了仪表板响应速度,并减少复杂查询的计算开销。

11.2.1. 优化优势

记录预先计算的复杂 Prometheus Query Language (PromQL)表达式,并将结果保存为新的时间序列。与警报规则不同,记录规则不会监控阈值。

使用记录规则提供以下优点:

提高的性能
预计算 Prometheus 查询可通过避免对长期趋势进行按需计算,让仪表板更快地加载。
资源效率
与每次仪表板刷新时重新计算数据相比,以固定间隔计算数据会减少 Prometheus 服务器上的 CPU 负载。
简化查询
使用简短指标名称,如 cluster:network_traffic:rate_5m,简化了自定义仪表板中的复杂聚合计算。

11.2.2. 规则模式的比较

下表根据预期的结果比较规则模式:

Expand
描述警报规则记录规则

目标

签发通知。

保存高级别指标的历史记录。

数据结果

生成警报状态。

创建持久指标。

可见性

警报 UI 和网络健康状态 视图。

Metrics ExplorerNetwork Health 视图。

通知

触发 AlertManager 通知。

不触发通知。

11.3. 网络可观察性健康规则结构和自定义

Network Observability Operator 中的健康规则使用 FlowCollector 自定义资源(CR)的 spec.processor.metrics.healthRules 对象中的规则模板和变体定义。您可以自定义默认模板和变体,以实现灵活的细粒度警报。

对于每个模板,您可以定义一个变体列表,每个变体都有自己的阈值和分组配置。如需更多信息,请参阅"默认警报模板列表"。

以下示例显示了一个警报:

apiVersion: flows.netobserv.io/v1beta1
kind: FlowCollector
metadata:
  name: flow-collector
spec:
  processor:
    metrics:
      healthRules:
      - template: PacketDropsByKernel
        mode: Alert # or Recording
        variants:
        # triggered when the whole cluster traffic (no grouping) reaches 10% of drops
        - thresholds:
            critical: "10"
        # triggered when per-node traffic reaches 5% of drops, with gradual severity
        - thresholds:
            critical: "15"
            warning: "10"
            info: "5"
          groupBy: Node

其中:

spec.processor.metrics.healthRules.template
指定预定义的规则模板的名称。
spec.processor.metrics.healthRules.mode
指定规则是否作为 AlertRecording 规则。此设置可以按变体或整个模板定义。
spec.processor.metrics.healthRules.variants.thresholds
指定触发该规则的数字值。您可以在一个变体中定义多个严重性级别,如 关键warninginfo
集群范围的变体
指定在没有 groupBy 设置的情况下定义的变体。在提供的示例中,当集群流量总数达到 10% 时,这个变体会触发。
spec.processor.metrics.healthRules.variants.groupBy
指定用于聚合指标的维度。在提供的示例中,警报会独立评估每个 *Node8。
注意

自定义规则可替换该模板的默认配置。如果要保留默认配置,您必须手动复制它们。

11.3.1. PromQL 表达式和健康规则的元数据

了解 Prometheus Query Language (PromQL)的基本查询以及如何自定义它,以便您可以为特定需求配置网络可观察性警报。

网络 observability FlowCollector 自定义资源(CR)中的健康规则 API 映射到 Prometheus Operator API,生成 PrometheusRule。您可以运行以下命令来在默认 netobserv 命名空间中看到 PrometheusRule

$ oc get prometheusrules -n netobserv -oyaml
11.3.1.1. 在传入的流量中查询警报的示例

本例为传入的流量中的警报提供了基础 PromQL 查询模式:

sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace)

此查询计算过去 30 分钟内从 openshift-ingress 命名空间到任何工作负载的命名空间的字节率。

您可以自定义查询,包括只保留一些费率、运行查询特定时间段以及设置最终阈值。

过滤 noise

在这个查询中附加 > 1000 只会保留观察到大于 1 KB/s 的速率,从而消除了来自低带宽消费者的命名率。

(sum (rate (netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace)> 1000)

字节率相对于 FlowCollector 自定义资源(CR)配置中定义的抽样间隔。如果抽样间隔为 1:100,则实际流量可能比报告的指标大约为 100 倍。

时间比较

您可以使用 偏移 修饰符对特定时间段运行相同的查询。例如,以前对一天的查询可以使用 偏移 1d 运行,并且对 5 小时的查询可以使用 偏移 5h 运行。

sum (rate (netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d))

您可以使用公式 100 * (<query now> - <query from the previous day>)/ <query from the previous day > 来计算与上天相比增加的百分比。如果今天的字节率小于上天,则该值可以是负数。

最终阈值
您可以应用最终阈值来过滤小于所需百分比的增加。例如,> 100 消除了小于 100% 的增加。

PrometheusRule 的完整表达式一起使用,如下所示:

...
      expr: |-
        (100 *
          (
            (sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace) > 1000)
            - sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace)
          )
          / sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace))
        > 100
11.3.1.2. 警报元数据字段

Network Observability Operator 使用其他 OpenShift Container Platform 功能(如监控堆栈)的组件,以增强网络流量的可见性。如需更多信息,请参阅"监控堆栈架构"。

必须为规则定义配置一些元数据。Prometheus 和 Alertmanager 服务从监控堆栈或 Network Health 仪表板使用此元数据。

以下示例显示了带有配置元数据的 AlertingRule 资源:

apiVersion: monitoring.openshift.io/v1
kind: AlertingRule
metadata:
  name: netobserv-alerts
  namespace: openshift-monitoring
spec:
  groups:
  - name: NetObservAlerts
    rules:
    - alert: NetObservIncomingBandwidth
      annotations:
        netobserv_io_network_health: '{"namespaceLabels":["DstK8S_Namespace"],"threshold":"100","unit":"%","upperBound":"500"}'
        message: |-
          NetObserv is detecting a surge of incoming traffic: current traffic to {{ $labels.DstK8S_Namespace }} has increased by more than 100% since yesterday.
        summary: "Surge in incoming traffic"
      expr: |-
        (100 *
          (
            (sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace) > 1000)
            - sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace)
          )
          / sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace))
        > 100
      for: 1m
      labels:
        app: netobserv
        netobserv: "true"
        severity: warning

其中:

spec.groups.rules.alert.labels.netobserv
指定 Network Health 仪表板在设置为 true 时检测的警报。
spec.groups.rules.alert.labels.severity
指定警报的严重性。以下值有效: 关键warninginfo

您可以在 消息 注解中使用定义的 PromQL 表达式的输出标签。在示例中,由于结果按 DstK8S_Namespace 分组,因此消息文本中使用表达式 {{ $labels.DstK8S_Namespace }}

netobserv_io_network_health 注解是可选的,用于控制在 Network Health 页面中如何呈现警报。

netobserv_io_network_health 注解是一个由以下字段组成的 JSON 字符串:

Expand
表 11.1. netobserv_io_network_health 注解的字段
字段类型描述

namespaceLabels

字符串列表

保留命名空间的一个或多个标签。提供后,警报会出现在 Namespaces 选项卡中。

nodeLabels

字符串列表

保存节点名称的一个或多个标签。提供后,警报会出现在 Nodes 选项卡中。

workloadLabels

字符串列表

保留所有者/工作负载名称的一个或多个标签。与 kindLabels 一起提供时,警报将显示在"Owners"选项卡下。

kindLabels

字符串列表

保留所有者/工作负载类型的一个或多个标签。与 workloadLabels 一起提供时,警报将显示在"所有者"选项卡下。

阈值

字符串

警报阈值,预期与 PromQL 表达式中定义的阈值匹配。

unit

字符串

数据单元,仅用于显示目的。

upperBound

字符串

用于计算封闭规模分数的上限值。超过这个绑定的指标值会被强制使用。

links

对象列表

与警报相关的上下文显示的链接列表。每个链接都需要一个 名称 (显示名称)和 url

trafficLink

字符串

Network Traffic 页面链接相关的信息,用于 URL 构建。有些过滤器会自动设置,如节点 或命名空间 过滤器。

namespaceLabelsnodeLabels 是互斥的。如果没有提供,警报会出现在 Global 选项卡下。

Expand
表 11.2. trafficLink 字段
字段描述

extraFilter

要注入的额外过滤器(例如,与 DNS 相关的警报的 DNS 响应代码)。

backAndForth

过滤器是否应包含返回流量(truefalse)。

filterDestination

过滤器是否应以流量目的地而不是源(truefalse)为目标。

11.3.2. 自定义健康规则配置

使用 Prometheus Query Language (PromQL)定义自定义 AlertingRule 资源,以根据特定的网络指标(如流量监控)触发警报。

先决条件

  • 熟悉 PromQL.
  • 已安装 OpenShift Container Platform 4.16 或更高版本。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 Network Observability Operator。

流程

  1. 创建名为 custom-alert.yaml 的 YAML 文件,其中包含您的 AlertingRule 资源。
  2. 运行以下命令来应用自定义警报规则:

    $ oc apply -f custom-alert.yaml

验证

  1. 运行以下命令,验证 PrometheusRule 资源是否在 netobserv 命名空间中创建:

    $ oc get prometheusrules -n netobserv -oyaml

    输出应包含您刚才创建的 netobserv-alerts 规则,确认是否已正确生成资源。

  2. 通过检查 OpenShift Container Platform Web 控制台 → Observe 中的 Network Health 仪表板来确认规则处于活跃状态。

11.4. 禁用预定义的规则

规则模板可以在 FlowCollector 自定义资源(CR)的 spec.processor.metrics.disableAlerts 字段中禁用。此设置接受规则模板名称列表。有关警报模板名称列表,请参阅 "List of default rules"。

如果模板被禁用并覆盖在 spec.processor.metrics.healthRules 字段中,则 disable 设置具有优先权,且不会创建警报规则。

第 12 章 使用带有仪表板和警报的指标

Network Observability Operator 使用 flowlogs-pipeline 组件从流日志生成指标。使用这些指标设置自定义警报并查看用于网络活动分析的仪表板。

12.1. 查看 Network Observability 指标仪表板

使用 OpenShift Container Platform 控制台中的 Overview 选项卡查看网络可观察性指标仪表板,以监控整体流量流和系统健康状况,以及根据节点、命名空间、所有者、Pod 和服务过滤指标的选项。

流程

  1. 在 Web 控制台 ObserveDashboards 中,选择 Netobserv 仪表板。
  2. 查看以下类别中的网络流量指标,每个指标都有每个节点、命名空间、源和目标的子集:

    • 字节率
    • 数据包丢弃
    • DNS
    • RTT
  3. 选择 Netobserv/Health 仪表板。
  4. 查看以下类别中 Operator 健康的指标,每个类别都有每个节点、命名空间、源和目的地的子集:

    • 流开销
    • 流率
    • 代理
    • 处理器
    • Operator

      基础架构应用程序指标显示在命名空间和工作负载的 split-view 中。

12.2. 网络 Observability 指标

查看网络可观察性指标的完整列表,它们以 netobserv_ 前缀,您可以在 FlowCollector 资源中配置该指标,并用来监控流量并创建 Prometheus 警报。

flowlogs-pipeline 生成的指标可在 FlowCollector 自定义资源的 spec.processor.metrics.includeList 中进行配置,以添加或删除指标。

您还可以使用 Prometheus 规则中的 includeList 指标创建警报,如"创建警报"所示。

在 Prometheus 中查找这些指标时,如通过 ObserveMetrics 或定义警报时,所有指标名称都有 netobserv_ 前缀。例如 netobserv_namespace_flows_total。可用的指标名称如下:

includeList 指标名称

默认情况下启用带有星号 * 的名称。

  • namespace_egress_bytes_total
  • namespace_egress_packets_total
  • namespace_ingress_bytes_total
  • namespace_ingress_packets_total
  • namespace_flows_total *
  • node_egress_bytes_total
  • node_egress_packets_total
  • node_ingress_bytes_total *
  • node_ingress_packets_total
  • node_flows_total
  • workload_egress_bytes_total
  • workload_egress_packets_total
  • workload_ingress_bytes_total *
  • workload_ingress_packets_total
  • workload_flows_total
PacketDrop 指标名称

当在 spec.agent.ebpf.features (具有 privileged 模式)中启用 PacketDrop 功能时,可以使用以下额外的指标:

  • namespace_drop_bytes_total
  • namespace_drop_packets_total *
  • node_drop_bytes_total
  • node_drop_packets_total
  • workload_drop_bytes_total
  • workload_drop_packets_total
DNS 指标名称

当在 spec.agent.ebpf.features 中启用了 DNSTracking 功能时,可以使用以下额外的指标:

  • namespace_dns_latency_seconds *
  • node_dns_latency_seconds
  • workload_dns_latency_seconds
FlowRTT 指标名称

当在 spec.agent.ebpf.features 中启用 FlowRTT 功能时,可以使用以下额外指标:

  • namespace_rtt_seconds *
  • node_rtt_seconds
  • workload_rtt_seconds

12.3. 创建警报

根据 Netobserv 仪表板指标创建自定义 AlertingRule 资源,以定义在 OpenShift Container Platform 控制台中触发警报的条件。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群,或者具有所有项目的查看权限。
  • 已安装 Network Observability Operator。

流程

  1. 点导入图标 + 创建 YAML 文件。
  2. 向 YAML 文件添加警报规则配置。在以下 YAML 示例中,当集群入口流量达到每个目标工作负载的指定阈值 10 MBps 时,会为警报创建一个警报。

    apiVersion: monitoring.openshift.io/v1
    kind: AlertingRule
    metadata:
      name: netobserv-alerts
      namespace: openshift-monitoring
    spec:
      groups:
      - name: NetObservAlerts
        rules:
        - alert: NetObservIncomingBandwidth
          annotations:
            message: |-
              {{ $labels.job }}: incoming traffic exceeding 10 MBps for 30s on {{ $labels.DstK8S_OwnerType }} {{ $labels.DstK8S_OwnerName }} ({{ $labels.DstK8S_Namespace }}).
            summary: "High incoming traffic."
          expr: sum(rate(netobserv_workload_ingress_bytes_total     {SrcK8S_Namespace="openshift-ingress"}[1m])) by (job, DstK8S_Namespace, DstK8S_OwnerName, DstK8S_OwnerType) > 10000000
          for: 30s
          labels:
            severity: warning
    • spec.processor.metrics.includeList 中默认启用 netobserv_workload_ingress_bytes_total 指标。
  3. Create 将配置文件应用到集群。

12.4. 自定义指标

使用 FlowMetric API 定义来自 flowlog 数据的自定义指标,使用日志字段作为 Prometheus 标签来自定义仪表板信息并监控特定集群数据。

在收集的每个流日志数据中,每个日志都标记了多个字段,如源名称和目标名称。这些字段可以用作 Prometheus 标签,以便在仪表板上自定义集群信息。

12.5. 使用 FlowMetric API 配置自定义指标

配置 FlowMetric API,通过将流日志字段映射为标签来创建自定义 Prometheus 指标,以满足特定的监控需求。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题中,选择 FlowMetric
  3. Project: 下拉列表中,选择 Network Observability Operator 实例的项目。
  4. Create FlowMetric
  5. 配置 FlowMetric 资源。请参阅"自定义指标配置示例"。

验证

  1. pod 刷新后,进入 ObserveMetrics
  2. Expression 字段中,键入指标名称来查看对应的结果。您也可以输入一个表达式,如 topk(5, sum(rate(netobserv_cluster_external_ingress_bytes_total{DstK8S_Namespace="my-namespace"}[2m])) by (DstK8S_HostName, DstK8S_OwnerName, DstK8S_OwnerType))

12.5.1. 自定义指标配置示例

要监控默认指标未涵盖的特定网络行为,如外部流量卷或延迟激增,请使用 FlowMetric 自定义资源(CR)。这些示例提供了从网络流生成目标 Prometheus 指标所需的配置。

12.5.1.1. 跟踪集群外部源的 ingress 字节

要测量从外部网络进入集群的数据卷,请使用以下 FlowMetric 配置。此指标有助于识别潜在的带宽问题或意外的外部数据传输成本。

apiVersion: flows.netobserv.io/v1alpha1
kind: FlowMetric
metadata:
  name: flowmetric-cluster-external-ingress-traffic
  namespace: netobserv
spec:
  metricName: cluster_external_ingress_bytes_total
  type: Counter
  valueField: Bytes
  direction: Ingress
  labels: [DstK8S_HostName,DstK8S_Namespace,DstK8S_OwnerName,DstK8S_OwnerType]
  filters:
  - field: SrcSubnetLabel
    matchType: Absence

其中:

metadata.namespace
指定创建 FlowMetric 资源的命名空间。这必须与 FlowCollector 资源 spec.namespace 字段中定义的命名空间匹配,默认为 netobserv
spec.metricName
指定 Prometheus 指标的名称,显示在 OpenShift Container Platform web 控制台中,带有前缀 netobserv-<metricName& gt;。
spec.type
指定指标类型。Counter 类型可用于计算字节数或数据包。
spec.direction
指定要捕获的流量方向。如果没有指定,入口和出口数据都会捕获,这可能会导致重复计数。
spec.labels
指定定义指标具有什么标签、不同实体和指标卡之间的关系。例如,SrcK8S_Name 是一个高基数指标。
spec.filters
根据列出的条件指定优化结果的条件。在本例中,通过仅匹配没有 SrcSubnetLabel 的流来实现只选择集群外部流量的目的。这假设启用了子网标签功能(通过 spec.processor.subnetLabels),这默认完成
12.5.1.2. 监控集群外部入口流量的 RTT 延迟

要分析外部连接的性能并识别高延迟路径,请使用以下 FlowMetric 配置。此指标将纳秒转换为秒,以便与标准 Prometheus 延迟仪表板保持一致。

apiVersion: flows.netobserv.io/v1alpha1
kind: FlowMetric
metadata:
  name: flowmetric-cluster-external-ingress-rtt
  namespace: netobserv
spec:
  metricName: cluster_external_ingress_rtt_seconds
  type: Histogram
  valueField: TimeFlowRttNs
  direction: Ingress
  labels: [DstK8S_HostName,DstK8S_Namespace,DstK8S_OwnerName,DstK8S_OwnerType]
  filters:
  - field: SrcSubnetLabel
    matchType: Absence
  - field: TimeFlowRttNs
    matchType: Presence
  divider: "1000000000"
  buckets: [".001", ".005", ".01", ".02", ".03", ".04", ".05", ".075", ".1", ".25", "1"]

其中:

metadata.namespace
指定创建 FlowMetric 资源的命名空间。这必须与 FlowCollector 资源 spec.namespace 字段中定义的命名空间匹配,默认为 netobserv
spec.type
指定指标类型。Histogram 类型可用于延迟值,如 TimeFlowRttNs
spec.divider
指定用于划分指标的值。由于 Round-trip 时间(RTT)在流中以纳秒为单位提供,因此使用 1,000,000,000 划分的值将值转换为秒,这是 Prometheus 指南中的标准。
spec.buckets
为 RTT 精度指定自定义存储桶。5ms 和 250ms 之间的最佳精度范围。

12.6. 使用 FlowMetric API 配置自定义 chart

通过定义 FlowMetric 自定义资源的 charts 部分,为 OpenShift Container Platform web 控制台仪表板生成自定义 chart。

您可以在 Dashboard 菜单中以管理员身份查看自定义 chart。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题中,选择 FlowMetric
  3. Project: 下拉列表中,选择 Network Observability Operator 实例的项目。
  4. Create FlowMetric
  5. 配置 FlowMetric 资源。请参阅"Flowmetric chart 配置示例"。

验证

  1. pod 刷新后,进入到 ObserveDashboards
  2. 搜索 NetObserv / Main 仪表板。查看 NetObserv / Main 仪表板下的两个面板,或您创建的仪表板名称(可选):

    • 一个静态的文本形式的统计数据,显示所有维度中的全局外部入口率总和
    • 一个时间序列图,为每个目标工作负载显示相同指标

有关查询语言的更多信息,请参阅 Prometheus 文档

12.6.1. Flowmetric chart 配置示例

这些 FlowMetric 自定义资源示例演示了如何在 OpenShift Container Platform Web 控制台中定义 chart 来跟踪外部入口流量和往返时间(RTT)延迟。

12.6.1.1. 集群外部源的 Ingress 字节图

使用以下配置来跟踪集群外部来源的入口流量的速度。这些图表帮助识别每个工作负载的带宽使用量。

apiVersion: flows.netobserv.io/v1alpha1
kind: FlowMetric
metadata:
  name: flowmetric-cluster-external-ingress-traffic
  namespace: netobserv
# ...
  charts:
  - dashboardName: Main
    title: External ingress traffic
    unit: Bps
    type: SingleStat
    queries:
    - promQL: "sum(rate($METRIC[2m]))"
      legend: ""
  - dashboardName: Main
    sectionName: External
    title: Top external ingress traffic per workload
    unit: Bps
    type: StackArea
    queries:
    - promQL: "sum(rate($METRIC{DstK8S_Namespace!=\"\"}[2m])) by (DstK8S_Namespace, DstK8S_OwnerName)"
      legend: "{{DstK8S_Namespace}} / {{DstK8S_OwnerName}}"
# ...

其中:

metadata.namespace
指定创建 FlowMetric 资源的命名空间。这必须与 FlowCollector spec.namespace 中定义的命名空间匹配,默认为 netobserv
spec.charts.dashboardName
指定仪表板的名称。使用不同的 dashboardName 创建一个前缀为 Netobserv 的新仪表板。例如,Netobserv / <dashboard_name>.
12.6.1.2. 集群外部入口流量的 RTT 延迟图

使用以下配置来监控集群外部入口流量的往返时间(RTT)。这些示例使用 histogram_quantile 功能来显示 50th 和 99th percentiles (p50 和 p99)。

apiVersion: flows.netobserv.io/v1alpha1
kind: FlowMetric
metadata:
  name: flowmetric-cluster-external-ingress-traffic
  namespace: netobserv
# ...
  charts:
  - dashboardName: Main
    title: External ingress TCP latency
    unit: seconds
    type: SingleStat
    queries:
    - promQL: "histogram_quantile(0.99, sum(rate($METRIC_bucket[2m])) by (le)) > 0"
      legend: "p99"
  - dashboardName: Main
    sectionName: External
    title: "Top external ingress sRTT per workload, p50 (ms)"
    unit: seconds
    type: Line
    queries:
    - promQL: "histogram_quantile(0.5, sum(rate($METRIC_bucket{DstK8S_Namespace!=\"\"}[2m])) by (le,DstK8S_Namespace,DstK8S_OwnerName))*1000 > 0"
      legend: "{{DstK8S_Namespace}} / {{DstK8S_OwnerName}}"
  - dashboardName: Main
    sectionName: External
    title: "Top external ingress sRTT per workload, p99 (ms)"
    unit: seconds
    type: Line
    queries:
    - promQL: "histogram_quantile(0.99, sum(rate($METRIC_bucket{DstK8S_Namespace!=\"\"}[2m])) by (le,DstK8S_Namespace,DstK8S_OwnerName))*1000 > 0"
      legend: "{{DstK8S_Namespace}} / {{DstK8S_OwnerName}}"
# ...

其中:

metadata.namespace
指定创建 FlowMetric 资源的命名空间。这必须与 FlowCollector spec.namespace 中定义的命名空间匹配,默认为 netobserv
spec.charts.dashboardName
指定仪表板的名称。使用不同的 dashboardName 创建一个前缀为 Netobserv 的新仪表板。例如,Netobserv / <dashboard_name>.
12.6.1.3. 计算直方图平均值

您可以通过将指标 $METRIC_sum 除以$METRIC_count 来显示平均直方图。它们在创建直方图时自动生成。在上例中,要执行此操作的 Prometheus 查询如下:

promQL: "(sum(rate($METRIC_sum{DstK8S_Namespace!=\"\"}[2m])) by (DstK8S_Namespace,DstK8S_OwnerName) / sum(rate($METRIC_count{DstK8S_Namespace!=\"\"}[2m])) by (DstK8S_Namespace,DstK8S_OwnerName))*1000"

12.7. 使用 FlowMetric API 和 TCP 标志检测 SYN 填充

部署自定义 AlertingRuleFlowMetric 配置来监控 TCP 标志,为 SYN 大量对集群进行攻击启用实时检测和警报。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题中,选择 FlowMetric
  3. Project 下拉列表中,选择 Network Observability Operator 实例的项目。
  4. Create FlowMetric
  5. 创建 FlowMetric 资源以添加以下配置:

    配置每个目标主机和资源的计数,使用 TCP 标志

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowMetric
    metadata:
      name: flows-with-flags-per-destination
    spec:
      metricName: flows_with_flags_per_destination_total
      type: Counter
      labels: [SrcSubnetLabel,DstSubnetLabel,DstK8S_Name,DstK8S_Type,DstK8S_HostName,DstK8S_Namespace,Flags]

    使用每个源主机和资源的计数,使用 TCP 标志

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowMetric
    metadata:
      name: flows-with-flags-per-source
    spec:
      metricName: flows_with_flags_per_source_total
      type: Counter
      labels: [DstSubnetLabel,SrcSubnetLabel,SrcK8S_Name,SrcK8S_Type,SrcK8S_HostName,SrcK8S_Namespace,Flags]

  6. 部署以下 AlertingRule 资源以警告出现 SYN 洪水的情况:

    用于 SYN 洪水的 AlertingRule

    apiVersion: monitoring.openshift.io/v1
    kind: AlertingRule
    metadata:
      name: netobserv-syn-alerts
      namespace: openshift-monitoring
    # ...
      spec:
      groups:
      - name: NetObservSYNAlerts
        rules:
        - alert: NetObserv-SYNFlood-in
          annotations:
            message: |-
              {{ $labels.job }}: incoming SYN-flood attack suspected to Host={{ $labels.DstK8S_HostName}}, Namespace={{ $labels.DstK8S_Namespace }}, Resource={{ $labels.DstK8S_Name }}. This is characterized by a high volume of SYN-only flows with different source IPs and/or ports.
            summary: "Incoming SYN-flood"
          expr: sum(rate(netobserv_flows_with_flags_per_destination_total{Flags="2"}[1m])) by (job, DstK8S_HostName, DstK8S_Namespace, DstK8S_Name) > 300
          for: 15s
          labels:
            severity: warning
            app: netobserv
        - alert: NetObserv-SYNFlood-out
          annotations:
            message: |-
              {{ $labels.job }}: outgoing SYN-flood attack suspected from Host={{ $labels.SrcK8S_HostName}}, Namespace={{ $labels.SrcK8S_Namespace }}, Resource={{ $labels.SrcK8S_Name }}. This is characterized by a high volume of SYN-only flows with different source IPs and/or ports.
            summary: "Outgoing SYN-flood"
          expr: sum(rate(netobserv_flows_with_flags_per_source_total{Flags="2"}[1m])) by (job, SrcK8S_HostName, SrcK8S_Namespace, SrcK8S_Name) > 300
          for: 15s
          labels:
            severity: warning
            app: netobserv
    # ...

    在本例中,警报的阈值是 300 ;但是,您可以调整这个值。阈值太低可能会产生误报,如果太高,则可能无法诊断到实际的攻击。

验证

  1. 在 Web 控制台中,点 Network Traffic 表视图中的 Manage Columns,然后点 TCP 标志
  2. Network Traffic 表视图中,根据 TCP 协议 SYN TCPFlag 。有大量具有相同 byteSize 的流代表出现了 SYN 洪水。
  3. 进入 ObserveAlerting 并选择 Alerting Rules 选项卡。
  4. 根据 netobserv-synflood-in alert 过滤。当发生 SYN 洪水时,该警报应被触发。

第 13 章 监控 Network Observability Operator

使用 OpenShift Container Platform Web 控制台监控与 Network Observability Operator 健康相关的警报。这有助于您维护系统稳定性,并快速检测操作问题。

13.1. 健康仪表板

查看 OpenShift Container Platform Web 控制台中的 Network Observability Operator 健康仪表板,以监控 Operator 及其组件的健康状况、资源使用量和内部统计信息。

指标位于 OpenShift Container Platform Web 控制台的 ObserveDashboards 页中。您可以在以下类别中查看有关 Network Observability Operator 健康状况的指标:

  • Flows per second
  • Sampling
  • Errors last minute
  • Dropped flows per second
  • Flowlogs-pipeline statistics
  • Flowlogs-pipleine statistics views
  • eBPF agent statistics views
  • Operator statistics
  • 资源使用量

13.2. 健康警报

了解 Network Observability Operator 生成的健康警报,它会在 Loki ingestion 错误、零流生成或丢弃 eBPF 流等条件时触发横幅。

当触发警报时,您定向到仪表板的健康警报横幅可能会出现在 Network TrafficHome 页面中。在以下情况下生成警报:

  • 如果 flowlogs-pipeline 工作负载因为 Loki 错误而丢弃流,如已经达到 Loki ingestion 速率限制,则 NetObservLokiError 警报发生。
  • 如果在一个时间段内没有流,则会发出 NetObservNoFlows 警报。
  • 如果 Network Observability eBPF 代理的 hashmap 表已满,并且 eBPF 代理处理性能下降或触发了容量限制器时,则会发出 NetObservFlowsDropped 警报。

13.3. 查看健康信息

查看 OpenShift Container Platform Web 控制台中的 Netobserv/Health 仪表板,以监控 Network Observability Operator 及其组件的健康状态和资源使用情况。

先决条件

  • 已安装 Network Observability Operator。
  • 您可以使用具有 cluster-admin 角色或所有项目的查看权限的用户访问集群。

流程

  1. 从 web 控制台中的 Administrator 视角,进入到 ObserveDashboards
  2. Dashboards 下拉菜单中选择 Netobserv/Health
  3. 查看页面中显示的 Operator 健康状况的指标。

13.3.1. 禁用健康警报

通过编辑 FlowCollector 资源并使用 spec.processor.metrics.disableAlerts 规格来禁用特定的健康警报,如 NetObservLokiErrorNetObservNoFlows

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 添加 spec.processor.metrics.disableAlerts 来禁用健康警报,如下例所示:

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      processor:
        metrics:
          disableAlerts: [NetObservLokiError, NetObservNoFlows]

    其中:

    spec.processor.metrics.disableAlerts
    指定要禁用的一个或多个警报类型。

13.4. 为 NetObserv 仪表板创建 Loki 速率限制警报

根据 Loki 指标创建自定义 AlertingRule 资源,以便在达到 Loki ingestion 速率限制时监控并触发警报,由 HTTP 429 错误表示。

您可以为 Netobserv 仪表板指标创建自定义警报规则,以便在达到 Loki 速率限制时触发警报。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群,或者具有所有项目的查看权限。
  • 已安装 Network Observability Operator。

流程

  1. 点导入图标 + 创建 YAML 文件。
  2. 向 YAML 文件添加警报规则配置。在以下 YAML 示例中,当达到 Loki 速率限制时,会创建一个警报:

    apiVersion: monitoring.openshift.io/v1
    kind: AlertingRule
    metadata:
      name: loki-alerts
      namespace: openshift-monitoring
    spec:
      groups:
      - name: LokiRateLimitAlerts
        rules:
        - alert: LokiTenantRateLimit
          annotations:
            message: |-
              {{ $labels.job }} {{ $labels.route }} is experiencing 429 errors.
            summary: "At any number of requests are responded with the rate limit error code."
          expr: sum(irate(loki_request_duration_seconds_count{status_code="429"}[1m])) by (job, namespace, route) / sum(irate(loki_request_duration_seconds_count[1m])) by (job, namespace, route) * 100 > 0
          for: 10s
          labels:
            severity: warning
  3. Create 将配置文件应用到集群。

13.5. 使用 eBPF 代理警报

通过增加 FlowCollector 自定义资源中的 spec.agent.ebpf.cacheMaxFlows 值解决了 NetObservAgentFlowsDropped 报警,该警报在 eBPF 代理 hashmap 已满时发生。

在触发容量限制器时,也会触发警报 NetObservAgentFlowsDropped。如果您看到此警报,请考虑增加 FlowCollector 中的 cacheMaxFlows,如下例所示。

注意

增加 cacheMaxFlows 可能会增加 eBPF 代理的内存用量。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. Network Observability OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 集群,然后选择 YAML 选项卡。
  4. 增加 spec.agent.ebpf.cacheMaxFlows 值,如以下 YAML 示例所示:

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      deploymentModel: Service
      agent:
        type: eBPF
        ebpf:
          cacheMaxFlows: 200000

    其中:

    spec.agent.ebpf.cacheMaxFlows
    指定到缓存的最大流数。如果发生 NetObservAgentFlowsDropped 警报,请从其当前级别增加这个值。

第 14 章 调度资源

污点和容限可帮助您控制哪些节点托管某些 pod。使用这些工具以及节点选择器来指导网络可观察性组件的放置。

节点选择器指定一个键/值对映射,该映射使用 pod 中指定的自定义标签和选择器定义。

要使 pod 有资格在节点上运行,pod 必须具有与节点上标签相同的键值节点选择器。

14.1. 特定节点中的网络 Observability 部署

使用调度规格配置 FlowCollector 资源,包括 NodeSelectorTolerationsAffinity,以控制特定节点上网络可观察性组件的部署。

spec.agent.ebpf.advanced.scheduling,spec.processor.advanced.scheduling, 和 spec.consolePlugin.advanced.scheduling 规格有以下可进行配置的设置:

  • NodeSelector
  • 容限(Tolerations)
  • 关联性
  • PriorityClassName

spec.<component>.advanced.schedulingFlowCollector 资源示例

apiVersion: flows.netobserv.io/v1beta2
kind: FlowCollector
metadata:
  name: cluster
spec:
# ...
advanced:
  scheduling:
    tolerations:
    - key: "<taint key>"
      operator: "Equal"
      value: "<taint value>"
      effect: "<taint effect>"
      nodeSelector:
        <key>: <value>
      affinity:
        nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: name
              operator: In
              values:
              - app-worker-node
      priorityClassName: """
# ...

第 15 章 二级网络

您可以配置 Network Observability Operator,从二级网络(如 SR-IOVOVN-Kubernetes )收集和增强的网络流数据。

15.1. 先决条件

  • 使用额外的网络接口访问 OpenShift Container Platform 集群,如二级接口或 L2 网络。

15.2. 为 SR-IOV 接口流量配置监控

通过将 spec.agent.ebpf.privileged 字段设置为 true,将 FlowCollector 资源配置为监控单根 I/O 虚拟化(SR-IOV)设备上的流量,从而使 eBPF 代理能够监控其他网络命名空间。

然后,eBPF 代理除主机网络命名空间外监控其他网络命名空间,这些命名空间会被默认监控。当创建具有虚拟功能(VF)接口的 pod 时,会创建一个新的网络命名空间。指定 SRIOVNetwork 策略 IPAM 配置后,VF 接口从主机网络命名空间迁移到 pod 网络命名空间。

先决条件

  • 使用 SR-IOV 设备访问 OpenShift Container Platform 集群。
  • SRIOVNetwork 自定义资源(CR) spec.ipam 配置必须使用接口列表或其他插件范围内的 IP 地址设置。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  3. 选择 cluster,然后选择 YAML 选项卡。
  4. 配置 FlowCollector 自定义资源。示例配置示例如下:

    为 SR-IOV 监控配置 FlowCollector

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      namespace: netobserv
      deploymentModel: Service
      agent:
        type: eBPF
        ebpf:
          privileged: true

    • spec.agent.ebpf.privileged 字段值必须设置为 true 以启用 SR-IOV 监控。

通过将 eBPF 代理设置为 privileged 模式,再定义二级网络的索引,启用从 OpenShift Virtualization 捕获和增强流,配置 FlowCollector 以监控虚拟机辅助网络流量。

Network Observability 会自动捕获来自连接到默认内部 pod 网络的虚拟机的网络流。

流程

  1. 运行以下命令,获取有关虚拟机启动程序 Pod 的信息。此信息在第 5 步中使用:

    $ oc get pod virt-launcher-<vm_name>-<suffix> -n <namespace> -o yaml
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/network-status: |-
          [{
            "name": "ovn-kubernetes",
            "interface": "eth0",
            "ips": [
              "10.129.2.39"
            ],
            "mac": "0a:58:0a:81:02:27",
            "default": true,
            "dns": {}
          },
          {
            "name": "my-vms/l2-network",
            "interface": "podc0f69e19ba2",
            "ips": [
              "10.10.10.15"
            ],
            "mac": "02:fb:f8:00:00:12",
            "dns": {}
          }]
      name: virt-launcher-fedora-aqua-fowl-13-zr2x9
      namespace: my-vms
    spec:
    #  ...
    status:
    #  ...

    其中:

    name
    指定二级网络的名称。
    interface
    指定二级网络的网络接口。
    ips
    指定二级网络使用的 IP 地址列表。
    mac
    指定用于二级网络的 MAC 地址。
  2. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  3. NetObserv OperatorProvided APIs 标题下,选择 Flow Collector
  4. 选择 cluster,然后选择 YAML 选项卡。
  5. 根据您在额外网络调查中找到的信息配置 FlowCollector

    apiVersion: flows.netobserv.io/v1beta2
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      agent:
        ebpf:
          privileged: true
      processor:
        advanced:
          secondaryNetworks:
          - index:
            - MAC
            name: my-vms/l2-network
    # ...

    其中:

    spec.agent.ebpf.privileged
    指定 eBPF 代理以 特权模式 运行,这需要从虚拟机启动程序 Pod 上的二级网络接口收集流。
    spec.processor.advanced.secondaryNetworks.index
    指定用于索引虚拟机启动程序 Pod 的字段。建议使用 MAC 地址作为索引字段,以获取二级接口的网络流。如果您在 pod 之间有重叠的 MAC 地址,则可以添加额外的索引字段,如 IP 和接口,以确保准确增强。
    MAC
    将 MAC 地址指定为索引字段值。如果您的额外网络信息包含 MAC 地址,请将 MAC 添加到 索引 字段列表中。
    spec.processor.advanced.secondaryNetworks.name
    指定在虚拟机 launcher pod 的 k8s.v1.cni.cncf.io/network-status 注解中找到的二级网络的名称。格式通常是 < namespace>/<network_attachment_definition_name>

验证

  1. 观察虚拟机流量:

    1. 进入 Network Traffic 页。
    2. 使用 k8s.v1.cni.cncf.io/network-status 注解中找到的虚拟机 IP 按照 Source IP过滤。
    3. 查看 SourceDestination 字段(应该增强),并将 VM launcher pod 和虚拟机实例识别为所有者。

第 16 章 Network Observability CLI

16.1. 安装 Network Observability CLI

Network Observability CLI (oc netobserv) 与 Network Observability Operator 分开部署。CLI 可作为 OpenShift CLI (oc)插件提供。它提供快速调试和对网络可观察性进行故障排除的轻量级方法。

16.1.1. 关于 Network Observability CLI

使用 Network Observability CLI (oc netobserv)快速调试并排除网络问题。此工具提供对流和数据包的即时洞察,而无需安装 Network Observability Operator。

Network Observability CLI 是一个流和数据包视觉化工具,它依赖于 eBPF 代理将收集的数据流传输到临时收集器 pod。在捕获过程中不需要持久性存储。运行后,输出将传输到您的本地计算机。

重要

CLI 捕获只适用于在一个简短的持续时间段,如 8-10 分钟。如果运行时间过长,可能很难删除正在运行的进程。

16.1.2. 安装 Network Observability CLI

Network Observability CLI 为您提供了一个轻量级的方法来快速调试和排除网络可观察性。它必须单独安装。

安装 Network Observability CLI (oc netobserv) 是与 Network Observability Operator 安装分开的步骤。这意味着,即使从软件目录中安装 Operator,还必须单独安装 CLI

注意

用户可以选择使用 Krew 安装 netobserv CLI 插件。如需更多信息,请参阅"使用 Krew 安装 CLI 插件"。

先决条件

  • 您必须安装 OpenShift CLI (oc)。
  • 您必须有一个 macOS 或 Linux 操作系统。
  • 您必须安装 dockerpodman
注意

您可以使用 podmandocker 运行安装命令。此流程使用 podman

流程

  1. 运行以下命令登录到 Red Hat registry

    $ podman login registry.redhat.io
  2. 运行以下命令,从镜像中提取 oc-netobserv 文件:

    $ podman create --name netobserv-cli registry.redhat.io/network-observability/network-observability-cli-rhel9:1.11
    $ podman cp netobserv-cli:/oc-netobserv .
    $ podman rm netobserv-cli
  3. 运行以下命令,将提取的文件移到系统的 PATH 上的目录中,如 /usr/local/bin/

    $ sudo mv oc-netobserv /usr/local/bin/

验证

  1. 验证 oc netobserv 是否可用:

    $ oc netobserv version

    这个命令应该会产生类似以下示例的结果:

Netobserv CLI version <version>

16.2. 使用 Network Observability CLI

您可以在终端中直接视觉化和过滤流和数据包数据,以查看特定使用情况,例如识别谁正在使用特定端口。Network Observability CLI 将流作为 JSON 和数据库文件或数据包作为 PCAP 文件来收集,该文件可用于第三方工具。

16.2.1. 捕获流

捕获网络流,并根据 CLI 中的资源或区域应用过滤器。这有助于您解决复杂的用例,如可视化两个不同区域之间的 Round-Trip Time (RTT)。

CLI 中的表视觉化提供了查看和流搜索功能。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 安装 Network Observability CLI (oc netobserv) 插件。

流程

  1. 运行以下命令,通过过滤捕获流:

    $ oc netobserv flows --enable_filter=true --action=Accept --cidr=0.0.0.0/0 --protocol=TCP --port=49051
  2. 在终端的 live table filter 提示下添加过滤以进一步优化传入的流。例如:

    live table filter: [SrcK8S_Zone:us-west-1b] press enter to match multiple regular expressions at once
  3. 使用 PageUpPageDown 键在 NoneResourceZoneHostOwnerall 之间切换。
  4. 要停止捕获,按 Ctrl+C。捕获的数据被写入两个单独的文件,位于用于安装 CLI 的同一路径中的 ./output 目录中。
  5. ./output/flow/<capture_date_time>.json JSON 文件中查看捕获的数据,其中包含了捕获数据的 JSON 阵列。

    JSON 文件示例

    {
      "AgentIP": "10.0.1.76",
      "Bytes": 561,
      "DnsErrno": 0,
      "Dscp": 20,
      "DstAddr": "f904:ece9:ba63:6ac7:8018:1e5:7130:0",
      "DstMac": "0A:58:0A:80:00:37",
      "DstPort": 9999,
      "Duplicate": false,
      "Etype": 2048,
      "Flags": 16,
      "FlowDirection": 0,
      "IfDirection": 0,
      "Interface": "ens5",
      "K8S_FlowLayer": "infra",
      "Packets": 1,
      "Proto": 6,
      "SrcAddr": "3e06:6c10:6440:2:a80:37:b756:270f",
      "SrcMac": "0A:58:0A:80:00:01",
      "SrcPort": 46934,
      "TimeFlowEndMs": 1709741962111,
      "TimeFlowRttNs": 121000,
      "TimeFlowStartMs": 1709741962111,
      "TimeReceived": 1709741964
    }

  6. 您可以使用 SQLite 检查 ./output/flow/<capture_date_time>.db 数据库文件。例如:

    1. 运行以下命令打开该文件:

      $ sqlite3 ./output/flow/<capture_date_time>.db
    2. 运行 SQLite SELECT 语句来查询数据,例如:

      sqlite> SELECT DnsLatencyMs, DnsFlagsResponseCode, DnsId, DstAddr, DstPort, Interface, Proto, SrcAddr, SrcPort, Bytes, Packets FROM flow WHERE DnsLatencyMs >10 LIMIT 10;

      输出示例

      12|NoError|58747|10.128.0.63|57856||17|172.30.0.10|53|284|1
      11|NoError|20486|10.128.0.52|56575||17|169.254.169.254|53|225|1
      11|NoError|59544|10.128.0.103|51089||17|172.30.0.10|53|307|1
      13|NoError|32519|10.128.0.52|55241||17|169.254.169.254|53|254|1
      12|NoError|32519|10.0.0.3|55241||17|169.254.169.254|53|254|1
      15|NoError|57673|10.128.0.19|59051||17|172.30.0.10|53|313|1
      13|NoError|35652|10.0.0.3|46532||17|169.254.169.254|53|183|1
      32|NoError|37326|10.0.0.3|52718||17|169.254.169.254|53|169|1
      14|NoError|14530|10.0.0.3|58203||17|169.254.169.254|53|246|1
      15|NoError|40548|10.0.0.3|45933||17|169.254.169.254|53|174|1

16.2.2. 捕获数据包

使用 Network Observability CLI 捕获网络数据包。您可以应用过滤器,并在终端中优化它们,以进行准确的实时调试。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 安装 Network Observability CLI (oc netobserv) 插件。

流程

  1. 在启用了过滤的情况下运行数据包捕获:

    $ oc netobserv packets --action=Accept --cidr=0.0.0.0/0 --protocol=TCP --port=49051
  2. 在终端的 live table filter 提示下添加过滤以进一步优化传入的数据包。过滤示例如下:

    live table filter: [SrcK8S_Zone:us-west-1b] press enter to match multiple regular expressions at once
  3. 使用 PageUpPageDown 键在 NoneResourceZoneHostOwnerall 之间切换。
  4. 要停止捕获,按 Ctrl+C
  5. 查看捕获的数据,这些数据被写入一个文件中,该文件位于用于安装 CLI 的同一路径中的 ./output/pcap 目录中:

    1. ./output/pcap/<capture_date_time>.pcap 文件可以使用 wireshark 打开。

16.2.3. 捕获指标

使用服务监控器在 Prometheus 中生成按需网络可观察性仪表板。这可让您快速查看和分析网络指标。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 安装 Network Observability CLI (oc netobserv) 插件。

流程

  1. 运行以下命令,捕获启用了过滤器的指标:

    输出示例

    $ oc netobserv metrics --enable_filter=true --cidr=0.0.0.0/0 --protocol=TCP --port=49051

  2. 打开终端提供的链接,以查看 NetObserv / On-Demand 仪表板:

    URL 示例

    https://console-openshift-console.apps.rosa...openshiftapps.com/monitoring/dashboards/netobserv-cli

    注意

    未作为空图形显示的功能。

16.2.4. 清理 Network Observability CLI

使用 oc netobserv cleanup 从集群中删除 Network Observability CLI 安装的所有组件。虽然客户端在捕获后自动运行此命令,但如果您遇到连接问题,您可能需要手动运行该命令。

流程

  • 运行以下命令:

    $ oc netobserv cleanup

16.3. Network Observability CLI (oc netobserv) 参考

Network Observability CLI (oc netobserv) 具有 Network Observability Operator 所具有的大多数功能和过滤选项。您可以传递命令行参数来启用功能或过滤选项。

16.3.1. Network Observability CLI 使用

您可以使用 Network Observability CLI (oc netobserv)传递命令行参数来捕获流数据、数据包数据和指标,以便进一步分析和启用 Network Observability Operator 支持的功能。

16.3.1.1. 语法

oc netobserv 命令的基本语法:

oc netobserv 语法

$ oc netobserv [<command>] [<feature_option>] [<command_options>] 
1

1
功能选项只能与 oc netobserv flow 命令一起使用。它们不能与 oc netobserv packets 命令一起使用。
16.3.1.2. 基本命令
Expand
表 16.1. 基本命令
命令描述

flows

捕获流信息。有关子命令,请参阅"Flows 捕获选项"表。

packets

捕获数据包数据.有关子命令,请参阅"捕获选项"表。

metrics

捕获指标数据。有关子命令,请参阅"Metrics 捕获选项"表。

follow

在后台运行时遵循收集器日志。

stop

通过删除代理 daemonset 停止收集。

复制

在本地复制收集器生成的文件。

cleanup

删除 Network Observability CLI 组件。

version

打印软件版本。

帮助

显示帮助。

16.3.1.3. 流捕获选项

流捕获有强制命令以及附加选项,如启用有关数据包丢弃、DNS 延迟、往返时间和过滤的额外功能。

oc netobserv flows 语法

$ oc netobserv flows [<feature_option>] [<command_options>]

Expand
选项描述default

--enable_all

启用所有 eBPF 功能

false

--enable_dns

启用 DNS 跟踪

false

--enable_ipsec

启用 IPsec 跟踪

false

--enable_network_events

启用网络事件监控

false

--enable_pkt_translation

启用数据包转换

false

--enable_pkt_drop

启用数据包丢弃

false

--enable_rtt

启用 RTT 跟踪

false

--enable_udn_mapping

启用用户定义的网络映射

false

--get-subnets

获取子网信息

false

--privileged

强制 eBPF 代理特权模式

auto

--sampling

数据包抽样间隔

1

--background

在后台运行

false

--copy

在本地复制输出文件

prompt

--log-level

组件日志

info

--max-time

最大捕获时间

5m

--max-bytes

最大捕获字节数

50000000 = 50MB

--action

过滤操作

Accept

--cidr

过滤 CIDR

0.0.0.0/0

--direction

过滤方向

-

--dport

过滤目标端口

-

--dport_range

过滤目标端口范围

-

--dports

过滤两个目标端口之一

-

--drops

仅过滤带有丢弃的数据包的流

false

--icmp_code

过滤 ICMP 代码

-

--icmp_type

过滤 ICMP 类型

-

--node-selector

在特定节点上捕获

-

--peer_ip

过滤对等 IP

-

--peer_cidr

过滤对等 CIDR

-

--port_range

过滤端口范围

-

--port

过滤端口

-

--ports

过滤两个端口之一

-

--protocol

过滤协议

-

--query

使用自定义查询过滤流

-

--sport_range

过滤源端口范围

-

--sport

过滤源端口

-

--sports

过滤两个源端口之一

-

--tcp_flags

过滤 TCP 标记

-

--interfaces

要监控的接口列表,逗号分开

-

--exclude_interfaces

要排除的接口列表,逗号分开

lo

在启用了 PacketDrop 和 RTT 功能的 TCP 协议和端口 49051 上运行流捕获示例:

$ oc netobserv flows --enable_pkt_drop  --enable_rtt --action=Accept --cidr=0.0.0.0/0 --protocol=TCP --port=49051

16.3.1.4. 数据包捕获选项

您可以使用与使用过滤功能过滤数据流相同的方式过滤数据包捕获数据。某些功能(如数据包丢弃、DNS、RTT 和网络事件)仅适用于流和指标捕获。

oc netobserv packets 语法

$ oc netobserv packets [<option>]

Expand
选项描述default

--background

在后台运行

false

--copy

在本地复制输出文件

prompt

--log-level

组件日志

info

--max-time

最大捕获时间

5m

--max-bytes

最大捕获字节数

50000000 = 50MB

--action

过滤操作

Accept

--cidr

过滤 CIDR

0.0.0.0/0

--direction

过滤方向

-

--dport

过滤目标端口

-

--dport_range

过滤目标端口范围

-

--dports

过滤两个目标端口之一

-

--drops

仅过滤带有丢弃的数据包的流

false

--icmp_code

过滤 ICMP 代码

-

--icmp_type

过滤 ICMP 类型

-

--node-selector

在特定节点上捕获

-

--peer_ip

过滤对等 IP

-

--peer_cidr

过滤对等 CIDR

-

--port_range

过滤端口范围

-

--port

过滤端口

-

--ports

过滤两个端口之一

-

--protocol

过滤协议

-

--query

使用自定义查询过滤流

-

--sport_range

过滤源端口范围

-

--sport

过滤源端口

-

--sports

过滤两个源端口之一

-

--tcp_flags

过滤 TCP 标记

-

在 TCP 协议和端口 49051 上运行数据包捕获示例:

$ oc netobserv packets --action=Accept --cidr=0.0.0.0/0 --protocol=TCP --port=49051

16.3.1.5. 指标捕获选项

您可以使用与数据流捕获相同的方式,启用并过滤指标捕获。在仪表板中会相应地生成图表。

oc netobserv 指标语法

$ oc netobserv metrics [<option>]

Expand
选项描述default

--enable_all

启用所有 eBPF 功能

false

--enable_dns

启用 DNS 跟踪

false

--enable_ipsec

启用 IPsec 跟踪

false

--enable_network_events

启用网络事件监控

false

--enable_pkt_translation

启用数据包转换

false

--enable_pkt_drop

启用数据包丢弃

false

--enable_rtt

启用 RTT 跟踪

false

--enable_udn_mapping

启用用户定义的网络映射

false

--get-subnets

获取子网信息

false

--privileged

强制 eBPF 代理特权模式

auto

--sampling

数据包抽样间隔

1

--background

在后台运行

false

--log-level

组件日志

info

--max-time

最大捕获时间

1h

--action

过滤操作

Accept

--cidr

过滤 CIDR

0.0.0.0/0

--direction

过滤方向

-

--dport

过滤目标端口

-

--dport_range

过滤目标端口范围

-

--dports

过滤两个目标端口之一

-

--drops

仅过滤带有丢弃的数据包的流

false

--icmp_code

过滤 ICMP 代码

-

--icmp_type

过滤 ICMP 类型

-

--node-selector

在特定节点上捕获

-

--peer_ip

过滤对等 IP

-

--peer_cidr

过滤对等 CIDR

-

--port_range

过滤端口范围

-

--port

过滤端口

-

--ports

过滤两个端口之一

-

--protocol

过滤协议

-

--query

使用自定义查询过滤流

-

--sport_range

过滤源端口范围

-

--sport

过滤源端口

-

--sports

过滤两个源端口之一

-

--tcp_flags

过滤 TCP 标记

-

--include_list

要生成的指标名称列表,用逗号分开

namespace_flows_total,node_ingress_bytes_total,node_egress_bytes_total,workload_ingress_bytes_total

--interfaces

要监控的接口列表,逗号分开

-

--exclude_interfaces

要排除的接口列表,逗号分开

lo

运行 TCP 丢弃的指标捕获示例

$ oc netobserv metrics --enable_pkt_drop --protocol=TCP

第 17 章 FlowCollector API 参考

FlowCollector API 是用于试验的底层模式,并配置用于收集网络流的部署。本参考指南可帮助您管理这些关键设置。

17.1. FlowCollector API 规格

描述
FlowCollector 是网络流集合 API 的 schema,它试用并配置底层部署。
类型
object
Expand
属性类型描述

apiVersion

string

APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

string

kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

object

标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

spec

object

定义 FlowCollector 资源所需状态。

*:在本文档中声明的"不支持"或"弃用"的功能代表红帽不正式支持这些功能。例如,这些功能可能由社区提供,并在没有正式维护协议的情况下被接受。产品维护人员可能只为这些功能提供一些支持。

17.1.1. .metadata

描述
标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
类型
object

17.1.2. .spec

描述

定义 FlowCollector 资源所需状态。

*:在本文档中声明的"不支持"或"弃用"的功能代表红帽不正式支持这些功能。例如,这些功能可能由社区提供,并在没有正式维护协议的情况下被接受。产品维护人员可能只为这些功能提供一些支持。

类型
object
Expand
属性类型描述

agent

object

流提取的代理配置。

consolePlugin

object

ConsolePlugin 定义与 OpenShift Container Platform 控制台插件相关的设置(如果可用)。

deploymentModel

string

deploymentModel 定义所需的用于流处理的部署类型。可能的值有:

- 服务(默认)使流处理器作为 Kubernetes 服务侦听,由可扩展的 Deployment 支持。

- Kafka 在处理器使用前,将流发送到 Kafka 管道。

- 直接 使流处理器使用主机网络直接从代理侦听,由 DaemonSet 支持。仅在小集群中推荐,以下 15 个节点。

Kafka 可以提供更好的可扩展性、弹性和高可用性(更多详情,请参阅 https://www.redhat.com/en/topics/integration/what-is-apache-kafka)。

在大型集群中 不建议使用 direct,因为它的内存效率较低。

exporters

数组

exporters 为自定义消耗或存储定义了其他可选导出器。

kafka

object

Kafka 配置,允许使用 Kafka 作为流集合管道的一部分。当 spec.deploymentModelKafka 时可用。

loki

object

loki,流存储、客户端设置。

namespace

string

部署 Network Observability pod 的命名空间。

networkPolicy

object

NetworkPolicy 为 Network Observability 组件隔离定义网络策略设置。

processor

object

processor 定义从代理接收流的组件设置,增强它们,生成指标,并将它们转发到 Loki 持久层和/或任何可用的导出器。

prometheus

object

prometheus 定义 Prometheus 设置,如用于从控制台插件获取指标的 querier 配置。

17.1.3. .spec.agent

描述
流提取的代理配置。
类型
object
Expand
属性类型描述

ebpf

object

ebpf 描述了当 spec.agent.type 设置为 eBPF 时,与基于 eBPF 的流报告程序相关的设置。

type

string

type [弃用 *] 选择流追踪代理。在以前的版本中,此字段可以用于选择使用 eBPFIPFIX。现在,因为只允许使用 eBPF,此字段已弃用,计划在以后的 API 版本中删除。

17.1.4. .spec.agent.ebpf

描述
ebpf 描述了当 spec.agent.type 设置为 eBPF 时,与基于 eBPF 的流报告程序相关的设置。
类型
object
Expand
属性类型描述

advanced

object

advanced 允许设置 eBPF 代理的内部配置的一些方面。本节主要用于调试和精细的性能优化,如 GOGCGOMAXPROCS 环境变量。在设置这些值时,您需要自己考虑相关的风险。您也可以从那里覆盖默认的 Linux 功能。

cacheActiveTimeout

string

cacheActiveTimeout 是代理在发送前聚合流的周期。增加 cacheMaxFlowscacheActiveTimeout 可能会降低网络流量开销和 CPU 负载,但您可以预期更高的内存消耗和流集合中的延迟增加。

cacheMaxFlows

整数

cacheMaxFlows 是聚合中的最大流数;达到时,报告者会发送流。增加 cacheMaxFlowscacheActiveTimeout 可能会降低网络流量开销和 CPU 负载,但您可以预期更高的内存消耗和流集合中的延迟增加。

excludeInterfaces

数组(字符串)

excludeInterfaces 包含从流追踪中排除的接口名称。条目用斜杠括起,如 /br-/,与正则表达式匹配。否则,它将匹配为区分大小写的字符串。

功能

数组(字符串)

要启用的额外功能列表。它们都默认禁用。启用其他功能可能会对性能有影响。可能的值有:

- PacketDrop: 启用数据包丢弃日志功能。这个功能需要挂载内核调试文件系统,因此 eBPF 代理 pod 必须以特权方式运行。如果没有设置 spec.agent.ebpf.privileged 参数,会报告一个错误。

- DNSTracking:启用 DNS 跟踪功能。

- FlowRTT:从 TCP 流量在 eBPF 代理中启用流延迟 (sRTT)。

- NetworkEvents :启用网络事件监控功能,如更正流和网络策略。这个功能需要挂载内核调试文件系统,因此 eBPF 代理 pod 必须以特权方式运行。它需要通过 Observability 功能使用 OVN-Kubernetes 网络插件。
重要信息:这个功能作为技术预览提供。

- PacketTranslation :通过数据包转换信息(如 Service NAT)启用丰富的流。

- EbpfManager: 不支持 * 。使用 eBPF Manager 管理 Network Observability eBPF 程序。先决条件:必须安装 eBPF Manager operator (或上游 bpfman operator)。

- UDNMapping: 不支持 *启用接口映射到用户定义的网络(UDN)。
这个功能需要挂载内核调试文件系统,因此 eBPF 代理 pod 必须以特权方式运行。它需要通过 Observability 功能使用 OVN-Kubernetes 网络插件。

flowFilter

object

flowFilter 定义有关流过滤的 eBPF 代理配置。

imagePullPolicy

string

imagePullPolicy 是上面定义的镜像的 Kubernetes pull 策略

interfaces

数组(字符串)

接口 包含从中收集流的接口名称。如果为空,代理会获取系统中的所有接口,但 excludeInterfaces 中列出的接口除外。条目用斜杠括起,如 /br-/,与正则表达式匹配。否则,它将匹配为区分大小写的字符串。

kafkaBatchSize

整数

kafkaBatchSize 在发送到分区前限制请求的最大大小(以字节为单位)。如果不使用 Kafka,则忽略。默认:1MB。

logLevel

string

Loglevel 定义 Network Observability eBPF 代理的日志级别

metrics

object

metrics 定义了有关指标的 eBPF 代理配置。

privileged

布尔值

eBPF Agent 容器的特权模式。当设置为 true 时,代理可以捕获更多流量,包括从二级接口。当忽略或设置为 false 时,Operator 会将粒度功能(BPF、PERFMON、NET_ADMIN)设置为容器。有些代理功能需要特权模式,如数据包丢弃跟踪(请参阅 功能)和 SR-IOV 支持。

resources

object

resources 是此容器所需的计算资源。如需更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

sampling

整数

eBPF 探测的抽样间隔。100 表示发送 100 个数据包中一个。0 或 1 表示所有数据包都是抽样的。

17.1.5. .spec.agent.ebpf.advanced

描述
advanced 允许设置 eBPF 代理的内部配置的一些方面。本节主要用于调试和精细的性能优化,如 GOGCGOMAXPROCS 环境变量。在设置这些值时,您需要自己考虑相关的风险。您也可以从那里覆盖默认的 Linux 功能。
类型
object
Expand
属性类型描述

env

对象(字符串)

env 允许将自定义环境变量传递给底层组件。对于传递一些非常严格的性能调整选项(如 GOGCGOMAXPROCS )非常有用,它们不应作为 FlowCollector 描述符的一部分公开,因为它们仅在边缘调试或支持场景中有用。

scheduling

object

调度控制如何在节点上调度 pod。

17.1.6. .spec.agent.ebpf.advanced.scheduling

描述
调度控制如何在节点上调度 pod。
类型
object
Expand
属性类型描述

关联性

object

如果指定,pod 的调度限制。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling

nodeSelector

对象(字符串)

nodeSelector 只允许将 pod 调度到具有每个指定标签的节点上。有关文档,请参阅 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

priorityClassName

string

如果指定,指示 pod 的优先级。有关文档,请参阅 https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#how-to-use-priority-and-preemption。如果没有指定,则使用默认优先级,如果没有默认值,则使用零。

容限(tolerations)

数组

tolerations 是一个容限 (toleration) 列表,允许 pod 调度到具有匹配污点的节点。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling

17.1.7. .spec.agent.ebpf.advanced.scheduling.affinity

描述
如果指定,pod 的调度限制。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling
类型
object

17.1.8. .spec.agent.ebpf.advanced.scheduling.tolerations

描述
tolerations 是一个容限 (toleration) 列表,允许 pod 调度到具有匹配污点的节点。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling
类型
数组

17.1.9. .spec.agent.ebpf.flowFilter

描述
flowFilter 定义有关流过滤的 eBPF 代理配置。
类型
object
Expand
属性类型描述

action

string

action 定义对与过滤匹配的流执行的操作。可用的选项是 Accept (默认设置)和 Reject

cidr

string

cidr 定义用于过滤流的 IP CIDR。示例:10.10.10.0/24100:100:100:100::/64

destPorts

integer-or-string

destPorts (可选)定义要过滤流的目标端口。要过滤一个单一端口,使用一个整数值。例如,destPorts: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如,destPorts: "80-100".要过滤两个端口,请使用 "port1,port2" 格式的字符串 。例如,ports: "80,100"

direction

string

direction (可选)定义要过滤流的方向。可用的选项包括 IngressEgress

enable

布尔值

enable 设置为 true 以启用 eBPF 流过滤功能。

icmpCode

整数

icmpCode,用于互联网控制消息协议(ICMP)流量,(可选) 定义要过滤流的 ICMP 代码。

icmpType

整数

icmptype,用于 ICMP 流量,(可选)定义要过滤流的 ICMP 类型。

peerCIDR

string

peerCIDR 定义要过滤流的 Peer IP CIDR。示例:10.10.10.0/24100:100:100:100::/64

peerIP

string

peerIP (可选)定义要过滤流的远程 IP 地址。示例: 10.10.10.10

pktDrops

布尔值

pktDrops (可选)仅过滤包含数据包丢弃的流。

ports

integer-or-string

ports(可选)定义要过滤流的端口。它用于源和目标端口。要过滤一个单一端口,使用一个整数值。例如,ports: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如,ports: "80-100"。要过滤两个端口,请使用 "port1,port2" 格式的字符串 。例如,ports: "80,100"

protocol

string

protocol(可选)定义要过滤流的协议。可用的选项为 TCP, UDP, ICMP, ICMPv6, 和 SCTP

rules

数组

rules 定义了 eBPF 代理上的过滤规则列表。在启用过滤后,与任何规则不匹配的流将被拒绝。要更改默认值,您可以定义接受所有内容的规则:{ action: "Accept", cidr: "0.0.0.0/0" },然后使用拒绝规则进行优化。

sampling

整数

sampling 是匹配数据包的抽样间隔,覆盖 spec.agent.ebpf.sampling 中定义的全局抽样。

sourcePorts

integer-or-string

sourcePorts (可选)定义要过滤流的源端口。要过滤一个单一端口,使用一个整数值。例如,sourcePorts: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如,sourcePorts: "80-100"。要过滤两个端口,请使用 "port1,port2" 格式的字符串 。例如,ports: "80,100"

tcpFlags

string

tcpFlags (可选)定义用于过滤流的 TCP 标志:除了标准标志(RFC-9293)外,您还可以按以下三种组合之一进行过滤:SYN-ACK, FIN-ACK, 和 RST-ACK

17.1.10. .spec.agent.ebpf.flowFilter.rules

描述
rules 定义了 eBPF 代理上的过滤规则列表。在启用过滤后,与任何规则不匹配的流将被拒绝。要更改默认值,您可以定义接受所有内容的规则:{ action: "Accept", cidr: "0.0.0.0/0" },然后使用拒绝规则进行优化。
类型
数组

17.1.11. .spec.agent.ebpf.flowFilter.rules[]

描述
EBPFFlowFilterRule 定义有关流过滤规则所需的 eBPF 代理配置。
类型
object
Expand
属性类型描述

action

string

action 定义对与过滤匹配的流执行的操作。可用的选项是 Accept (默认设置)和 Reject

cidr

string

cidr 定义用于过滤流的 IP CIDR。示例:10.10.10.0/24100:100:100:100::/64

destPorts

integer-or-string

destPorts (可选)定义要过滤流的目标端口。要过滤一个单一端口,使用一个整数值。例如,destPorts: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如,destPorts: "80-100".要过滤两个端口,请使用 "port1,port2" 格式的字符串 。例如,ports: "80,100"

direction

string

direction (可选)定义要过滤流的方向。可用的选项包括 IngressEgress

icmpCode

整数

icmpCode,用于互联网控制消息协议(ICMP)流量,(可选) 定义要过滤流的 ICMP 代码。

icmpType

整数

icmptype,用于 ICMP 流量,(可选)定义要过滤流的 ICMP 类型。

peerCIDR

string

peerCIDR 定义要过滤流的 Peer IP CIDR。示例:10.10.10.0/24100:100:100:100::/64

peerIP

string

peerIP (可选)定义要过滤流的远程 IP 地址。示例: 10.10.10.10

pktDrops

布尔值

pktDrops (可选)仅过滤包含数据包丢弃的流。

ports

integer-or-string

ports(可选)定义要过滤流的端口。它用于源和目标端口。要过滤一个单一端口,使用一个整数值。例如,ports: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如,ports: "80-100"。要过滤两个端口,请使用 "port1,port2" 格式的字符串 。例如,ports: "80,100"

protocol

string

protocol(可选)定义要过滤流的协议。可用的选项为 TCP, UDP, ICMP, ICMPv6, 和 SCTP

sampling

整数

sampling 是匹配数据包的抽样间隔,覆盖 spec.agent.ebpf.sampling 中定义的全局抽样。

sourcePorts

integer-or-string

sourcePorts (可选)定义要过滤流的源端口。要过滤一个单一端口,使用一个整数值。例如,sourcePorts: 80。要过滤一系列端口,使用"开始-结束"范围形式的字符串。例如,sourcePorts: "80-100"。要过滤两个端口,请使用 "port1,port2" 格式的字符串 。例如,ports: "80,100"

tcpFlags

string

tcpFlags (可选)定义用于过滤流的 TCP 标志:除了标准标志(RFC-9293)外,您还可以按以下三种组合之一进行过滤:SYN-ACK, FIN-ACK, 和 RST-ACK

17.1.12. .spec.agent.ebpf.metrics

描述
metrics 定义了有关指标的 eBPF 代理配置。
类型
object
Expand
属性类型描述

disableAlerts

数组(字符串)

disableAlerts 是应禁用的警报列表。可能的值有:

当 eBPF 代理缺少数据包或流(如 eBPF hashmap 忙碌或已满)或触发容量限制器时,会触发 NetObservDroppedFlows

enable

布尔值

enable 设置为 false 以禁用 eBPF 代理指标集合。它会被默认启用。

server

object

Prometheus scraper 的指标服务器端点配置。

17.1.13. .spec.agent.ebpf.metrics.server

描述
Prometheus scraper 的指标服务器端点配置。
类型
object
Expand
属性类型描述

port

整数

指标服务器 HTTP 端口。

tls

object

TLS 配置。

17.1.14. .spec.agent.ebpf.metrics.server.tls

描述
TLS 配置。
类型
object
必填
  • type
Expand
属性类型描述

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过提供的证书的客户端侧验证。如果设置为 true,则忽略 providedCaFile 字段。

provided

object

type 设置为 Provided 时的 TLS 配置。

providedCaFile

object

当将 type 设置为 Provided 时,对 CA 文件的引用。

type

string

选择 TLS 配置类型:

- Disabled (默认)没有为端点配置 TLS。- Provided 手动提供证书文件和密钥文件。不支持 *. - Auto 使用注解的 OpenShift Container Platform 自动生成证书。

17.1.15. .spec.agent.ebpf.metrics.server.tls.provided

描述
type 设置为 Provided 时的 TLS 配置。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.16. .spec.agent.ebpf.metrics.server.tls.providedCaFile

描述
当将 type 设置为 Provided 时,对 CA 文件的引用。
类型
object
Expand
属性类型描述

file

string

配置映射或 secret 中的文件名。

name

string

包含该文件的配置映射或 secret 的名称。

namespace

string

包含该文件的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

文件引用的类型:configmapsecret

17.1.17. .spec.agent.ebpf.resources

描述
resources 是此容器所需的计算资源。如需更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
类型
object
Expand
属性类型描述

limits

integer-or-string

限制描述了允许的最大计算资源量。更多信息: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

requests

integer-or-string

Requests 描述了所需的最少计算资源。如果容器省略了 Requests,则默认为 Limits (如果明确指定),否则默认为实现定义的值。请求不能超过限值。更多信息: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

17.1.18. .spec.consolePlugin

描述
ConsolePlugin 定义与 OpenShift Container Platform 控制台插件相关的设置(如果可用)。
类型
object
Expand
属性类型描述

advanced

object

advanced 允许设置控制台插件的内部配置的一些方面。本节主要用于调试和精细的性能优化,如 GOGCGOMAXPROCS 环境变量。在设置这些值时,您需要自己考虑相关的风险。

autoscaler

object

autoscaler [deprecated HEKETI] spec of a horizontal pod autoscaler to set set for the plugin Deployment。弃用通知:受管自动扩展将在以后的版本中删除。您可以配置一个选择的自动扩展器,并将 spec.consolePlugin.unmanagedReplicas 设置为 true。请参阅 HorizontalPodAutoscaler 文档(autoscaling/v2)。

enable

布尔值

启用 console 插件部署。

imagePullPolicy

string

imagePullPolicy 是上面定义的镜像的 Kubernetes pull 策略。

logLevel

string

控制台插件后端的日志级别。

portNaming

object

portNaming 定义端口到服务名称转换的配置。

quickFilters

数组

quickFilters 为 Console 插件配置快速过滤器预设置。外部流量的过滤器假定将子网标签配置为区分内部和外部流量(请参阅 spec.processor.subnetLabels)。

replicas

整数

replicas 定义要启动的副本(pod)数。

resources

object

resources,根据此容器所需的计算资源。如需更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

独立

布尔值

部署为独立控制台,而不是 OpenShift Container Platform 控制台的插件。在 OpenShift Container Platform 中使用时不推荐这样做,因为它不提供集成的体验。[Unsupported WASM]。

unmanagedReplicas

布尔值

如果 unmanagedReplicastrue,Operator 将不会协调 副本。这在使用 pod 自动缩放器时很有用。

17.1.19. .spec.consolePlugin.advanced

描述
advanced 允许设置控制台插件的内部配置的一些方面。本节主要用于调试和精细的性能优化,如 GOGCGOMAXPROCS 环境变量。在设置这些值时,您需要自己考虑相关的风险。
类型
object
Expand
属性类型描述

args

数组(字符串)

args 允许将自定义参数传递给底层组件。对于覆盖某些参数(如 url 或配置路径)非常有用,它们不应作为 FlowCollector 描述符的一部分公开,因为它们仅在边缘调试或支持场景中有用。

env

对象(字符串)

env 允许将自定义环境变量传递给底层组件。对于传递一些非常严格的性能调整选项(如 GOGCGOMAXPROCS )非常有用,它们不应作为 FlowCollector 描述符的一部分公开,因为它们仅在边缘调试或支持场景中有用。

port

整数

port 是插件服务端口。不要使用 9002,它为指标保留。

register

布尔值

register 允许(设置为 true 时),在 OpenShift Container Platform Console Operator 中自动注册提供的控制台插件。当设置为 false 时,您仍然可以使用以下命令编辑 console.operator.openshift.io/cluster 来手动注册它: oc patch console.operator.openshift.io cluster --type='json' -p '[{"op": "add", "path": "/spec/plugins/-", "value": "netobserv-plugin"}]'

scheduling

object

scheduling 控制如何在节点上调度 pod。

17.1.20. .spec.consolePlugin.advanced.scheduling

描述
scheduling 控制如何在节点上调度 pod。
类型
object
Expand
属性类型描述

关联性

object

如果指定,pod 的调度限制。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling

nodeSelector

对象(字符串)

nodeSelector 只允许将 pod 调度到具有每个指定标签的节点上。有关文档,请参阅 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

priorityClassName

string

如果指定,指示 pod 的优先级。有关文档,请参阅 https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#how-to-use-priority-and-preemption。如果没有指定,则使用默认优先级,如果没有默认值,则使用零。

容限(tolerations)

数组

tolerations 是一个容限 (toleration) 列表,允许 pod 调度到具有匹配污点的节点。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling

17.1.21. .spec.consolePlugin.advanced.scheduling.affinity

描述
如果指定,pod 的调度限制。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling
类型
object
描述
tolerations 是一个容限 (toleration) 列表,允许 pod 调度到具有匹配污点的节点。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling
类型
数组

17.1.23. .spec.consolePlugin.autoscaler

描述
autoscaler [deprecated HEKETI] spec of a horizontal pod autoscaler to set set for the plugin Deployment。弃用通知:受管自动扩展将在以后的版本中删除。您可以配置一个选择的自动扩展器,并将 spec.consolePlugin.unmanagedReplicas 设置为 true。请参阅 HorizontalPodAutoscaler 文档(autoscaling/v2)。
类型
object

17.1.24. .spec.consolePlugin.portNaming

描述
portNaming 定义端口到服务名称转换的配置。
类型
object
Expand
属性类型描述

enable

布尔值

启用 console 插件端口到服务名称转换

portNames

对象(字符串)

portNames 定义了在控制台中使用的额外端口名称,例如 portNames: {"3100": "loki"}

17.1.25. .spec.consolePlugin.quickFilters

描述
quickFilters 为 Console 插件配置快速过滤器预设置。外部流量的过滤器假定将子网标签配置为区分内部和外部流量(请参阅 spec.processor.subnetLabels)。
类型
数组

17.1.26. .spec.consolePlugin.quickFilters[]

描述
QuickFilter 为控制台的快速过滤器定义预设置配置
类型
object
必填
  • filter
  • name
Expand
属性类型描述

default

布尔值

default 定义默认是否应激活此过滤器

filter

对象(字符串)

filter 是一组在选择此过滤器时要设置的键和值。每个键都可以与使用组合字符串的值列表相关,例如 filter: {"src_namespace": "namespace1,namespace2"}

name

string

过滤器的名称,在控制台中显示

17.1.27. .spec.consolePlugin.resources

描述
resources,根据此容器所需的计算资源。如需更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
类型
object
Expand
属性类型描述

limits

integer-or-string

限制描述了允许的最大计算资源量。更多信息: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

requests

integer-or-string

Requests 描述了所需的最少计算资源。如果容器省略了 Requests,则默认为 Limits (如果明确指定),否则默认为实现定义的值。请求不能超过限值。更多信息: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

17.1.28. .spec.exporters

描述
exporters 为自定义消耗或存储定义了其他可选导出器。
类型
数组

17.1.29. .spec.exporters[]

描述
FlowCollectorExporter 定义了一个额外的导出器来发送增强的流
类型
object
必填
  • type
Expand
属性类型描述

ipfix

object

IPFIX 配置,如 IP 地址和端口,以将增强的 IPFIX 流发送到。

kafka

object

Kafka 配置(如地址和主题)将增强的流发送到。

openTelemetry

object

OpenTelemetry 配置,如 IP 地址和端口,用于发送增强的日志或指标。

type

string

type 选择导出器类型。可用的选项为 KafkaIPFIXOpenTelemetry

17.1.30. .spec.exporters[].ipfix

描述
IPFIX 配置,如 IP 地址和端口,以将增强的 IPFIX 流发送到。
类型
object
必填
  • enterpriseID
  • targetHost
  • targetPort
Expand
属性类型描述

enterpriseID

整数

EnterpriseID 或私有企业号(PEN)。到目前为止,Network Observability 本身没有分配的数字,因此它会为配置保留打开状态。需要 PEN 收集非标准数据,如 Kubernetes 名称、RTT 等。

targetHost

string

IPFIX 外部接收器的地址。

targetPort

整数

IPFIX 外部接收器的端口。

传输

string

用于 IPFIX 连接的传输协议(TCPUDP),默认为 TCP

17.1.31. .spec.exporters[].kafka

描述
Kafka 配置(如地址和主题)将增强的流发送到。
类型
object
必填
  • address
  • topic
Expand
属性类型描述

address

string

Kafka 服务器的地址

sasl

object

SASL 身份验证配置。不支持 *。

tls

object

TLS 客户端配置。在使用 TLS 时,验证地址是否与用于 TLS 的 Kafka 端口匹配,通常为 9093。

topic

string

要使用的 Kafka 主题。它必须存在。Network Observability 不会创建它。

17.1.32. .spec.exporters[].kafka.sasl

描述
SASL 身份验证配置。不支持 *。
类型
object
Expand
属性类型描述

clientIDReference

object

对包含客户端 ID 的 secret 或配置映射的引用

clientSecretReference

object

对包含客户端 secret 的 secret 或配置映射的引用

type

string

使用的 SASL 身份验证类型,如果没有使用 SASL,则为 Disabled

17.1.33. .spec.exporters[].kafka.sasl.clientIDReference

描述
对包含客户端 ID 的 secret 或配置映射的引用
类型
object
Expand
属性类型描述

file

string

配置映射或 secret 中的文件名。

name

string

包含该文件的配置映射或 secret 的名称。

namespace

string

包含该文件的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

文件引用的类型:configmapsecret

17.1.34. .spec.exporters[].kafka.sasl.clientSecretReference

描述
对包含客户端 secret 的 secret 或配置映射的引用
类型
object
Expand
属性类型描述

file

string

配置映射或 secret 中的文件名。

name

string

包含该文件的配置映射或 secret 的名称。

namespace

string

包含该文件的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

文件引用的类型:configmapsecret

17.1.35. .spec.exporters[].kafka.tls

描述
TLS 客户端配置。在使用 TLS 时,验证地址是否与用于 TLS 的 Kafka 端口匹配,通常为 9093。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.36. .spec.exporters[].kafka.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.37. .spec.exporters[].kafka.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.38. .spec.exporters[].openTelemetry

描述
OpenTelemetry 配置,如 IP 地址和端口,用于发送增强的日志或指标。
类型
object
必填
  • targetHost
  • targetPort
Expand
属性类型描述

fieldsMapping

数组

自定义字段映射到 OpenTelemetry 一致性格式。默认情况下使用 Network Observability 格式提议 :https://github.com/rhobs/observability-data-model/blob/main/network-observability.md#format-proposal。因为目前没有 L3 或 L4 增强的网络日志接受的标准,因此您可以自行自由覆盖它。

标头

对象(字符串)

要添加到消息的标头(可选)

logs

object

日志的 OpenTelemetry 配置。

metrics

object

指标的 OpenTelemetry 配置。

protocol

string

OpenTelemetry 连接的协议。可用的选项包括 httpgrpc

targetHost

string

OpenTelemetry 接收器的地址。

targetPort

整数

OpenTelemetry 接收器的端口。

tls

object

TLS 客户端配置。

17.1.39. .spec.exporters[].openTelemetry.fieldsMapping

描述
自定义字段映射到 OpenTelemetry 一致性格式。默认情况下使用 Network Observability 格式提议 :https://github.com/rhobs/observability-data-model/blob/main/network-observability.md#format-proposal。因为目前没有 L3 或 L4 增强的网络日志接受的标准,因此您可以自行自由覆盖它。
类型
数组

17.1.40. .spec.exporters[].openTelemetry.fieldsMapping[]

描述
类型
object
Expand
属性类型描述

输入

string

 

multiplier

整数

 

output

string

 

17.1.41. .spec.exporters[].openTelemetry.logs

描述
日志的 OpenTelemetry 配置。
类型
object
Expand
属性类型描述

enable

布尔值

enable 设置为 true 以将日志发送到 OpenTelemetry 接收器。

17.1.42. .spec.exporters[].openTelemetry.metrics

描述
指标的 OpenTelemetry 配置。
类型
object
Expand
属性类型描述

enable

布尔值

enable 设置为 true,将指标发送到 OpenTelemetry 接收器。

pushTimeInterval

string

指定将指标发送到收集器的频率。

17.1.43. .spec.exporters[].openTelemetry.tls

描述
TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.44. .spec.exporters[].openTelemetry.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.45. .spec.exporters[].openTelemetry.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.46. .spec.kafka

描述
Kafka 配置,允许使用 Kafka 作为流集合管道的一部分。当 spec.deploymentModelKafka 时可用。
类型
object
必填
  • address
  • topic
Expand
属性类型描述

address

string

Kafka 服务器的地址

sasl

object

SASL 身份验证配置。不支持 *。

tls

object

TLS 客户端配置。在使用 TLS 时,验证地址是否与用于 TLS 的 Kafka 端口匹配,通常为 9093。

topic

string

要使用的 Kafka 主题。它必须存在。Network Observability 不会创建它。

17.1.47. .spec.kafka.sasl

描述
SASL 身份验证配置。不支持 *。
类型
object
Expand
属性类型描述

clientIDReference

object

对包含客户端 ID 的 secret 或配置映射的引用

clientSecretReference

object

对包含客户端 secret 的 secret 或配置映射的引用

type

string

使用的 SASL 身份验证类型,如果没有使用 SASL,则为 Disabled

17.1.48. .spec.kafka.sasl.clientIDReference

描述
对包含客户端 ID 的 secret 或配置映射的引用
类型
object
Expand
属性类型描述

file

string

配置映射或 secret 中的文件名。

name

string

包含该文件的配置映射或 secret 的名称。

namespace

string

包含该文件的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

文件引用的类型:configmapsecret

17.1.49. .spec.kafka.sasl.clientSecretReference

描述
对包含客户端 secret 的 secret 或配置映射的引用
类型
object
Expand
属性类型描述

file

string

配置映射或 secret 中的文件名。

name

string

包含该文件的配置映射或 secret 的名称。

namespace

string

包含该文件的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

文件引用的类型:configmapsecret

17.1.50. .spec.kafka.tls

描述
TLS 客户端配置。在使用 TLS 时,验证地址是否与用于 TLS 的 Kafka 端口匹配,通常为 9093。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.51. .spec.kafka.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.52. .spec.kafka.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
对象
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.53. .spec.loki

描述
loki,流存储、客户端设置。
类型
object
必填
  • 模式
Expand
属性类型描述

advanced

object

advanced 允许设置 Loki 客户端的内部配置的一些方面。本节主要用于调试和精细的性能优化。

enable

布尔值

enable 设置为 true 以在 Loki 中存储流。Console 插件可以使用 Loki 或 Prometheus(或两者)作为指标的数据源(请参阅 spec.prometheus.querier)。并非所有查询都可从 Loki 转换为 Prometheus。因此,如果 Loki 被禁用,插件的一些功能也会被禁用,如获取每个 pod 的信息或查看原始流。如果启用了 Prometheus 和 Loki,Prometheus 会优先使用,Loki 作为 Prometheus 无法处理的查询的回退系统。如果两者都被禁用,则不会部署 Console 插件。

lokiStack

object

LokiStack 模式的 Loki 配置。这对简单的 Loki Operator 配置很有用。对于其他模式,它会被忽略。

manual

object

Manual 模式的 Loki 配置。这是最灵活的配置。对于其他模式,它会被忽略。

微服务

object

对于 Microservices 模式的 Loki 配置。当使用微服务部署模式(https://grafana.com/docs/loki/latest/fundamentals/architecture/deployment-modes/#microservices-mode)安装 Loki 时使用这个选项。对于其他模式,它会被忽略。

模式

string

mode 必须根据 Loki 的安装模式设置:

- 当 Loki 通过 Loki Operator 管理时使用 LokiStack

- 当 Loki 作为单体工作负载安装时,使用 Monolithic

- 当 Loki 作为微服务安装,但没有 Loki Operator 时,使用 Microservices

- 如果以上选项与您的设置都不匹配,则使用 Manual

monolithic

object

Monolithic 模式的 Loki 配置。当使用单体部署模式 (https://grafana.com/docs/loki/latest/fundamentals/architecture/deployment-modes/#monolithic-mode) 安装 Loki 时使用这个选项。对于其他模式,它会被忽略。

readTimeout

string

readTimeout 是最大控制台插件 loki 查询总时间的限制。超时值为零表示没有超时。

writeBatchSize

整数

writeBatchSize 是在发送前累积的 Loki 日志的最大批处理大小(以字节为单位)。

writeBatchWait

string

writeBatchWait 是发送 Loki 批处理前等待的最长时间。

writeTimeout

string

writeTimeout 是最大 Loki 时间连接 / 请求限制。超时值为零表示没有超时。

17.1.54. .spec.loki.advanced

描述
advanced 允许设置 Loki 客户端的内部配置的一些方面。本节主要用于调试和精细的性能优化。
类型
object
Expand
属性类型描述

excludeLabels

数组(字符串)

excludeLabels 是要从 Loki 标签中排除的字段列表。[Unsupported HEKETI]。

staticLabels

对象(字符串)

staticLabels 是 Loki 存储中的每个流上设置的通用标签映射。

writeMaxBackoff

string

writeMaxBackoff 是 Loki 客户端连接在重试之间的最大 backoff 时间。

writeMaxRetries

整数

writeMaxRetries 是 Loki 客户端连接的最大重试次数。

writeMinBackoff

string

writeMinBackoff 是 Loki 客户端连接在重试之间的初始 backoff 时间。

17.1.55. .spec.loki.lokiStack

描述
LokiStack 模式的 Loki 配置。这对简单的 Loki Operator 配置很有用。对于其他模式,它会被忽略。
类型
object
必填
  • name
Expand
属性类型描述

name

string

要使用的现有 LokiStack 资源的名称。

namespace

string

LokiStack 资源所在的命名空间。如果省略,则假定它与 spec.namespace 相同。

17.1.56. .spec.loki.manual

描述
Manual 模式的 Loki 配置。这是最灵活的配置。对于其他模式,它会被忽略。
类型
object
Expand
属性类型描述

authToken

string

authToken 描述了获取与 Loki 进行身份验证的令牌的方法。

- Disabled 请求不发送任何令牌。

- Forward 转发用户令牌用于验证。

- Host [已弃用 *] - 使用本地 pod 服务帐户用于 Loki 进行身份验证。

使用 Loki Operator 时,必须设置为 Forward

ingesterUrl

string

ingesterUrl 是现有 Loki ingester 服务的地址,用于将流推送到。使用 Loki Operator 时,使用路径中设置的 network 租户将其设置为 Loki 网关服务,例如 https://loki-gateway-http.netobserv.svc:8080/api/logs/v1/network

querierUrl

string

querierUrl 指定 Loki querier 服务的地址。使用 Loki Operator 时,使用路径中设置的 network 租户将其设置为 Loki 网关服务,例如 https://loki-gateway-http.netobserv.svc:8080/api/logs/v1/network

statusTls

object

Loki 状态 URL 的 TLS 客户端配置。

statusUrl

string

statusUrl 指定 Loki /ready/metrics/config 端点的地址,如果它与 Loki querier URL 不同。如果为空,则使用 querierUrl 值。这可用于在前端中显示错误消息和一些上下文。使用 Loki Operator 时,将其设置为 Loki HTTP 查询前端服务,例如 https://loki-query-frontend-http.netobserv.svc:3100/。当设置 statusUrl 时,使用 statusTLS 配置。

tenantID

string

tenantId 是 Loki X-Scope-OrgID,用于标识每个请求的租户。使用 Loki Operator 时,将其设置为 network,这对应于一个特殊的租户模式。

tls

object

Loki URL 的 TLS 客户端配置。

17.1.57. .spec.loki.manual.statusTls

描述
Loki 状态 URL 的 TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.58. .spec.loki.manual.statusTls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.59. .spec.loki.manual.statusTls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.60. .spec.loki.manual.tls

描述
Loki URL 的 TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.61. .spec.loki.manual.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.62. .spec.loki.manual.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.63. .spec.loki.microservices

描述
对于 Microservices 模式的 Loki 配置。当使用微服务部署模式(https://grafana.com/docs/loki/latest/fundamentals/architecture/deployment-modes/#microservices-mode)安装 Loki 时使用这个选项。对于其他模式,它会被忽略。
类型
object
Expand
属性类型描述

ingesterUrl

string

ingesterUrl 是现有 Loki ingester 服务的地址,用于将流推送到。

querierUrl

string

querierUrl 指定 Loki querier 服务的地址。

tenantID

string

tenantID 是 Loki X-Scope-OrgID 标头,用于标识每个请求的租户。

tls

object

Loki URL 的 TLS 客户端配置。

17.1.64. .spec.loki.microservices.tls

描述
Loki URL 的 TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.65. .spec.loki.microservices.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.66. .spec.loki.microservices.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.67. .spec.loki.monolithic

描述
Monolithic 模式的 Loki 配置。当使用单体部署模式 (https://grafana.com/docs/loki/latest/fundamentals/architecture/deployment-modes/#monolithic-mode) 安装 Loki 时使用这个选项。对于其他模式,它会被忽略。
类型
object
Expand
属性类型描述

installDemoLoki

布尔值

installDemoLoki 设置为 true 以自动创建 Loki 部署、服务和存储。这可用于开发和演示目的。不要在生产环境中使用它。[Unsupported HEKETI]。

tenantID

string

tenantID 是 Loki X-Scope-OrgID 标头,用于标识每个请求的租户。

tls

object

Loki URL 的 TLS 客户端配置。

url

string

url 是现有 Loki 服务的唯一地址,它同时指向 ingester 和 querier。

17.1.68. .spec.loki.monolithic.tls

描述
Loki URL 的 TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.69. .spec.loki.monolithic.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.70. .spec.loki.monolithic.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.71. .spec.networkPolicy

描述
NetworkPolicy 为 Network Observability 组件隔离定义网络策略设置。
类型
object
Expand
属性类型描述

additionalNamespaces

数组(字符串)

additionalNamespaces 包含允许连接到 Network Observability 命名空间的额外命名空间。它为网络策略配置提供了灵活性,但如果您需要更为具体的配置,您可以禁用它并安装自己的配置。

enable

布尔值

在 Network Observability (main 和 privileged)使用的命名空间中部署网络策略。这些网络策略可以更好地隔离 Network Observability 组件,以防止出现不必要的连接以及它们。当与 OVNKubernetes 一起使用时,这个选项会被默认启用,否则禁用它(它没有使用其他 CNI 测试)。禁用后,您可以为 Network Observability 组件手动创建网络策略。

17.1.72. .spec.processor

描述
processor 定义从代理接收流的组件设置,增强它们,生成指标,并将它们转发到 Loki 持久层和/或任何可用的导出器。
类型
object
Expand
属性类型描述

addZone

布尔值

addZone 通过为源和目标区域标记流来允许可用性区域感知。此功能要求在节点上设置 "topology.kubernetes.io/zone" 标签。

advanced

object

advanced 允许设置流处理器的内部配置。本节主要用于调试和精细的性能优化,如 GOGCGOMAXPROCS 环境变量。在设置这些值时,您需要自己考虑相关的风险。

clusterName

string

clusterName 是要出现在流数据中的集群名称。这在多集群上下文中很有用。使用 OpenShift Container Platform 时,留空,使其自动决定。

consumerReplicas

整数

consumerReplicas 定义为 flowlogs-pipeline 启动的副本数,默认为 3。当 spec.deploymentModelDirectspec.processor.unmanagedReplicastrue 时,会忽略此设置。

deduper

object

deduper 允许您对识别为重复项进行抽样或丢弃的流程,以便节省资源使用量。不支持 *。

过滤器

数组

通过 filters,您可以定义自定义过滤来限制生成的流的数量。和 eBPF Agent 过滤(在 spec.agent.ebpf.flowFilter中)相比,这些过滤提供了更大的灵活性,例如允许根据 Kubernetes 命名空间过滤,但性能会降低。不支持 *。

imagePullPolicy

string

imagePullPolicy 是上面定义的镜像的 Kubernetes pull 策略

kafkaConsumerAutoscaler

object

kafkaConsumerAutoscaler [deprecated HEKETI] 是 Pod 横向自动扩展的 spec,用于为 flowlogs-pipeline-transformer 设置,它使用 Kafka 信息。当 Kafka 被禁用时,会忽略此设置。弃用通知:受管自动扩展将在以后的版本中删除。您可以配置一个选择的自动扩展器,并将 spec.processor.unmanagedReplicas 设置为 true。请参阅 HorizontalPodAutoscaler 文档(autoscaling/v2)。

kafkaConsumerBatchSize

整数

kafkaConsumerBatchSize 表示代理消费者接受的最大批处理大小(以字节为单位)。如果不使用 Kafka,则忽略。默认:10MB。

kafkaConsumerQueueCapacity

整数

kafkaConsumerQueueCapacity 定义 Kafka 消费者客户端中使用的内部消息队列的容量。如果不使用 Kafka,则忽略。

kafkaConsumerReplicas

整数

kafkaConsumerReplicas [deprecated nature] 定义为 flowlogs-pipeline-transformer 启动的副本(pod)数,它使用 Kafka 信息。当 Kafka 被禁用时,会忽略此设置。弃用通知:改为使用 spec.processor.consumerReplicas

logLevel

string

处理器运行时的 logLevel

logTypes

string

logTypes 定义要生成的记录类型。可能的值有:

- Flows导出常规网络流。这是默认的。

- Conversations 为开始的对话、结束的对话以及定期的"tick"更新生成事件

- EndedConversations 只生成结束的对话事件

- All 生成网络流和所有对话事件不建议使用它,因为会对资源占用有影响。

metrics

object

Metrics 定义有关指标的处理器配置

multiClusterDeployment

布尔值

multiClusterDeployment 设置为 true 以启用多集群功能。这会为流数据添加 clusterName 标签

resources

object

resources 是此容器所需的计算资源。如需更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

slicesConfig

object

全局配置管理 FlowCollectorSlices 自定义资源。

subnetLabels

object

subnetLabels 允许在子网和 IP 上定义自定义标签,或启用 OpenShift Container Platform 中识别子网的自动标记,用于标识集群外部流量。当子网与流的源或目标 IP 匹配时,会添加一个对应的字段:SrcSubnetLabelDstSubnetLabel

unmanagedReplicas

布尔值

如果 unmanagedReplicastrue,Operator 将无法协调 consumerReplicas。这在使用 pod 自动缩放器时很有用。

17.1.73. .spec.processor.advanced

描述
advanced 允许设置流处理器的内部配置。本节主要用于调试和精细的性能优化,如 GOGCGOMAXPROCS 环境变量。在设置这些值时,您需要自己考虑相关的风险。
类型
object
Expand
属性类型描述

conversationEndTimeout

string

conversationEndTimeout 是收到网络流后等待的时间,请考虑对话结束的时间。为 TCP 流收集 FIN 数据包时会忽略此延迟(请参阅 conversationTerminatingTimeout)。

conversationHeartbeatInterval

string

conversationHeartbeatInterval 是对话的 "tick" 事件间的等待时间

conversationTerminatingTimeout

string

conversationTerminatingTimeout 是从检测到的 FIN 标志到对话结束间的等待时间。只适用于 TCP 流。

dropUnusedFields

布尔值

dropUnusedFields [已弃用 *] 此设置不再使用。

enableKubeProbes

布尔值

enableKubeProbes 是一个用于启用或禁用 Kubernetes 存活度和就绪度探测的标志

env

对象(字符串)

env 允许将自定义环境变量传递给底层组件。对于传递一些非常严格的性能调整选项(如 GOGCGOMAXPROCS )非常有用,它们不应作为 FlowCollector 描述符的一部分公开,因为它们仅在边缘调试或支持场景中有用。

healthPort

整数

healthPort 是 Pod 中的收集器 HTTP 端口,用于公开健康检查 API

port

整数

流收集器(主机端口)的端口。按照惯例,一些值会被禁止。它必须大于 1024,且不能是 4500、4789 和 6081。

profilePort

整数

profilePort 允许设置侦听此端口的 Go pprof profiler

scheduling

object

调度控制如何在节点上调度 pod。

secondaryNetworks

数组

定义要检查的二级网络,以进行资源识别。为确保一个正确的识别,索引值需要在集群中形成唯一标识符。如果多个资源使用相同的索引,则这些资源可能会错误地标记。

17.1.74. .spec.processor.advanced.scheduling

描述
调度控制如何在节点上调度 pod。
类型
object
Expand
属性类型描述

关联性

object

如果指定,pod 的调度限制。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling

nodeSelector

对象(字符串)

nodeSelector 只允许将 pod 调度到具有每个指定标签的节点上。有关文档,请参阅 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

priorityClassName

string

如果指定,指示 pod 的优先级。有关文档,请参阅 https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#how-to-use-priority-and-preemption。如果没有指定,则使用默认优先级,如果没有默认值,则使用零。

容限(tolerations)

数组

tolerations 是一个容限 (toleration) 列表,允许 pod 调度到具有匹配污点的节点。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling

17.1.75. .spec.processor.advanced.scheduling.affinity

描述
如果指定,pod 的调度限制。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling
类型
object

17.1.76. .spec.processor.advanced.scheduling.tolerations

描述
tolerations 是一个容限 (toleration) 列表,允许 pod 调度到具有匹配污点的节点。有关文档,请参阅 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling
类型
数组

17.1.77. .spec.processor.advanced.secondaryNetworks

描述
定义要检查的二级网络,以进行资源识别。为确保一个正确的识别,索引值需要在集群中形成唯一标识符。如果多个资源使用相同的索引,则这些资源可能会错误地标记。
类型
数组

17.1.78. .spec.processor.advanced.secondaryNetworks[]

描述
类型
object
必填
  • index
  • name
Expand
属性类型描述

index

数组(字符串)

index 是用于索引 pod 的字段列表。它们应该在集群中形成唯一的 Pod 标识符。可以是以下 :MAC, IP, Interface。'k8s.v1.cni.cncf.io/network-status' 注解中不存在的字段不能添加到索引中。

name

string

name 应该与 pod 注解 'k8s.v1.cni.cncf.io/network-status' 中的网络名称匹配。

17.1.79. .spec.processor.deduper

描述
deduper 允许您对识别为重复项进行抽样或丢弃的流程,以便节省资源使用量。不支持 *。
类型
object
Expand
属性类型描述

模式

string

设置 Processor de-duplication 模式。它在基于代理的 deduplication 之外,代理无法删除从不同节点报告的同一流。

- 使用 Drop 来丢弃被视为重复的每个流,允许保存更多资源使用量,但可能会丢失一些信息,如从对等或网络事件使用的网络接口。

- 使用 Sample 会随机保留一个被认为是重复的流中的一个流,在 50 (默认值)。这是丢弃所有重复和保持所有重复间的一个折中方案。这个抽样操作是基于代理的抽样的补充。如果 Agent 和 Processor 抽样值都是 50,则组合抽样为 1:2500。

- 使用 Disabled 关闭基于 Processor 的 de-duplication。

sampling

整数

当 deduper 模式Sample 时,sampling 是抽样间隔。例如,值 50 表示对 50 中的 1 个流进行抽样。

17.1.80. .spec.processor.filters

描述
通过 filters,您可以定义自定义过滤来限制生成的流的数量。和 eBPF Agent 过滤(在 spec.agent.ebpf.flowFilter中)相比,这些过滤提供了更大的灵活性,例如允许根据 Kubernetes 命名空间过滤,但性能会降低。不支持 *。
类型
数组

17.1.81. .spec.processor.filters[]

描述
FLPFilterSet 根据所有条件为基于 FLP 的过滤定义所需的配置。
类型
object
Expand
属性类型描述

allOf

数组

filters 是一个匹配列表,需要满足该列表中的所有条件才能删除流。

outputTarget

string

如果指定,这些过滤只针对一个单个输出:LokiMetricsExporters。默认情况下,是针对所有输出。

sampling

整数

sampling 是应用于此过滤器的可选抽样间隔。例如,值 50 表示,50 个中的 1 个匹配流被抽样。

17.1.82. .spec.processor.kafkaConsumerAutoscaler

描述
kafkaConsumerAutoscaler [deprecated HEKETI] 是 Pod 横向自动扩展的 spec,用于为 flowlogs-pipeline-transformer 设置,它使用 Kafka 信息。当 Kafka 被禁用时,会忽略此设置。弃用通知:受管自动扩展将在以后的版本中删除。您可以配置一个选择的自动扩展器,并将 spec.processor.unmanagedReplicas 设置为 true。请参阅 HorizontalPodAutoscaler 文档(autoscaling/v2)。
类型
object

17.1.83. .spec.processor.metrics

描述
Metrics 定义有关指标的处理器配置
类型
object
Expand
属性类型描述

disableAlerts

数组(字符串)

disableAlerts 是应该从默认警报集合禁用的警报组列表。可能的值有: NetObservNoFlows,NetObservLokiError,PacketDropsByKernel,PacketDropsByDevice,IPsecErrors,NetpolDenied,LatencyHighTrend,DNSErrors,DNSNxDomain,ExternalEgressHighTrend,ExternalIngressHighTrend,Ingress5xxErrors,IngressHTTPLatencyTrend.有关警报的更多信息: https://github.com/netobserv/network-observability-operator/blob/main/docs/HealthRules.md

healthRules

数组

healthRules 是要为 Prometheus 创建健康规则的列表,按模板和变体进行组织。每个健康规则都可以配置为根据 mode 字段生成警报或记录规则。有关健康规则的更多信息: https://github.com/netobserv/network-observability-operator/blob/main/docs/HealthRules.md

includeList

数组(字符串)

includeList 是一个指标名称列表,用于指定要生成的名称。名称与 Prometheus 中没有前缀的名称对应。例如,namespace_egress_packets_total 在 Prometheus 中显示为 netobserv_namespace_egress_packets_total。请注意,您添加的指标越大,对 Prometheus 工作负载资源的影响更大。默认启用的指标是:namespace_flows_total, node_ingress_bytes_total, node_egress_bytes_total, workload_ingress_bytes_total, workload_egress_bytes_total, namespace_drop_packets_total (当启用了 PacketDrop 功能), namespace_rtt_seconds (当启用了 FlowRTT 功能), namespace_dns_latency_seconds (当启用了 DNSTracking 功能), namespace_network_policy_events_total (当启用了 NetworkEvents 功能)。如需更多信息,包含可用指标的完整列表: https://github.com/netobserv/network-observability-operator/blob/main/docs/Metrics.md

server

object

Prometheus scraper 的指标服务器端点配置

17.1.84. .spec.processor.metrics.healthRules

描述
healthRules 是要为 Prometheus 创建健康规则的列表,按模板和变体进行组织。每个健康规则都可以配置为根据 mode 字段生成警报或记录规则。有关健康规则的更多信息: https://github.com/netobserv/network-observability-operator/blob/main/docs/HealthRules.md
类型
数组

17.1.85. .spec.processor.metrics.healthRules[]

描述
类型
object
必填
  • 模板
  • 变体
Expand
属性类型描述

模式

string

mode 定义是否应生成此健康规则作为警报或记录规则。可能的值有: Alert (默认)、Recording。记录规则违反情况可在 Network Health 仪表板中看到,而不生成任何 Prometheus 警报。这为 SRE 和集群管理员提供了获取 Health 信息的替代方法,它们可能会发现很多新的警报。

模板

string

健康规则模板名称。可能的值有: PacketDropsByKernel,PacketDropsByDevice,IPsecErrors,NetpolDenied,LatencyHighTrend,DNSErrors,DNSNxDomain,ExternalEgressHighTrend,ExternalIngressHighTrend,Ingress5xxErrors,Ingress5LatencyTrend.注: NetObservNoFlowsNetObservLokiError 是仅警报的,不能用作健康规则。有关健康规则的更多信息: https://github.com/netobserv/network-observability-operator/blob/main/docs/HealthRules.md

变体

数组

此模板的变体列表

17.1.86. .spec.processor.metrics.healthRules[].variants

描述
此模板的变体列表
类型
数组

17.1.87. .spec.processor.metrics.healthRules[].variants[]

描述
类型
object
必填
  • 阈值
Expand
属性类型描述

groupBy

string

可选分组条件,可能的值有: NodeNamespaceWorkloads

lowVolumeThreshold

string

低卷阈值可以忽略流量太低的指标,从而提高信号到noise。它以绝对率(每秒的字节或每秒数据包,具体取决于上下文)提供。提供后,它必须显示为浮点数。

模式

string

模式覆盖此特定变体的健康状况规则模式。如果没有指定,则继承父健康规则的模式。可能的值有: Alert,Recording

阈值

object

每个严重性健康规则的阈值。它们表示为触发警报的错误百分比。它们必须取为浮点值。警报和记录模式都需要

trendDuration

string

对于趋势健康规则,基准比较的持续时间间隔。例如,"2h"表示与 2 小时的平均比较。默认值为 2h。

trendOffset

string

对于趋势健康规则,基准比较的时间偏移量。例如,"1d"意味着与 yesterday 进行比较。默认值为 1d。

描述
每个严重性健康规则的阈值。它们表示为触发警报的错误百分比。它们必须取为浮点值。警报和记录模式都需要
类型
object
Expand
属性类型描述

critical

string

严重性级别为 critical 的阈值。留空,不生成关键警报。

info

string

严重性信息 阈值.留空,以不生成 Info 警报。

warning

string

严重性 警告 的阈值。留空,以不生成 Warning 警报。

17.1.89. .spec.processor.metrics.server

描述
Prometheus scraper 的指标服务器端点配置
类型
object
Expand
属性类型描述

port

整数

指标服务器 HTTP 端口。

tls

object

TLS 配置。

17.1.90. .spec.processor.metrics.server.tls

描述
TLS 配置。
类型
object
必填
  • type
Expand
属性类型描述

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过提供的证书的客户端侧验证。如果设置为 true,则忽略 providedCaFile 字段。

provided

object

type 设置为 Provided 时的 TLS 配置。

providedCaFile

object

当将 type 设置为 Provided 时,对 CA 文件的引用。

type

string

选择 TLS 配置类型:

- Disabled (默认)没有为端点配置 TLS。- Provided 手动提供证书文件和密钥文件。不支持 *. - Auto 使用注解的 OpenShift Container Platform 自动生成证书。

17.1.91. .spec.processor.metrics.server.tls.provided

描述
type 设置为 Provided 时的 TLS 配置。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.92. .spec.processor.metrics.server.tls.providedCaFile

描述
当将 type 设置为 Provided 时,对 CA 文件的引用。
类型
object
Expand
属性类型描述

file

string

配置映射或 secret 中的文件名。

name

string

包含该文件的配置映射或 secret 的名称。

namespace

string

包含该文件的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

文件引用的类型:configmapsecret

17.1.93. .spec.processor.resources

描述
resources 是此容器所需的计算资源。如需更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
类型
object
Expand
属性类型描述

limits

integer-or-string

限制描述了允许的最大计算资源量。更多信息: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

requests

integer-or-string

Requests 描述了所需的最少计算资源。如果容器省略了 Requests,则默认为 Limits (如果明确指定),否则默认为实现定义的值。请求不能超过限值。更多信息: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

17.1.94. .spec.processor.slicesConfig

描述
全局配置管理 FlowCollectorSlices 自定义资源。
类型
object
必填
  • enable
Expand
属性类型描述

collectionMode

string

collectionMode 决定 FlowCollectorSlice 自定义资源如何影响流集合进程:

- 当设置为 AlwaysCollect 时,所有流都会被收集,无论 FlowCollectorSlice 是否存在。

- 当设置为 AllowList 时,只会收集与存在 FlowCollectorSlice 资源或通过全局 namespacesAllowList 配置的命名空间相关的流。

enable

布尔值

启用决定是否启用 FlowCollectorSlice 功能。如果没有,则只忽略所有类型 FlowCollectorSlice 的资源。

namespacesAllowList

数组(字符串)

namespacesAllowList 是始终收集流的命名空间列表,无论这些命名空间中存在 FlowCollectorSlice。以斜杠括起的条目(如 /openshift- aws/ )与正则表达式匹配。如果 collectionModeAllowList 不同,则忽略此设置。

17.1.95. .spec.processor.subnetLabels

描述
subnetLabels 允许在子网和 IP 上定义自定义标签,或启用 OpenShift Container Platform 中识别子网的自动标记,用于标识集群外部流量。当子网与流的源或目标 IP 匹配时,会添加一个对应的字段:SrcSubnetLabelDstSubnetLabel
类型
object
Expand
属性类型描述

customLabels

数组

customLabels 允许您自定义子网和 IP 标签,如识别集群外部工作负载或 web 服务。外部子网必须使用前缀 EXT: 或根本未标记,才能使用提供的默认快速过滤器和一些指标示例。

如果 openShiftAutoDetect 被禁用,或者您没有使用 OpenShift Container Platform,建议为集群子网手动配置标签,以区分外部流量。

如果启用了 openShiftAutoDetectcustomLabels 会在重叠时覆盖检测到的子网。

openShiftAutoDetect

布尔值

openShiftAutoDetect 允许当设置为 true 时,根据 OpenShift Container Platform 安装配置和 Cluster Network Operator 配置来自动检测机器、Pod 和服务子网。间接来说,这是准确检测外部流量的方法:针对这些子网没有标记的流是集群外部的。在 OpenShift Container Platform 中默认启用。

17.1.96. .spec.processor.subnetLabels.customLabels

描述

customLabels 允许您自定义子网和 IP 标签,如识别集群外部工作负载或 web 服务。外部子网必须使用前缀 EXT: 或根本未标记,才能使用提供的默认快速过滤器和一些指标示例。

如果 openShiftAutoDetect 被禁用,或者您没有使用 OpenShift Container Platform,建议为集群子网手动配置标签,以区分外部流量。

如果启用了 openShiftAutoDetectcustomLabels 会在重叠时覆盖检测到的子网。

类型
数组

17.1.97. .spec.processor.subnetLabels.customLabels[]

描述
SubnetLabel 允许标记子网和 IP,如标识集群外部工作负载或 Web 服务。
类型
object
必填
  • cidrs
  • name
Expand
属性类型描述

cidrs

数组(字符串)

CIDR 列表,如 ["1.2.3.4/32"]

name

string

标签名称,用于标记匹配流。外部子网必须使用前缀 EXT: 或根本未标记,才能使用提供的默认快速过滤器和一些指标示例。

17.1.98. .spec.prometheus

描述
prometheus 定义 Prometheus 设置,如用于从控制台插件获取指标的 querier 配置。
类型
object
Expand
属性类型描述

querier

object

Prometheus 查询配置,如控制台插件中使用的客户端设置。

17.1.99. .spec.prometheus.querier

描述
Prometheus 查询配置,如控制台插件中使用的客户端设置。
类型
object
必填
  • 模式
Expand
属性类型描述

enable

布尔值

enabletrue 时,Console 插件会查询 Prometheus 中的流指标,而不是 Loki。它默认是 enbaled :将其设置为 false 来禁用此功能。Console 插件可以使用 Loki 或 Prometheus(或两者)作为指标的数据源(请参阅 spec.loki)。并非所有查询都可从 Loki 转换为 Prometheus。因此,如果 Loki 被禁用,插件的一些功能也会被禁用,如获取每个 pod 的信息或查看原始流。如果启用了 Prometheus 和 Loki,Prometheus 会优先使用,Loki 作为 Prometheus 无法处理的查询的回退系统。如果两者都被禁用,则不会部署 Console 插件。

manual

object

用于 Manual 模式的 Prometheus 配置。

模式

string

模式 必须根据存储 Network Observability 指标的 Prometheus 安装类型来设置:

- 使用 Auto 尝试自动配置。在 OpenShift Container Platform 中,它使用 OpenShift Container Platform Cluster Monitoring 中的 Thanos querier。

- 手动设置使用 Manual

timeout

string

timeout 是控制台插件查询 Prometheus 的读取超时。超时值为零表示没有超时。

17.1.100. .spec.prometheus.querier.manual

描述
用于 Manual 模式的 Prometheus 配置。
类型
object
Expand
属性类型描述

alertManager

object

Alertmanager 配置。这在控制台中用于查询静默的警报,以显示健康信息。在 OpenShift Container Platform 中使用时,可以使用 Console API 替代它。[Unsupported unicode]。

forwardUserToken

布尔值

设置 true 以将查询中的登录用户令牌转发到 Prometheus

tls

object

Prometheus URL 的 TLS 客户端配置。

url

string

url 是现有 Prometheus 服务的地址,用于查询指标。

17.1.101. .spec.prometheus.querier.manual.alertManager

描述
Alertmanager 配置。这在控制台中用于查询静默的警报,以显示健康信息。在 OpenShift Container Platform 中使用时,可以使用 Console API 替代它。[Unsupported unicode]。
类型
object
Expand
属性类型描述

tls

object

Prometheus AlertManager URL 的 TLS 客户端配置。

url

string

URL 是现有 Prometheus AlertManager 服务的地址,用于查询警报。

17.1.102. .spec.prometheus.querier.manual.alertManager.tls

描述
Prometheus AlertManager URL 的 TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.105. .spec.prometheus.querier.manual.tls

描述
Prometheus URL 的 TLS 客户端配置。
类型
object
Expand
属性类型描述

caCert

object

caCert 定义证书颁发机构的证书引用。

enable

布尔值

启用 TLS

insecureSkipVerify

布尔值

insecureSkipVerify 允许跳过服务器证书的客户端验证。如果设置为 true,则忽略 caCert 字段。

userCert

object

userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。

17.1.106. .spec.prometheus.querier.manual.tls.caCert

描述
caCert 定义证书颁发机构的证书引用。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

17.1.107. .spec.prometheus.querier.manual.tls.userCert

描述
userCert 定义用户证书引用,用于 mTLS。使用单向 TLS 时,您可以忽略此属性。
类型
object
Expand
属性类型描述

certFile

string

certFile 定义配置映射或 secret 中证书文件名的路径。

certKey

string

certKey 定义配置映射 / Secret 中证书私钥文件名的路径。当不需要键时会省略。

name

string

包含证书的配置映射或 Secret 的名称。

namespace

string

包含证书的配置映射或 secret 的命名空间。如果省略,则默认为使用与部署 Network Observability 相同的命名空间。如果命名空间不同,则复制配置映射或 secret,以便可以根据需要挂载它。

type

string

证书引用的类型:configmapsecret

第 18 章 FlowMetric 配置参数

FlowMetric API 用于从收集的网络流日志生成自定义可观察性指标。

18.1. FlowMetric [flows.netobserv.io/v1alpha1]

描述
FlowMetric 是允许从收集的流日志创建自定义指标的 API。
类型
object
Expand
属性类型描述

apiVersion

string

APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

string

kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

object

标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

spec

object

FlowMetricSpec 定义所需的 FlowMetric。提供的 API 允许您根据您的需要自定义这些指标。

在添加新指标或修改现有标签时,您必须仔细监控 Prometheus 工作负载的内存用量,因为这可能会产生重大影响。Cf https://rhobs-handbook.netlify.app/products/openshiftmonitoring/telemetry.md/#what-is-the-cardinality-of-a-metric

要检查所有 Network Observability 指标的基数(cardinality),promql: count({name=~"netobserv.*"}) by (name)

18.1.1. .metadata

描述
标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
类型
object

18.1.2. .spec

描述

FlowMetricSpec 定义所需的 FlowMetric。提供的 API 允许您根据您的需要自定义这些指标。

在添加新指标或修改现有标签时,您必须仔细监控 Prometheus 工作负载的内存用量,因为这可能会产生重大影响。Cf https://rhobs-handbook.netlify.app/products/openshiftmonitoring/telemetry.md/#what-is-the-cardinality-of-a-metric

要检查所有 Network Observability 指标的基数(cardinality),promql: count({name=~"netobserv.*"}) by (name)

类型
object
必填
  • type
Expand
属性类型描述

bucket

数组(字符串)

type 为 "Histogram" 时使用的存储桶列表列表必须显示为浮点数。如果没有设置,使用 Prometheus 默认存储桶。

charts

数组

管理员视图中的 OpenShift Container Platform 控制台图表配置 Dashboards 菜单。

direction

string

过滤入口、出口或任何方向流。当设置为 Ingress 时,它等同于在 FlowDirection 中添加正则表达式过滤:0|2。当设置为 Egress 时,它等同于在 FlowDirection 中添加正则表达式过滤:1|2

divider

string

当非零时,缩放因素 (divider) 的值。指标值 = Flow value / Divider。

过滤器

数组

filters 是用于限制考虑哪些流的字段和值列表。有关可用字段列表,请参阅相关文档 :https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/network_observability/json-flows-format-reference。

flatten

数组(字符串)

flatten 是必须扁平化的数组类型字段的列表,如 Interfaces 或 NetworkEvents。flattened 字段在那个字段中为每个项目生成一个指标。例如,当在字节计数器上扁平化 Interfaces 时,具有接口 [br-ex, ens5] 的流会增加 br-ex 的计数器,另一个用于 ens5

帮助

string

指标的帮助文本,如 Prometheus 所示。

labels

数组(字符串)

labels 是应当用作 Prometheus 标签的字段列表,也称为维度(例如:Src K8S_Namespace)。从选择标签时,此指标的粒度级别以及查询时可用的聚合结果。它需要小心执行,因为它会影响指标基数 (cf https://rhobs-handbook.netlify.app/products/openshiftmonitoring/telemetry.md/#what-is-the-cardinality-of-a-metric)。通常,避免设置非常高的基数标签,如 IP 或 MAC 地址。"SrcK8S_OwnerName" 或 "DstK8S_OwnerName" 应优先于 "SrcK8S_Name" 或 "DstK8S_Name"。有关可用字段列表,请参阅相关文档 :https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/network_observability/json-flows-format-reference。

metricName

string

指标的名称。在 Prometheus 中,它会自动带有 "netobserv_" 前缀。保留空,以根据 FlowMetric 资源名称生成名称。

remap

对象(字符串)

设置 remap 属性,为生成的指标标签使用不同于流字段的名称。使用原始流字段作为键,并将所需的标签名称作为值。

type

string

指标类型: "Counter", "Histogram" 或 "Gauge"。使用 "Counter",对随时间增加的任何值以及您可以计算速率(如 Bytes 或 Packets)的任何值。对于需要独立抽样的任何值(如延迟),使用 "Histogram"。对于其它在一段时间后不需要非常准确的值使用 "Gauge"(它仅在 Prometheus 获取指标时每 N 秒进行一次抽样)。

valueField

string

valueField 是流字段,它必须用作此指标的值(例如: Bytes)。此字段必须是数字值。如果保留为空,计算流数,而不是每个流的特定值。有关可用字段列表,请参阅相关文档 :https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/network_observability/json-flows-format-reference。

18.1.3. .spec.charts

描述
管理员视图中的 OpenShift Container Platform 控制台图表配置 Dashboards 菜单。
类型
数组

18.1.4. .spec.charts[]

描述
配置与一个指标关联的图表/仪表板的生成
类型
object
必填
  • dashboardName
  • queries
  • title
  • type
Expand
属性类型描述

dashboardName

string

包含仪表板的名称。如果此名称没有引用现有仪表板,则会创建一个新仪表板。

queries

数组

要在此图表中显示的查询列表。如果 typeSingleStat,并提供了多个查询,则在多个面板中会自动扩展此图表(每个查询一个)。

sectionName

string

包含仪表板部分的名称。如果此名称没有引用现有部分,则会创建一个新部分。如果省略 sectionName 或为空,则图表被放置在全局 top 部分中。

title

string

图表的标题。

type

string

图表的类型。

unit

string

此图表的单元。目前只支持几个单元。如果保留为空,则使用通用数字。

18.1.5. .spec.charts[].queries

描述
要在此图表中显示的查询列表。如果 typeSingleStat,并提供了多个查询,则在多个面板中会自动扩展此图表(每个查询一个)。
类型
数组

18.1.6. .spec.charts[].queries[]

描述
配置 PromQL 查询
类型
object
必填
  • 图例
  • promQL
  • top
Expand
属性类型描述

图例

string

适用于此图表中每个时间序列的查询图例。显示多个时间序列时,您应该设置一个可区分每个时间序列的图例。它可以使用以下格式:{{ Label }}。例如,根据每个标签的 promQL 组时间序列,如 sum(rate($METRIC[2m])) by (Label1, Label2), you might write as the legend: Label1={{ Label1 }}, Label2={{ Label2 }}

promQL

string

要针对 Prometheus 运行 promQL 查询。如果图表 typeSingleStat,则此查询应只返回单个时间序列。对于其他类型,会显示前 7 个。您可以使用 $METRIC 来引用此资源中定义的指标。例如:sum(rate($METRIC[2m]))。如需了解更多有关 promQL 的信息,请参阅 Prometheus 文档 :https://prometheus.io/docs/prometheus/latest/querying/basics/

top

整数

每个时间戳显示的最大 N 系列。不适用于 SingleStat 图表类型。

18.1.7. .spec.filters

描述
filters 是用于限制考虑哪些流的字段和值列表。有关可用字段列表,请参阅相关文档 :https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/network_observability/json-flows-format-reference。
类型
数组

18.1.8. .spec.filters[]

描述
类型
object
必填
  • field
  • matchType
Expand
属性类型描述

field

string

要过滤的字段的名称(例如: SrcK8S_Namespace)。

matchType

string

要应用的匹配类型

value

string

要过滤的值。当 matchTypeEqualNotEqual 时,您可以使用带有 $(SomeField) 的字段注入来引用流的任何其他字段。

第 19 章 网络流格式参考

查看网络流格式的规格,它在内部使用,并将流数据导出到 Kafka。

19.1. 网络流格式参考

这是网络流格式的规格。在配置了 Kafka 导出器时,使用这种格式,用于 Prometheus 指标标签,以及 Loki 存储的内部。

"Filter ID"列显示定义 Quick Filters 时使用的相关名称(请参阅 FlowCollector 规格中的 spec.consolePlugin.quickFilters )。

当直接查询 Loki 时,"Loki label"列很有用:需要使用 流选择器 来选择标签字段。

"Cardinality" 列提供有关在此字段用作带有 FlowMetrics API 的 Prometheus 标签时代表的指标卡inality 的信息。有关使用此 API 的更多信息,请参阅 FlowMetrics 文档。

Expand
Name类型描述过滤 IDLoki 标签基准OpenTelemetry

Bytes

number

字节数

不适用

avoid

bytes

DnsErrno

number

从 DNS tracker ebpf hook 功能返回的错误数

dns_errno

fine

dns.errno

DnsFlags

number

DNS 记录的 DNS 标记

不适用

fine

dns.flags

DnsFlagsResponseCode

string

解析的 DNS 标头 RCODE 名称

dns_flag_response_code

fine

dns.responsecode

DnsId

number

DNS 记录 ID

dns_id

avoid

dns.id

DnsLatencyMs

number

DNS 请求和响应之间的时间(以毫秒为单位)

dns_latency

avoid

dns.latency

DnsName

string

DNS 查询名称

dns_name

careful

不适用

Dscp

number

差异化服务代码点 (DSCP) 值

dscp

fine

dscp

DstAddr

string

目标 IP 地址 (ipv4 或 ipv6)

dst_address

avoid

destination.address

DstK8S_HostIP

string

目的地节点 IP

dst_host_address

fine

destination.k8s.host.address

DstK8S_HostName

string

目标节点名称

dst_host_name

fine

destination.k8s.host.name

DstK8S_Name

string

目标 Kubernetes 对象的名称,如 Pod 名称、服务名称或节点名称。

dst_name

careful

destination.k8s.name

DstK8S_Namespace

string

目标命名空间

dst_namespace

fine

destination.k8s.namespace.name

DstK8S_NetworkName

string

目标网络名称

dst_network

fine

不适用

DstK8S_OwnerName

string

目标所有者的名称,如 Deployment 名称、StatefulSet 名称等。

dst_owner_name

fine

destination.k8s.owner.name

DstK8S_OwnerType

string

目标所有者的类型,如 Deployment、StatefulSet 等。

dst_kind

fine

destination.k8s.owner.kind

DstK8S_Type

string

目标 Kubernetes 对象的类型,如 Pod、Service 或 Node。

dst_kind

fine

destination.k8s.kind

DstK8S_Zone

string

目标可用区

dst_zone

fine

destination.zone

DstMac

string

目标 MAC 地址

dst_mac

avoid

destination.mac

DstPort

number

目的地端口

dst_port

careful

destination.port

DstSubnetLabel

string

目的地子网标签

dst_subnet_label

fine

destination.subnet.label

标记

string[]

根据 RFC-9293 在流中组成的 TCP 标记列表,额外自定义标记代表以下每个数据包组合:
- SYN_ACK
- FIN_ACK
- RST_ACK

tcp_flags

careful

tcp.flags

FlowDirection

number

来自节点观察点的流解释方向。可以是:
- 0: Ingress (来自节点观察点的流量)
- 1: Egress (从节点观察到流量,来自节点观察点)
- 2: Inner (具有相同源和目标节点)

node_direction

fine

host.direction

IPSecStatus

string

IPsec 加密的状态(egress,由内核 xfrm_output 功能提供)或解密(ingress,通过 xfrm_input)

ipsec_status

fine

不适用

IcmpCode

number

ICMP 代码

icmp_code

fine

icmp.code

IcmpType

number

ICMP 类型

icmp_type

fine

icmp.type

IfDirections

number[]

来自网络接口观察点的流方向。可以是:
- 0: Ingress (接口传入的流量)
- 1: Egress (接口传出流量)

ifdirections

fine

interface.directions

接口

string[]

网络接口

interfaces

careful

interface.names

K8S_ClusterName

string

集群名称或标识符

cluster_name

fine

k8s.cluster.name

K8S_FlowLayer

string

流层: 'app' 或 'infra'

flow_layer

fine

k8s.layer

NetworkEvents

object[]

网络事件,如网络策略操作,包括嵌套字段:
- 功能(如用于网络策略的"acl")
- 类型(如 "AdminNetworkPolicy")
- 命名空间(事件适用的命名空间,如果有命名空间)
- 触发事件的资源的名称。
- Action (如 "allow" 或 "drop")
- Direction (Ingress 或 Egress)

network_events

avoid

不适用

Packets

number

数据包数

不适用

avoid

packets

PktDropBytes

number

内核丢弃的字节数

不适用

avoid

drops.bytes

PktDropLatestDropCause

string

最新丢弃原因

pkt_drop_cause

fine

drops.latestcause

PktDropLatestFlags

number

最后丢弃的数据包上的 TCP 标志

不适用

fine

drops.latestflags

PktDropLatestState

string

最后丢弃的数据包上的 TCP 状态

pkt_drop_state

fine

drops.lateststate

PktDropPackets

number

内核丢弃的数据包数

不适用

avoid

drops.packets

Proto

number

L4 协议

protocol

fine

protocol

Sampling

number

用于此流的抽样间隔

不适用

fine

不适用

SrcAddr

string

源 IP 地址 (ipv4 或 ipv6)

src_address

avoid

source.address

SrcK8S_HostIP

string

源节点 IP

src_host_address

fine

source.k8s.host.address

SrcK8S_HostName

string

源节点名称

src_host_name

fine

source.k8s.host.name

SrcK8S_Name

string

源 Kubernetes 对象的名称,如 Pod 名称、服务名称或节点名称。

src_name

careful

source.k8s.name

SrcK8S_Namespace

string

源命名空间

src_namespace

fine

source.k8s.namespace.name

SrcK8S_NetworkName

string

源网络名称

src_network

fine

不适用

SrcK8S_OwnerName

string

源所有者的名称,如 Deployment 名称、StatefulSet 名称等。

src_owner_name

fine

source.k8s.owner.name

SrcK8S_OwnerType

string

源所有者的类型,如 Deployment、StatefulSet 等。

src_kind

fine

source.k8s.owner.kind

SrcK8S_Type

string

源 Kubernetes 对象的类型,如 Pod、Service 或 Node。

src_kind

fine

source.k8s.kind

SrcK8S_Zone

string

源可用区

src_zone

fine

source.zone

SrcMac

string

源 MAC 地址

src_mac

avoid

source.mac

SrcPort

number

源端口

src_port

careful

source.port

SrcSubnetLabel

string

源子网标签

src_subnet_label

fine

source.subnet.label

TimeFlowEndMs

number

此流的结束时间戳,以毫秒为单位

不适用

avoid

timeflowend

TimeFlowRttNs

number

TCP Smoothed Round Trip Time (SRTT),单位为纳秒

time_flow_rtt

avoid

tcp.rtt

TimeFlowStartMs

number

开始此流的时间戳,以毫秒为单位

不适用

avoid

timeflowstart

TimeReceived

number

由流被流收集器接收并处理时的时间戳,以秒为单位

不适用

avoid

timereceived

Udns

string[]

用户定义的网络列表

udns

careful

不适用

XlatDstAddr

string

数据包转换目的地地址

xlat_dst_address

avoid

不适用

XlatDstPort

number

数据包转换目的地端口

xlat_dst_port

careful

不适用

XlatSrcAddr

string

数据包转换源地址

xlat_src_address

avoid

不适用

XlatSrcPort

number

数据包转换源端口

xlat_src_port

careful

不适用

ZoneId

number

数据包转换区 ID

xlat_zone_id

avoid

不适用

_HashId

string

在对话跟踪中,对话标识符

id

avoid

不适用

_RecordType

string

记录类型:flowLog 用于常规流日志,或 newConnection,heartbeat,endConnection 用于对话跟踪

type

fine

不适用

第 20 章 Network Observability 故障排除

执行诊断操作,以排除与 Network Observability Operator 及其组件相关的常见问题。

20.1. 使用 must-gather 工具

使用 must-gather 工具来收集有关 Network Observability Operator 资源的诊断信息,包括 pod 日志和配置详情,以帮助对集群问题进行故障排除。

流程

  1. 进入到要存储 must-gather 数据的目录。
  2. 运行以下命令来收集集群范围的 must-gather 资源:

    $ oc adm must-gather
     --image-stream=openshift/must-gather \
     --image=quay.io/netobserv/must-gather

通过在 FlowCollector 资源和 console operator 配置中手动注册 console 插件,在 OpenShift Container Platform 控制台的 Observe 菜单中恢复缺少的网络流量菜单条目。

先决条件

  • 已安装 OpenShift Container Platform 版本 4.10 或更高版本。

流程

  1. 运行以下命令,检查 spec.consolePlugin.register 字段是否已设置为 true

    $ oc -n netobserv get flowcollector cluster -o yaml

    输出示例

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      consolePlugin:
        register: false

  2. 可选:通过手动编辑 Console Operator 配置来添加 netobserv-plugin 插件:

    $ oc edit console.operator.openshift.io cluster

    输出示例

    ...
    spec:
      plugins:
      - netobserv-plugin
    ...

  3. 可选:运行以下命令,将 spec.consolePlugin.register 字段设置为 true

    $ oc -n netobserv edit flowcollector cluster -o yaml

    输出示例

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      consolePlugin:
        register: true

  4. 运行以下命令,确保控制台 pod 的状态为 running

    $ oc get pods -n openshift-console -l app=console
  5. 运行以下命令重启控制台 pod:

    $ oc delete pods -n openshift-console -l app=console
  6. 清除浏览器缓存和历史记录。
  7. 运行以下命令,检查 Network Observability 插件 pod 的状态:

    $ oc get pods -n netobserv -l app=netobserv-plugin

    输出示例

    NAME                                READY   STATUS    RESTARTS   AGE
    netobserv-plugin-68c7bbb9bb-b69q6   1/1     Running   0          21s

  8. 运行以下命令,检查 Network Observability 插件 pod 的日志:

    $ oc logs -n netobserv -l app=netobserv-plugin

    输出示例

    time="2022-12-13T12:06:49Z" level=info msg="Starting netobserv-console-plugin [build version: , build date: 2022-10-21 15:15] at log level info" module=main
    time="2022-12-13T12:06:49Z" level=info msg="listening on https://:9001" module=server

解决 flow-pipeline 无法通过手动重启 flow-pipeline pod 来恢复流收集器和 Kafka 部署之间的连接的问题。

如果您首先使用 deploymentModel: KAFKA 部署了流收集器,然后部署 Kafka,则流收集器可能无法正确连接到 Kafka。手动重启 flow-pipeline pod,其中 Flowlogs-pipeline 不使用 Kafka 中的网络流。

流程

  1. 运行以下命令,删除 flow-pipeline pod 来重启它们:

    $ oc delete pods -n netobserv -l app=flowlogs-pipeline-transformer

20.4. 无法从 br-int 和 br-ex 接口查看网络流

通过删除 br-intbr-ex 等虚拟网桥设备的接口限制,确保 eBPF 代理可以附加到适当的第 3 层接口,从而解决缺失的网络流的问题。

br-exbr-int 是 OSI 第 2 层操作的虚拟网桥设备。eBPF 代理分别在 IP 和 TCP 级别(第 3 和 4 层)中工作。当网络流量由物理主机或虚拟 pod 接口处理时,您可以预期 eBPF 代理捕获通过 br-exbr-int 的网络流量。如果您限制 eBPF 代理网络接口只附加到 br-exbr-int,则不会看到任何网络流。

手动删除限制网络接口到 br-intbr-exinterfacesexcludeInterfaces 中的部分。

流程

  1. 删除 interfaces: [ 'br-int', 'br-ex' ] 字段。这允许代理从所有接口获取信息。或者,您可以指定 Layer-3 接口,例如 eth0。运行以下命令:

    $ oc edit -n netobserv flowcollector.yaml -o yaml

    输出示例

    apiVersion: flows.netobserv.io/v1alpha1
    kind: FlowCollector
    metadata:
      name: cluster
    spec:
      agent:
        type: EBPF
        ebpf:
          interfaces: [ 'br-int', 'br-ex' ] 
    1

    1
    指定网络接口。

通过增加 Subscription 对象中的内存限值来解决 Network Observability Operator 中的内存问题,以防止控制器管理器 pod 内存不足。

您可以通过编辑 Subscription 对象中的 spec.config.resources.limits.memory 规格来为 Network Observability Operator 增加内存限值。

流程

  1. 在 Web 控制台中,进入到 OperatorsInstalled Operators
  2. Network Observability,然后选择 Subscription
  3. Actions 菜单中,点 Edit Subscription

    1. 另外,您可以运行以下命令来使用 CLI 为 Subscription 对象打开 YAML 配置:

      $ oc edit subscription netobserv-operator -n openshift-netobserv-operator
  4. 编辑 Subscription 对象以添加 config.resources.limits.memory 规格,并将值设置为考虑您的内存要求。有关资源注意事项的更多信息,请参阅附加资源:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: netobserv-operator
      namespace: openshift-netobserv-operator
    spec:
      channel: stable
      config:
        resources:
          limits:
            memory: 800Mi     
    1
    
          requests:
            cpu: 100m
            memory: 100Mi
      installPlanApproval: Automatic
      name: netobserv-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: <network_observability_operator_latest_version> 
    2
    1
    例如,您可以将内存限值增加到 800Mi
    2
    这个值不应该被编辑,但请注意,它会根据 Operator 的最当前的版本进行更改。

20.6. 对 Loki 运行自定义查询

通过运行自定义 Loki 查询来排查网络流数据,以根据特定条件(如源命名空间)检索可用的标签或过滤日志。

有两种方法示例,您可以通过将 <api_token> 替换为您自己的 <api_token> 来根据您的需要进行调整。

注意

这些示例为 Network Observability Operator 和 Loki 部署使用 netobserv 命名空间。另外,示例假定 LokiStack 名为 loki。您可以通过调整示例(特别是 -n netobservloki-gateway URL)来使用不同的命名空间和命名。

先决条件

  • 已安装 Loki Operator 用于 Network Observability Operator。

流程

  1. 要获取所有可用标签,请运行以下命令:

    $ oc exec deployment/netobserv-plugin -n netobserv -- curl -G -s -H 'X-Scope-OrgID:network' -H 'Authorization: Bearer <api_token>' -k https://loki-gateway-http.netobserv.svc:8080/api/logs/v1/network/loki/api/v1/labels | jq
  2. 要从源命名空间 my-namespace 获取所有流,请运行以下命令:

    $ oc exec deployment/netobserv-plugin -n netobserv -- curl -G -s -H 'X-Scope-OrgID:network' -H 'Authorization: Bearer <api_token>' -k https://loki-gateway-http.netobserv.svc:8080/api/logs/v1/network/loki/api/v1/query --data-urlencode 'query={SrcK8S_Namespace="my-namespace"}' | jq

20.7. Loki ResourceExhausted 错误故障排除

通过调整 FlowCollector 资源中的 batchSize 或 Loki 配置中的最大消息大小设置来解决 Loki ResourceExhausted 错误,以确保流数据在内存限值内保留。

当 Network Observability 发送的网络流数据时,Loki 可能会返回一个 ResourceExhausted 错误,超过配置的最大消息大小。如果使用 Red Hat Loki Operator,则这个最大消息大小被配置为 100 MiB。

流程

  1. 进入到 OperatorsInstalled Operators,从 Project 下拉菜单中选择 All projects
  2. Provided APIs 列表中,选择 Network Observability Operator。
  3. Flow Collector,然后点 YAML view 选项卡。

    1. 如果使用 Loki Operator,请检查 spec.loki.batchSize 值没有超过 98 MiB。
    2. 如果您使用与 Red Hat Loki Operator 不同的 Loki 安装方法,如 Grafana Loki,请验证 grpc_server_max_recv_msg_size Grafana Loki 服务器设置 高于 FlowCollector 资源 spec.loki.batchSize 值。如果没有,您必须增加 grpc_server_max_recv_msg_size 值,或者减少 spec.loki.batchSize 值,使其小于限制。
  4. 如果您编辑 FlowCollector,点 Save

20.8. Loki 空 ring 错误

通过检查 pod 健康状况、清除旧的持久性卷声明或重启 pod 以恢复连接并确保正确存储并显示网络流,调查并解决 Loki "empty ring" 错误。

Loki "empty ring" 错误会导致流没有存储在 Loki 中,且不显示在 web 控制台中。这个错误可能会在各种情况下发生。还没有解决的一个临时解决方案。您可以采取一些操作来调查 Loki pod 中的日志,并验证 LokiStack 是否健康并就绪。

观察到此错误的一些情况如下:

  • 在卸载并在同一个命名空间中重新安装 LokiStack 后,旧的 PVC 不会被删除,这会导致这个错误。

    • Action :您可以尝试再次删除 LokiStack,删除 PVC,然后重新安装 LokiStack
  • 证书轮转后,这个错误可能会阻止与 flowlogs-pipelineconsole-plugin pod 的通信。

    • Action :您可以重启 pod 来恢复连接。

20.9. LokiStack 速率限制错误

解决 Loki 速率限制错误,并通过更新 LokiStack 资源来提高网络可观察性数据流的 ingestion 速率和突发限制来防止数据丢失。

放置在 Loki 租户上的速率限制可能会导致数据潜在的临时丢失,而 429 错误:Per stream rate limit exceeded (limit:xMB/sec) while attempting to ingest for stream。您可能会考虑设置了警报来通知您这个错误。如需更多信息,请参阅本节的附加资源中的"为 NetObserv 仪表板创建 Loki 速率限制警报"。

您可以使用 perStreamRateLimitperStreamRateLimitBurst 规格更新 LokiStack CRD,如以下步骤所示。

流程

  1. 进入到 OperatorsInstalled Operators,从 Project 下拉菜单查看 All projects
  2. 查找 Loki Operator,然后选择 LokiStack 选项卡。
  3. 使用 YAML 视图 创建或编辑现有 LokiStack 实例,以添加 perStreamRateLimitperStreamRateLimitBurst 规格:

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: loki
      namespace: netobserv
    spec:
      limits:
        global:
          ingestion:
            perStreamRateLimit: 6        
    1
    
            perStreamRateLimitBurst: 30  
    2
    
      tenants:
        mode: openshift-network
      managementState: Managed
    1
    perStreamRateLimit 的默认值为 3
    2
    perStreamRateLimitBurst 的默认值为 15
  4. 点击 Save

验证

更新 perStreamRateLimitperStreamRateLimitBurst 规格后,集群重启中的 pod,429 rate-limit 错误不再发生。

20.10. 运行大型查询会导致 Loki 错误

了解如何使用索引过滤器在运行大型查询时缓解 Loki 超时和请求错误,利用 Prometheus 获取长时间范围、创建自定义指标或调整 Loki 和 FlowCollector 性能设置。

当长时间运行大型查询时,可能会导致 Loki 错误,如 timeouttoo many outstanding requests。这个问题没有完全的修复,但有几种方法可以缓解它:

调整查询以添加索引过滤
使用 Loki 查询,您可以查询索引和非索引字段或标签。包含标签过滤的查询更好。例如,如果您查询一个特定 Pod,它不是 indexed 字段,您可以将其命名空间添加到查询中。索引字段列表可在 Loki label 列中的 "Network flow format reference" 中找到。
考虑查询 Prometheus 而不是 Loki
Prometheus 比 Loki 更适合在大型时间范围上查询。但是,使用 Prometheus 还是 Loki 取决于您的具体用例。例如,对 Prometheus 的查询比 Loki 快,大时间范围不会影响性能。但是,和 Loki 相比,Prometheus 指标中包括的流日志的数量较少。如果查询兼容,Network Observability OpenShift Web 控制台会自动优先选择 Prometheus over Loki,否则默认为 Loki。如果您的查询没有针对 Prometheus 运行,您可以更改一些过滤或聚合来切换。在 OpenShift Web 控制台中,您可以强制使用 Prometheus。当不兼容的查询失败时会显示错误消息,这可帮助您找出要更改哪个标签,以使查询兼容。例如,将过滤器或聚合从 ResourcePod 更改为 Owner
考虑使用 FlowMetrics API 创建自己的指标
如果您不需要的数据不能作为 Prometheus 指标提供,您可以使用 FlowMetrics API 创建自己的指标。如需更多信息,请参阅"FlowMetrics API 参考"和"使用 FlowMetric API 配置自定义指标"。
配置 Loki 来提高查询性能

如果问题仍然存在,您可以考虑配置 Loki 来提高查询性能。有些选项取决于您用于 Loki 的安装模式,如使用 Operator 和 LokiStack,或 Monolithic 模式或 Microservices 模式。

  • 对于 LokiStackMicroservices 模式,尝试 增加 querier 副本的数量
  • 增加查询超时。您还必须在 FlowCollector spec.loki.readTimeout 中增加到 Loki 的 Network Observability 读取超时。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部