YARP 代理 gRPC

介绍

gRPC 是与语言无关的高性能远程过程调用 (RPC) 框架。 它基于 HTTP/2 构建,可通过 YARP 进行代理。 虽然 YARP 不需要注意 gRPC 消息,但确实需要确保启用正确的 HTTP 协议。 如果 YARP 未正确配置为发送和接收 HTTP/2 请求,gRPC 要求 HTTP/2 和 gRPC 调用将失败。

配置 YARP 的传入协议

大多数情况下,gRPC 都需要 HTTP/2。 HTTP/1.1 和 HTTP/2 默认在 ASP.NET 核心服务器(YARP 的前端)上启用,但它们需要 HTTP/2 的 https (TLS),因此 YARP 需要侦听 https:// URL。

http/2 over http(非 TLS)仅在 Kestrel 上受支持,并且需要特定设置。 有关详细信息,请参阅 ASP.NET Core 的 gRPC 服务

以下步骤展示了如何配置 Kestrel,在非安全连接 (http) 上使用 HTTP/2(非 TLS):

{
  "Kestrel": {
    "Endpoints": {
      "http": {
        "Url": "http://localhost:5000",
        "Protocols": "Http2"
      }
    }
  }
}

配置 YARP 的传出协议

YARP 会自动为传出的代理请求协商 HTTP/1.1 或 HTTP/2,但仅适用于 https (TLS)。 HTTP/2 over http(非 TLS)需要其他设置。 请注意,传出协议独立于传入协议。 例如,https 可用于传入连接,将 http 用于传出连接,这称为 TLS 终止。 有关配置详细信息,请参阅 YARP HTTP 客户端配置

下面显示了如何配置传出代理请求以使用 HTTP/2:

"cluster1": {
  "HttpRequest": {
    "Version": "2",
    "VersionPolicy": "RequestVersionExact"
  },
  "Destinations": {
    "cluster1/destination1": {
      "Address": "http://localhost:6000/"
    }
  }
},

gRPC-Web

gRPC-Web 是与 HTTP/1.1 兼容的 gRPC 的替代线路格式。

  • application/grpc - gRPC over HTTP/2 是通常如何使用 gRPC 的方式。
  • application/grpc-web - gRPC-Web 修改 gRPC 协议,以与 HTTP/1.1 兼容。 gRPC-Web 可在更多位置使用。 gRPC-Web 可由浏览器应用和网络中使用,而无需完全支持 HTTP/2。 不支持两个高级 gRPC 功能:客户端流式处理和双向流式处理。

gRPC-Web 可由 YARP 的默认配置进行代理,而无需任何特殊注意事项。