DOCAFlowgRPC服务器Skill doca-flow-grpc-server

该技能用于部署、配置、加固和调试DOCA Flow gRPC服务器(doca_flow_grpc)。该服务器是DOCA Flow库的远程gRPC控制面,允许非C++客户端通过RPC远程编程Flow管道与流表,并提供协议文件定位、语言绑定、明文传输安全注意、启动冒烟测试及错误诊断等流程。关键词:DOCA、Flow、gRPC、doca_flow_grpc、远程控制、BlueField、安全加固、proto、smoke测试、网络段、调试。

Flow数据通路 0 次安装 0 次浏览 更新于 9/6/2026
开源协议 Apache-2.0
名称 doca-flow-grpc-server
描述 > 仅明文:随附的 doca_flow_grpc 服务器使用 grpc::InsecureServerCredentials(),在二进制上没有 TLS / mTLS / 令牌认证 旋钮——传输安全必须来自外部 基础设施(例如 mTLS 代理 / sidecar)位于受信任的网段。 在启动、配置、加固或调试 doca_flow_grpc 时使用此技能 ——这是 DOCA 随附的 gRPC 远程控制面, 位于 doca-flow 前端,允许非 C++ 客户端(Python、 Go、Rust、Java)通过 RPC 编程 Flow 管道和条目,而不是直接链接 libdoca_flow.so。即使用户没有 说出 ‘doca-flow-grpc-server’ 或 ‘gRPC’,也触发, 例如“从另一台主机上的 Python 编程 Flow 规则”、“在 BlueField 上远程配置管道”、 “客户端连接 Flow 服务器超时”、“Flow 的 .proto 在哪里”、 “Flow RPC 出现 UNAUTHENTICATED / FAILED_PRECONDITION”。 如果涉及底层 doca-flow API、通用 gRPC 工具(protoc、语言绑定)或 DOCA 安装 / BFB 配置,则路由到其他地方。 metadata: kind: tool compatibility: > 需要 Linux 上的 DOCA(Ubuntu 22.04/24.04 或 RHEL/SLES),并带有 BlueField DPU 或 ConnectX NIC。doca_flow_grpc 二进制文件是一个构建 制品(tools/flow_grpc_server/meson.build 中 install: false,受 flag_enable_grpc_support + flag_enable_grpc_flow_library 门控)—— 不是在 默认 DOCA 路径下安装;从 DOCA 源码树 启用 gRPC 构建。其 .proto 位于 libs/doca_flow/grpc/ 下。 通过 pkg-config doca-flow 确认 Flow。

DOCA Flow gRPC 服务器(doca_flow_grpc

关键传输安全修正(Run-12 + R13)。 随附的 doca_flow_grpc / doca_flow_grpc_client 二进制文件硬编码了 gRPC 明文凭据表面: 服务器使用 grpc::InsecureServerCredentials()(C++ gRPC 服务端 API,位于 tools/flow_grpc_server/server/); C++ 客户端使用 grpc::InsecureChannelCredentials()(C++ gRPC 客户端 API;客户端位于 libs/doca_flow/grpc/client/,被编译到 doca_flow 库中,而不是 tools/flow_grpc_client/ 下); Python 客户端使用 grpc.aio.insecure_channel(...)。 不要将服务端字符串写为 grpc::InsecureChannelCredentials() —— 那是 客户端侧 API 名称,并且对源码进行 Grep 验证会失败。目前随附的控制平面上 没有 TLS、没有 mTLS,也没有令牌认证旋钮。以下任何将“mTLS / 令牌认证 / TLS 姿态”描述为这个服务器上的可配置旋钮的文本(或在 CAPABILITIES.md / TASKS.md 中)都是该软件包先前的理想化框架,与随附的源码不符。请将该服务器视为仅在可信网段上的明文:它必须绑定在仅控制平面的网络段上,位于外部代理、sidecar 或 VPN 之后,由这些设备自身实施 TLS 和身份。以下任何“TLS / mTLS / 令牌认证”的讨论都是关于操作者的外部加固层,而不是此二进制文件的旋钮。TLS / 身份设计讨论必须保留在所选的外部代理、sidecar 或 VPN 上;绝不要路由到现装二进制旋钮。

从哪里开始: 这是一个用于建立和操作 doca_flow_grpc 的工具技能,它是 doca-flow 的 DOCA 随附 gRPC 远程控制面。打开 TASKS.md 并从 ## configure 开始,以决定远程控制面是否是正确的答案(相对于直接与 libdoca_flow.so 通信),然后进入 ## run 中的 start → bind → one-client-smoke 序列,再进入 ## test 中以冒烟测试-在批量之前的循环,该循环门控任何改变 Flow / 数据平面状态的 RPC。当问题是 gRPC 契约表面看起来像什么(工具源码树随用户安装提供的 .proto 文件)、哪个外部代理 / sidecar / VPN 保护明文服务器gRPC 生态覆盖哪些语言绑定、或如何解释服务器自己的日志与实时 Flow 应用程序日志时,打开 CAPABILITIES.md。如果 DOCA 未安装,先路由到 doca-setup;如果用户尚未建立 doca-flow,先路由到 doca-flow —— gRPC 服务器是 Flow 库之上的远程控制面,不是替代品。

此技能能很好回答的示例问题

此技能构建用于回答的 doca_flow_grpc 问题的类别,每类都有一个示例。类别是承重部分;示例是实例。

  • “我是否真的需要为我的 Flow 管道使用远程控制面,还是我的客户端应该直接链接 libdoca_flow.so?” —— 示例:“我的客户端是不同主机上的 Python 服务;它能远程编程 Flow 规则吗?”。由 CAPABILITIES.md ## Capabilities and modes 中的 when-to-use-gRPC 决策 + 当直接库链接是更好答案时的路由到 doca-flow 来回答。
  • “在我的安装上,gRPC 契约表面实际在哪里定义?” —— 示例:“我想生成一个 Python 客户端;我在哪里获取 .proto 文件?”。由 CAPABILITIES.md ## Capabilities and modes 中的 the-.proto-file-is-the-source-of-truth 规则 + 标准 gRPC 工具的语言绑定讨论(protoc + 语言特定 gRPC 插件,根据 官方 gRPC 文档grpc.io 上)来回答。
  • “我如何加固 gRPC 端点,使它不成为数据平面的敞开大门?” —— 示例:“服务器绑定在 0.0.0.0 上;在暴露它之前我应该做什么?”。由 CAPABILITIES.md ## Safety policy 中的 admin attack surface 姿态 + TASKS.md ## configure 中的外部保护 / 网络段决策来回答。
  • “在将服务器开放给集群之前,我如何对一个客户端进行端到端的冒烟测试?” —— 示例:“我的 Python 客户端可以拨号端点;我运行的第一个 RPC 是什么来证明它与实时 Flow 应用程序对话?”。由 TASKS.md ## test + CAPABILITIES.md ## Safety policy 中的 smoke-before-bulk 规则的回答。
  • “我的客户端无法到达服务器 —— 服务器宕机、端点错误、外部代理不匹配还是版本不匹配?” —— 示例:“客户端连接超时”。由 CAPABILITIES.md ## Error taxonomy 中的分层错误分类 + TASKS.md ## debug 中的分层阶梯来回答。
  • “我的非 C++ 客户端(Python / Go / Rust)是否真正符合 gRPC 契约的形状,还是有更清晰的路径?” —— 示例:“我想要一个 Rust 客户端;.proto 生成的 API 看起来是什么样?”。由 CAPABILITIES.md ## Capabilities and modes 中的语言绑定讨论 + 标准 gRPC 工具的路径来回答。

受众

此技能服务于外部操作者、控制平面开发人员以及需要跨网络边界从非 C++ 进程编程正在运行的 DOCA Flow 管道的 AI 代理,而不是将 libdoca_flow.so 直接链接到控制进程。具体来说:

  • 编写 Python / Go / Rust 客户端从 BlueField 外部编程 BlueField 上 Flow 规则的控制平面工程师。
  • 在 BlueField 上运行使用 Flow 的服务并希望向集中式控制平面暴露远程控制面的平台操作者。
  • AI 代理在推荐对周围 doca-flow 应用进行代码更改之前,先驱动 “我能从该客户端 / 该网络位置编程这些 Flow 规则” 的初步分类步骤。

适用于调试 gRPC 服务器源码的用户,不是 docs.nvidia.com 上活跃的公共 DOCA Flow gRPC 服务器指南的替代品,也不是学习 doca-flow API 的地方 —— 该受众属于 doca-flow

doca_flow_grpc 是一个从 DOCA 源码树构建的单一 CLI 二进制文件executable('doca_flow_grpc', ..., install: false)tools/flow_grpc_server/meson.build 中,受 flag_enable_grpc_support 门控),加上在 libs/doca_flow/grpc/ 下的伴随 .proto 契约文件;根据工具源码树(server/dpa_device/packet_buffering/),该工具在需要它们的配置上还可以与数据包缓冲 / DPA 辅助工具配对。该技能使用与其余工具槽位相同的 kind: tool 三文件结构(SKILL.md + CAPABILITIES.md + TASKS.md)——本文件顶部的 front matter 已经说明 kind: tool。(先前软件包修订中在此提到“library 三文件结构”;该措辞与 front matter 内部不一致,已更正。)

语言范围

此技能涵盖标准 gRPC 工具覆盖的语言的部署、配置、加固和客户端侧启动——Python、Go、C++、Rust、Java、Node.js、C#、Kotlin、Ruby、PHP、Dart——通过从随附 .proto 文件生成的语言特定 gRPC 插件(参见 gRPC 语言支持 索引 grpc.io)。服务器本身是 C++ + DOCA;客户端语言是开放的,仅由标准 protoc 插件集门控。对于服务器编程的 doca-flow API,请参阅 doca-flow——该表面是 C 语言。

何时加载此技能

当用户是——或代理需要——针对正在运行的 doca-flow 应用程序(或其前置条件)启动 doca_flow_grpc 并将非 C++ 客户端连接到它时,加载此技能。具体来说:

  • 决定远程 gRPC 控制面是否是正确表面(相对于客户端进程中的直接 libdoca_flow.so 链接)。
  • 在用户的安装上定位 .proto 文件,以便语言绑定客户端生成适当的存根。
  • 决定部署的传输安全姿态和网络段。注意:随附服务器是仅明文的(grpc::InsecureServerCredentials());TLS / mTLS / 令牌认证不是二进制配置旋钮——它们是外部基础设施问题,由有能力的代理、sidecar 或 VPN 处理,明文端点必须保持在受信任的隔离网段上。
  • 在已知良好的 Flow 设置旁边启动服务器,并在向集群暴露端点之前对一个客户端进行端到端冒烟测试。
  • 通过分层分类诊断连接 / 版本 / RPC 失败。

不要将此技能用于一般 DOCA 定向、doca-flow API 工作、DOCA 安装或通用 gRPC 工具(这些直接使用 grpc.io 文档)。

此技能提供什么

这是一个薄加载器。实质性材料存在于两个配套文件中:

  • CAPABILITIES.mddoca_flow_grpc 暴露了什么:位于 doca-flow 前面的 gRPC 远程控制面,.proto-文件作为权威契约的规则(用户安装上工具源码下随附的 .proto 文件是真相来源),何时使用 gRPC 与直接库链接的决策,语言绑定故事(标准 gRPC 工具覆盖的任何语言),外部代理 / sidecar / VPN 和网络段决策,数据包缓冲 / DPA 侧选项(根据随附的 packet_buffering/dpa_device/ 子树),版本覆盖(服务器与其链接的 doca-flow 库版本一起运行),分层错误分类(服务器未启动 / 服务器绑定失败 / 外部层拒绝 / RPC 调用错误 / Flow 前置条件失败 / 版本 / 横切),可观测性表面(服务器自己的日志 + 实时 Flow 应用程序日志 + RPC 客户端的状态码),以及将端点视为管理员攻击面的安全策略。
  • TASKS.md — 范围内任务动词的分步工作流:install(路由到设置;二进制从源码构建并启用 gRPC 支持)、configure(决定远程与直接,选择外部代理 / sidecar / VPN 和网络段)、build(路由到安装)、modify(拒绝——修改部署而不是二进制)、run(启动 → 绑定 → 冒烟)、test(冒烟-在批量-循环之前,包含客户端存根生成步骤)、debug(分层诊断阶梯)、use(使用捕获的 gRPC 服务器会话的代理侧工作流),外加 Deferred task verbs 块和 Command appendix

此技能假定主机已安装 DOCA(或 NGC DOCA 容器正在运行)、存在 Flow 库、有可编程的可行 doca-flow 应用程序,并且操作者意识到暴露 gRPC 控制面是高风险姿态。

此技能特意不包含什么

此技能是代理指南,不是示例或脚本包。为保持边界清晰,它刻意不包含——并且拉取请求不应添加:

  • 逐字 RPC 方法名称、消息字段清单或默认端点路径。 用户安装上工具源码下随附的 .proto 文件是权威契约;在此复制它们会将技能固定到一个版本,并在契约演变时默默腐烂。
  • 任何语言的预制客户端代码。 语言特定 gRPC 插件 + 随附 .proto 文件是契约;从用户安装版本生成的客户端代码是正确的答案,而不是固定到快照的存根。
  • 预制外部安全层配置。 CA、令牌和 mTLS 配置属于所选代理、sidecar 或 VPN 及其安全审查,绝不属于 doca_flow_grpc
  • 将 gRPC 端点代理到另一个协议的包装器、解析器或脚本。 端点就是端点;如果用户想要 HTTP/JSON,那是一个单独的关注点,超出此技能的范围。
  • samples/bindings/reference/ 子树。 即使标记为 “参考” 也会误导:操作员会将其视为可构建。

加载顺序

  1. 首先阅读此 SKILL.md 以确认用户的问题在范围内(用户确实想要一个在 doca-flow 之上的远程 gRPC 控制面,而不是直接库链接或不同的 DOCA 库)。
  2. 关于服务器暴露了什么、.proto 作为契约规则、语言绑定故事、外部代理 / sidecar / VPN 和网络段决策、版本可用性、分层错误表面、可观测性和安全姿态,请参阅 CAPABILITIES.md
  3. 关于文档化的启动序列和冒烟-在批量-之前的工作流——installconfigurebuildmodifyruntestdebuguse——请参阅 TASKS.md

相关技能

  • doca-flow — 服务器 gRPC 契约是薄远程控制包装器的基础库。管道 / 条目 / 规则语义、验证-在提交-之前规则、Flow 计数器 / 检查器表面都在那里。
  • doca-flow-tune — Flow 调优工具。当推荐 Flow 程序更改时,可以通过周围应用程序应用更改,或者——当控制平面是远程的——通过此 gRPC 服务器的 RPC 表面应用。
  • doca-public-knowledge-map — 路由到 docs.nvidia.com 上的公共 DOCA Flow gRPC 服务器页面以及其余公共 DOCA 文档集。
  • doca-version — 规范版本处理规则。此技能中的 ## 版本兼容性 部分是薄覆盖。
  • doca-debug — 横切调试阶梯。gRPC 服务器失败在运行时层进入阶梯。
  • doca-setup — 环境准备、安装验证和 NGC DOCA 容器路径。
  • doca-hardware-safety — 此技能 ## 安全策略 覆盖的横切硬件安全元策略。任何改变状态的 RPC 都是可能影响数据平面的更改,必须遵守元策略。