Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

云原生路由器功能

总结 使用本指南了解瞻博网络云原生路由器的日常配置、操作和监控。

瞻博网络云原生路由器接口类型

瞻博网络云原生路由器支持以下类型的接口:

  • 代理接口

    vRouter 只有一个代理接口。它用于在 vRouter 代理和 vRouter 之间进行通信。在 vRouter CLI 上,当您发出 vif --list 命令时,代理接口看起来像:

  • DPDK 虚拟功能 (VF) 工作负载接口

    这些接口连接到无线电单元 (RUS) 或毫米波分布式单元 (mmW-DU)。在 vRouter CLI 上,当您发出 vif --list 命令时,DPDK VF 工作负载接口看起来像:

  • DPDK 虚拟功能 (VF) 结构接口

    DPDK VF 交换矩阵接口接受来自多个 VLAN 的流量,并与主机服务器上的物理 NIC 相关联。在 vRouter CLI 上,当您发出 vif --list 命令时,DPDK VF 交换矩阵接口看起来像:

  • 主动/备用键接口

    键接口接受来自多个 VLAN 的流量。键接口以主动/备用模式(模式 0)运行。

    在 vRouter CLI 上,当您发出 vif --list 命令时,键接口看起来像:

  • 使用 virtio 和 DPDK 数据平面的 POD 接口

    Virtio 接口接受来自多个 VLAN 的流量,并与在 DPDK 数据平面上使用 virtio 的 Pod 接口相关联。

    在 vRouter CLI 上,当您发出 vif --list 命令时,带有 DPDK 数据平面接口的虚拟机看起来像:

  • 使用 veth pair 和 DPDK 数据平面的 Pod 接口

    使用 veth pairs 和 DPDK 数据平面的 Pod 接口是接入接口,而不是中继接口。这种类型的 Pod 接口仅允许来自一个 VLAN 的流量通过。

    在 vRouter CLI 上,当您发出 vif --list 命令时,与 DPDK 数据平面接口的 veth 对看起来像:

创建接口时,必须提供要使用的 JCNR-CNI 的配置值。Pod 定义 YAML 文件和 NAD YAML 文件包含密钥:您必须为安装配置的价值对。然后,您可以将相应的 Pod 和 NAD YAML 文件应用到 Kubernetes 群集。

NAD YAML 文件包含接口定义。您可以在用户 Pod 示例中看到 NAD 和 Pod YAML 文件 示例 - 内核访问用户 Pod 示例 - Virtio 中继 示例。

日志记录和通知

阅读本章,了解瞻博网络云原生路由器中的日志记录和通知功能。我们会讨论日志文件的位置、您可以记录的内容以及各种日志级别。对于通知,我们会讨论如何在云原生路由器中实施通知以及提供哪些通知。

文件位置

瞻博网络云原生路由器 Pods 和容器使用 syslog 作为其日志机制。您可以通过阅读或更改值中 log_path 密钥的值来确定日志文件在部署时间的位置 。yaml 文件中。默认情况下,日志文件的位置为 /var/log/jcnr。该系统将所有云原生路由器 Pods 和容器的日志文件存储在 log_path 目录中。

此外,我们还使用 Syslog-NG Pod 在主机服务器上存储 JSON 格式的事件通知数据。syslog-ng Pod 在值.yaml 文件中由syslog_notifications密钥指定的目录中存储 JSON 格式的通知。默认情况下,该文件的位置为/var/log/jcnr;文件名称为 jcnr_notifications.json。您可以在部署云原生路由器之前更改syslog_notifications密钥的值,从而更改位置和文件名。

使用默认文件位置时, /var/log/jcnr 目录中的文件列表看起来类似:

注意:

Contrail-vrouter-dpdk.日志和 jcnr-cni.日志文件的日志旋转必须由主机服务器处理。

通知

Syslog-NG 持续监控上述日志文件,以执行接口打开、接口向下、接口添加等通知事件。当这些事件出现在日志文件中时,syslog-ng 会将日志事件转换为通知事件,并将其以 JSON 格式存储在值中配置 的syslog_notifications 文件中 。yaml 文件。

截至 22.2 版瞻博网络云原生路由器,syslog-ng 商店的完整通知列表如以下部分所示:

表 1:支持的通知
通知 源 Pod

许可证即将到期

cRPD

许可证已过期

cRPD

许可证无效

cRPD

许可 OK

cRPD

JCNR 的成功

部署

JCNR Init 故障

部署

上游结构键成员链路

虚拟路由器

上游结构键成员链路关闭

虚拟路由器

上游结构键连接

虚拟路由器

上游结构键下链路

虚拟路由器

下游交换矩阵链路

虚拟路由器

下游交换矩阵链路已关闭

虚拟路由器

设备链接

虚拟路由器

设备链接关闭

虚拟路由器

任何 JCNR 应用程序严重错误

虚拟路由器

达到 JCNR MAC 表限制

虚拟路由器

JCNR CLI 开始

cRPD/vRouter-Agent

JCNR CLI 停止

cRPD/vRouter-Agent

JCNR 内核应用程序接口启动

虚拟路由器

JCNR 内核应用程序接口向下

虚拟路由器

JCNR virtio 用户界面 Up

虚拟路由器

JCNR virtio 用户界面向下

虚拟路由器

查看 L2 指标和遥测

阅读本章,了解如何从瞻博网络云原生路由器实例中检索 L2 指标。

查看 L2 指标的优势

瞻博网络云原生路由器提供遥测功能,让您可以查看系统并查看性能指标。我们通过使用名为 Contrail-vrouter 遥测导出器 的容器来实现这一目标,该容器与其他 vRouter 容器一起在 Contrail-vrouter-masters Pod 中运行。

遥测导出器会定期查询 vRouterAgent 上的内省代理,以获取统计数据并报告针对 Prometheus 刮伤请求的指标信息。您可以使用以下 URL 直接查看遥测数据:http://<host 服务器 IP 地址>:8070。我们在下表中显示了示例输出。

注意:

我们已将下表中显示的输出分组。云原生路由器不会对实时系统上的输出进行分组或分类。

表 2:遥测示例输出
示例输出
每个 vRouter 的内存使用情况
# TYPE virtual_router_system_memory_cached_bytes gauge
# HELP virtual_router_system_memory_cached_bytes Virtual router system memory cached 
virtual_router_system_memory_cached_bytes{vrouter_name="jcnr.example.com"} 2635970448
# TYPE virtual_router_system_memory_buffers gauge
# HELP virtual_router_system_memory_buffers Virtual router system memory buffer 
virtual_router_system_memory_buffers{vrouter_name="jcnr.example.com"} 32689
# TYPE virtual_router_system_memory_bytes gauge
# HELP virtual_router_system_memory_bytes Virtual router total system memory 
virtual_router_system_memory_bytes{vrouter_name="jcnr.example.com"} 2635970448
# TYPE virtual_router_system_memory_free_bytes gauge
# HELP virtual_router_system_memory_free_bytes Virtual router system memory free 
virtual_router_system_memory_free_bytes{vrouter_name="jcnr.example.com"} 2635969296
# TYPE virtual_router_system_memory_used_bytes gauge
# HELP virtual_router_system_memory_used_bytes Virtual router system memory used 
virtual_router_system_memory_used_bytes{vrouter_name="jcnr.example.com"} 32689
# TYPE virtual_router_virtual_memory_kilobytes gauge
# HELP virtual_router_virtual_memory_kilobytes Virtual router virtual memory 
virtual_router_virtual_memory_kilobytes{vrouter_name="jcnr.example.com"} 0
# TYPE virtual_router_resident_memory_kilobytes gauge
# HELP virtual_router_resident_memory_kilobytes Virtual router resident memory 
virtual_router_resident_memory_kilobytes{vrouter_name="jcnr.example.com"} 32689
# TYPE virtual_router_peak_virtual_memory_bytes gauge
# HELP virtual_router_peak_virtual_memory_bytes Virtual router peak virtual memory 
virtual_router_peak_virtual_memory_bytes{vrouter_name="jcnr.example.com"} 2894328001
每个接口的数据包计数
# TYPE virtual_router_phys_if_input_packets_total counter
# HELP virtual_router_phys_if_input_packets_total Total packets received by physical interface
virtual_router_phys_if_input_packets_total{vrouter_name="jcnr.example.com",interface_name="bond0"} 1483
# TYPE virtual_router_phys_if_output_packets_total counter
# HELP virtual_router_phys_if_output_packets_total Total packets sent by physical interface
virtual_router_phys_if_output_packets_total{vrouter_name="jcnr.example.com",interface_name="bond0"} 32969
# TYPE virtual_router_phys_if_input_bytes_total counter
# HELP virtual_router_phys_if_input_bytes_total Total bytes received by physical interface
virtual_router_phys_if_input_bytes_total{interface_name="bond0",vrouter_name="jcnr.example.com"} 125558
# TYPE virtual_router_phys_if_output_bytes_total counter
# HELP virtual_router_phys_if_output_bytes_total Total bytes sent by physical interface
virtual_router_phys_if_output_bytes_total{vrouter_name="jcnr.example.com",interface_name="bond0"} 4597076
virtual_router_phys_if_input_bytes_total{vrouter_name="jcnr.example.com",interface_name="bond0"} 228300499320
virtual_router_phys_if_output_bytes_total{interface_name="bond0",vrouter_name="jcnr.example.com"} 228297889634
virtual_router_phys_if_input_packets_total{interface_name="bond0",vrouter_name="jcnr.example.com"} 1585421179
virtual_router_phys_if_output_packets_total{vrouter_name="jcnr.example.com",interface_name="bond0"} 1585402623
virtual_router_phys_if_output_packets_total{interface_name="bond0",vrouter_name="jcnr.example.com"} 1585403344
每个虚拟路由器的 CPU 使用情况
# TYPE virtual_router_cpu_1min_load_avg gauge
# HELP virtual_router_cpu_1min_load_avg Virtual router CPU 1 minute load average
virtual_router_cpu_1min_load_avg{vrouter_name="jcnr.example.com"} 0.11625
# TYPE virtual_router_cpu_5min_load_avg gauge
# HELP virtual_router_cpu_5min_load_avg Virtual router CPU 5 minute load average
virtual_router_cpu_5min_load_avg{vrouter_name="jcnr.example.com"} 0.109687
# TYPE virtual_router_cpu_15min_load_avg gauge
# HELP virtual_router_cpu_15min_load_avg Virtual router CPU 15 minute load average
virtual_router_cpu_15min_load_avg{vrouter_name="jcnr.example.com"} 0.110156
每个虚拟路由器丢弃数据包计数
# TYPE virtual_router_dropped_packets_total counter
# HELP virtual_router_dropped_packets_total Total packets dropped
virtual_router_dropped_packets_total{vrouter_name="jcnr.example.com"} 35850
每个 vlan 每个接口的数据包计数
# TYPE virtual_router_interface_vlan_multicast_input_packets_total counter
# HELP virtual_router_interface_vlan_multicast_input_packets_total Total number of multicast packets received on interface VLAN
virtual_router_interface_vlan_multicast_input_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_broadcast_output_packets_total counter
# HELP virtual_router_interface_vlan_broadcast_output_packets_total Total number of broadcast packets sent on interface VLAN
virtual_router_interface_vlan_broadcast_output_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_broadcast_input_packets_total counter
# HELP virtual_router_interface_vlan_broadcast_input_packets_total Total number of broadcast packets received on interface VLAN
virtual_router_interface_vlan_broadcast_input_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_multicast_output_packets_total counter
# HELP virtual_router_interface_vlan_multicast_output_packets_total Total number of multicast packets sent on interface VLAN
virtual_router_interface_vlan_multicast_output_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_unicast_input_packets_total counter
# HELP virtual_router_interface_vlan_unicast_input_packets_total Total number of unicast packets received on interface VLAN
virtual_router_interface_vlan_unicast_input_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_flooded_output_bytes_total counter
# HELP virtual_router_interface_vlan_flooded_output_bytes_total Total number of output bytes flooded to interface VLAN
virtual_router_interface_vlan_flooded_output_bytes_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_multicast_output_bytes_total counter
# HELP virtual_router_interface_vlan_multicast_output_bytes_total Total number of multicast bytes sent on interface VLAN
virtual_router_interface_vlan_multicast_output_bytes_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_unicast_output_packets_total counter
# HELP virtual_router_interface_vlan_unicast_output_packets_total Total number of unicast packets sent on interface VLAN
virtual_router_interface_vlan_unicast_output_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_broadcast_input_bytes_total counter
# HELP virtual_router_interface_vlan_broadcast_input_bytes_total Total number of broadcast bytes received on interface VLAN
virtual_router_interface_vlan_broadcast_input_bytes_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_multicast_input_bytes_total counter
# HELP virtual_router_interface_vlan_multicast_input_bytes_total Total number of multicast bytes received on interface VLAN
virtual_router_interface_vlan_multicast_input_bytes_total{vlan_id="100",interface_id="1"} 0
# TYPE virtual_router_interface_vlan_unicast_input_bytes_total counter
# HELP virtual_router_interface_vlan_unicast_input_bytes_total Total number of unicast bytes received on interface VLAN
virtual_router_interface_vlan_unicast_input_bytes_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_flooded_output_packets_total counter
# HELP virtual_router_interface_vlan_flooded_output_packets_total Total number of output packets flooded to interface VLAN
virtual_router_interface_vlan_flooded_output_packets_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_broadcast_output_bytes_total counter
# HELP virtual_router_interface_vlan_broadcast_output_bytes_total Total number of broadcast bytes sent on interface VLAN
virtual_router_interface_vlan_broadcast_output_bytes_total{interface_id="1",vlan_id="100"} 0
# TYPE virtual_router_interface_vlan_unicast_output_bytes_total counter
# HELP virtual_router_interface_vlan_unicast_output_bytes_total Total number of unicast bytes sent on interface VLAN
virtual_router_interface_vlan_unicast_output_bytes_total{interface_id="1",vlan_id="100"} 0
...

Prometheus 是一种开源系统监控和警报工具包。您可以使用 Prometheus 从云原生路由器主机服务器提取遥测数据,并以 http 格式呈现该数据。Prometheus 配置示例如下:

L2 ACL(防火墙过滤器)

阅读本章,了解在云原生路由器中使用 L2 ACL。

L2 防火墙过滤器

从 22.2 版瞻博网络云原生路由器开始,我们包括了有限的防火墙过滤功能。您可以使用 JCNR 控制器内的 Junos OS CLI、使用 NETCONF 或使用云原生路由器 API 来配置过滤器。

在部署期间,系统定义并应用防火墙过滤器以阻止流量在云原生路由器接口之间直接传递。您可以根据需要动态定义和应用更多过滤器。防火墙过滤器允许您:

  • 定义用于桥接家族流量的防火墙过滤器

  • 基于以下一个或多个字段定义过滤器:源 MAC 地址、目标 MAC 地址或以太类型

  • 在每个过滤器中定义多个术语

  • 丢弃与过滤器匹配的信息流

  • 将过滤器应用于桥接域

防火墙过滤器示例

下面您可以看到云原生路由器部署中的防火墙过滤器配置示例。

注意:

您最多可以在一个防火墙过滤器中配置 16 个术语。

在防火墙过滤器中唯一可以配置的操作是丢弃操作。

配置后,您必须使用类似于以下set routing-instances vswitch bridge-domains bd3001 forwarding-options filter input filter1的 cRPD 配置命令将防火墙过滤器应用到桥接域。然后,您必须提交防火墙过滤器的配置才能生效。

要查看与过滤器匹配的数据包数量(按 VLAN),您可以使用 cRPD CLI 并发出 命令:

以上命令的输出看起来像:

在此示例中,我们将过滤器应用于桥接域 bd3001。过滤器尚未与任何数据包匹配。

L2 防火墙过滤器 (ACL) 故障排除

下表列出了在云原生路由器中实施防火墙规则 (ACL) 时可能面临的一些潜在问题。您可在主机服务器上运行这些命令的大部分。我们在命令列中指示显示的命令是否需要在其他地方运行。

表 3:L2 防火墙过滤器 (ACL) 故障排除
可能出问题 的原因 命令
不起作用的防火墙过滤器 (ACL)

gRPC 到 vRouter 的连接(端口 50052)已关闭

检查 gRPC 连接

netstat -antp|grep 50052

ui- pubd 流程未在运行

检查 ui-pubd 是否在运行

ps aux|grep ui-pubd
防火墙过滤器 (ACL) 显示不起作用的命令

gRPC 到 vRouter 的连接(端口 50052)已关闭

检查 gRPC 连接

netstat -antp|grep 50052

防火墙服务未在运行

ps aux|grep firewall
show log filter.log

您必须在 JCNR 控制器 (cRPD) CLI 中运行此命令。

发 牌

阅读本节了解瞻博网络云原生路由器许可。

瞻博网络云原生路由器许可

在 22.2 版瞻博网络云原生路由器中,我们启用了瞻博网络敏捷许可 (JAL) 模式。JAL 确保按照瞻博网络最终用户许可协议使用功能。您可通过客户团队为瞻博网络云原生路由器软件购买许可证。您可使用云原生路由器控制器的 CLI 向云原生路由器应用许可证。有关管理多个云原生路由器部署的多个许可证文件的详细信息,请参阅 瞻博网络敏捷许可概述

如果您的 cRPD Pod 在主机服务器上发出 命令 kubectl get pods -A 时正在运行,则您的许可证文件已得到正确应用。

注意:

在 22.3 版云原生路由器中,我们仅监控许可证合规性。我们不执行许可证合规性。

MAC 学习和老化

瞻博网络云原生路由器提供 MAC 地址的自动化学习和老化。本章概述了云原生路由器中的 MAC 学习和老化功能。

MAC 学习

需要在云原生路由器中进行 MAC 学习,以便高效地将收到的数据包发送至目的地。云原生路由器通过内部维护 MAC 地址表。此表包括 MAC 地址、关联的 VLAN 以及在上学习 MAC 和 VLAN 的接口。MAC 表将向 vRouter 告知哪些接口可以到达哪些 MAC 地址。

云原生路由器将源 MAC 缓存以用于新数据包流,以便将传入接口记录到 MAC 表中。云原生路由器学习每个 VLAN/桥接域 (BD) 的 MAC 地址。云原生路由器从数据包的 MAC 地址和 VLAN 在 MAC 表中创建密钥。发送至 MAC 表的查询将返回与密钥关联的接口。

当 vRouter 需要将数据包转发至目标 MAC 地址时,它会咨询 MAC 表。如果有目标 MAC 和 VLAN 的条目,数据包将转发至 MAC 表中存储的相关接口。如果没有目标 MAC 和 VLAN(查找故障)的条目,云原生路由器会将数据包泛出桥接域中除传入接口之外的所有接口。

默认情况下:

  • 60 秒后,MAC 表条目时间

  • MAC 表大小仅限于 10,240 个条目

您可以在部署期间通过编辑值来配置老化的超时和 MAC 表大小 。yaml 文件在主机服务器的 jcnr-vrouter 目录下。建议您不要更改默认值。

您可以看到 MAC 表条目:

  • http://<host 服务器 IP 上使用内省>:8085/mac_learning.xml#Snh_FetchL2MacEntry

  • 使用 cRPD CLI 和 命令 show bridge mac-table

  • 使用 Contrail 工具 Pod 的 CLI 和 命令 purel2cli --mac show​

如果超过 MAC 限制,则计数器 pkt_drop_due_to_mactable_limit 增量。您可以通过 http://<host 服务器 IP 内省看到此计数器 >:8085/Snh_AgentStatsReq

如果删除或禁用接口,云原生路由器将从 MAC 表中删除与该接口关联的所有 MAC 条目。

MAC 条目老化

缓存 MAC 条目的老化超时为 60 秒。您可以通过编辑值来配置部署时间的老化超时 。yaml 文件。最小超时为 60 秒,最大超时为 10240 秒。您可以通过内省查看每个 MAC 条目所剩的时间 http://<host 服务器 IP>:8085/mac_learning.xml#Snh_FetchL2MacEntry。我们展示了以下输出的示例:

广播速率限制

广播速率限制功能控制交换矩阵接口上的出口广播和组播流量速率。部署前,通过在中设置结构BMCastRateLimit 值,您可以指定以每秒字节为字节的速率限制。该系统将配置的值应用于云原生路由器中的所有交换矩阵接口。为广播速率限制设置的最大值为每秒 1000000 字节。

如果广播或组播流量速率超过设置限制,vRouter 将丢弃流量。通过在 vRouter CLI 中运行 dropstats 命令,您可以看到计数器值。例如: