赋能你的 gRPC 应用:使用 API7 企业版网关代理 gRPC 连接

在当今快速发展的技术领域中,gRPC(Google Remote Procedure Call)已经成为许多应用程序中不可或缺的一部分。然而,要充分发挥 gRPC 的潜力,你需要一个强大的 API 网关来有效管理你的 gRPC 服务,为其提供协议转换、负载均衡、身份认证和授权等关键功能。无论你是否熟悉 gRPC,只需花 5 分钟阅读本文,你将掌握使用 API7 企业版网关代理 gRPC 连接的方法。

API7 Enterprise and gRPC

前置条件

  1. 安装 API7 企业版网关;

  2. 安装 grpcurl 模拟 gRPC 客户端与您的 gRPC 服务器交互;

  3. 启动一个测试使用的 gRPC 服务;

    1
    docker run -d --name grpc-service -p 50051:50051 --restart always api7/grpc-server-example:1.0.0
    • 启动成功后,可以用 grpcurl 来查看可用的 gRPC 服务列表和方法:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ grpcurl -plaintext 127.0.0.1:50051 list

    grpc.reflection.v1alpha.ServerReflection
    helloworld.Greeter
    helloworld.TestImport

    $ grpcurl -plaintext 127.0.0.1:50051 list helloworld.Greeter

    helloworld.Greeter.GetErrResp
    helloworld.Greeter.Plus
    helloworld.Greeter.SayHello
    helloworld.Greeter.SayHelloAfterDelay
    helloworld.Greeter.SayHelloBidirectionalStream
    helloworld.Greeter.SayHelloClientStream
    helloworld.Greeter.SayHelloServerStream

使用 API7 企业版网关代理 gRPC 连接

更新网关实例配置文件

默认情况下,API7 企业版网关实例只在 9443 端口支持 TLS 加密的 HTTP/2。通常我们在测试环境中为了便于测试,可以修改网关实例的配置文件,在 node_listen 添加一个端口 9081 支持不加密的 HTTP/2。

1
2
3
4
5
6
apisix:
node_listen:
- port: 9080
enable_http2: false
- port: 9081
enable_http2: true

更改完毕后,在安装 API7 企业版网关的 api7-ee 目录下重新运行 docker-compose up -d 即可。

配置服务和路由

接下来,我们将在 API7 企业版的控制台页面中配置对应的资源,以代理我们已经准备好的 gRPC 服务。

  1. 新增名为 grpc-example 的服务,并选择 gRPC 为上游 Scheme;

Use API7 to proxy grpc-1

  1. 点击进入刚创建的 grpc-example 服务,添加路由。路由的路径匹配格式为 /{service}/{method},例如根据我们之前查询到的 gRPC 服务列表和方法,我们可以配置路径为:/helloworld.Greeter/SayHello。

Use API7 to proxy grpc-2

发布服务进行测试

在创建好服务和路由之后,只需将服务发布到网关组中即可生效。

  1. 点击“发布服务”,选择指定的网关组及要发布的服务;

  2. 添加 gRPC 服务节点(IP +端口),然后点击“发布”;

  3. 发布成功后我们使用 grpcurl 来模拟 gRPC 客户端:

    • 我们需要使用一份 helloworld.proto 的文件,确保 grpcurl 程序正确将请求和响应的格式与 gRPC 服务的定义相匹配。我们可以在这里找到本示例中用到的 .proto 文件。
    • 接着我们只需要运行命令,即可看到我们使用 API7 企业版网关成功代理 gRPC 连接。
    1
    2
    3
    4
    5
    $ grpcurl -plaintext -proto helloworld.proto  -d '{"name":"apisix"}' 127.0.0.1:9081
    helloworld.Greeter.SayHello
    {
    "message": "Hello apisix"
    }

总结

API7 企业网关内置了 100+ 插件,涵盖了认证、授权、限速、日志、监控等广泛功能。通过使用 API7 企业版网关代理 gRPC 服务,将极大提高系统的灵活性、安全性、性能和可管理性,为开发人员和运维团队提供了更好的工具和控制手段。快来试用 API7 企业版https://www.apiseven.com/enterprise网关,为你的 gRPC 应用赋能吧!