赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 弹性容器实例 ECI
  4. 操作指南
  5. Knative
  6. Knative服务管理
  7. 在Knative中部署gRPC服务

在Knative中部署gRPC服务

  • Knative服务管理
  • 发布于 2025-04-15
  • 0 次阅读
文档编辑
文档编辑

如果您的Knative服务采用分布式系统或微服务架构场景,您可以使用gRPC协议提升客户端与服务器端的通讯效率。ACK Knative支持HTTP、HTTP2(包括gRPC)访问协议。您可以在Knative Service的YAML文件中部署gRPC服务,Knative网关能自动实现对gRPC协议的路由。

前提条件

已在集群中部署Knative,请参见部署Knative。

步骤一:部署gRPC服务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Knative。

  3. 在Knative页面的服务管理页签下,选择命名空间为default,然后单击使用模板创建,单击示例模板右侧的下拉列表,选择自定义,将以下示例代码粘贴至模板,最后单击创建,创建一个名为helloworld-grpc的Knative服务。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-grpc
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: mpa.autoscaling.knative.dev
        spec:
          containers:
          - image: docker.io/moul/grpcbin # 该镜像是一个用于测试gRPC的工具,它通过提供gRPC服务来响应请求。
            env:
            - name: TARGET
              value: "Knative"
            ports:
            - containerPort: 9000
              name: h2c # gRPC服务在Knative服务中port字段下的name设置为h2c。
              protocol: TCP
  4. 在Hosts文件中添加绑定信息。将服务管理页面的默认域名和访问网关进行Host绑定。

    找到计算机中Hosts文件所在位置,然后在Hosts文件中添加绑定信息,格式为访问网关+空格+默认域名,然后通过域名直接访问服务。绑定样例如下:

    121.xx.xxx.xx helloworld-grpc.default.example.com

步骤二:验证gRPC服务的可用性

  1. 访问grpcbin,安装适用于您操作系统的BloomRPC。

  2. 将以下代码粘贴至gRPC.proto文件,然后保存至本地。

    syntax = "proto3";
    
    package grpcbin;
    
    service GRPCBin {
      rpc Index(EmptyMessage) returns (IndexReply) {}
      // 无参数调用的方法,调用后回返回一个空响应。
      rpc Empty(EmptyMessage) returns (EmptyMessage) {}
      // 响应会返回请求的参数。
      rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
      // 响应为流式的调用,会分10次响应消息。
      rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
      // 请求为流式的调用,会接受10次请求并返回最后一次的body。
      rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
      // 请求响应都为流式的方法。
      rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
      // 该方法会返回指定的grpc错误。
      rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
      // 该方法调用会随机返回一个错误。
      rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
      // 该方法调用会返回header。
      rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
      // 该方法调用不会返回响应。
      rpc NoResponseUnary(EmptyMessage) returns (EmptyMessage) {}
    }
    
    message HeadersMessage {
      message Values {
        repeated string values = 1;
      }
      map<string, Values> Metadata = 1;
    }
    
    message SpecificErrorRequest {
      uint32 code = 1;
      string reason = 2;
    }
    
    message EmptyMessage {}
    
    message DummyMessage {
      message Sub {
        string f_string = 1;
      }
      enum Enum {
        ENUM_0 = 0;
        ENUM_1 = 1;
        ENUM_2 = 2;
      }
      string f_string = 1;
      repeated string f_strings = 2;
      int32 f_int32 = 3;
      repeated int32 f_int32s = 4;
      Enum f_enum = 5;
      repeated Enum f_enums = 6;
      Sub f_sub = 7;
      repeated Sub f_subs = 8;
      bool f_bool = 9;
      repeated bool f_bools = 10;
      int64 f_int64 = 11;
      repeated int64 f_int64s= 12;
      bytes f_bytes = 13;
      repeated bytes f_bytess = 14;
      float f_float = 15;
      repeated float f_floats = 16;
    }
    
    message IndexReply {
      message Endpoint {
        string path = 1;
        string description = 2;
      }
      string description = 1;
      repeated Endpoint endpoints = 2;
    }

    gRPC服务底层基于HTTP2协议,其路径格式为{包名}.{服务名}/{方法名},基于此,Knative网关可以在Path字段中实现对gRPC协议的路由。例如,如果使用gRPC访问grpcbin的Index方法,在HTTP2协议中,该Path字段值为grpcbin.GRPCBin/Index。

  3. 使用BloomRPC测试gRPC服务的可用性,若服务端正常返回响应,则表示gRPC服务可用。

    1. 将gRPC.proto文件导入BloomRPC。

    2. 在左侧导航栏,单击DummyUnary调用方法,并在页面顶部设置调用域名:端口。例如helloworld-grpc.default.example.com:80。

    3. 单击绿色执行按钮,查看服务端返回的响应是否正常。

相关文档

您可以为自定义域名配置相应的HTTPS证书,请参见配置HTTPS证书访问。

相关文章

快速部署Serverless应用 2025-04-15 17:15

本文以Hello World示例为您介绍如何通过Knative快速部署一个Serverless应用。 前提条件

为Knative选择网关 2025-04-15 17:15

Knative网关提供了一种灵活的方式来接入外部流量,并将这些流量路由到不同的Knative服务上。ACK Knative支持ALB、MSE、ASM、Kourier四种网关,每种网关都有其特定的优势和适用场景。本文从产品定位、产品架构、基础路由、运维能力、性能特点、支持的主流协议和可观测能力进行对比

使用Kourier网关 2025-04-15 17:15

Kourier是一个基于Envoy架构实现的轻量级网关,是Knative社区提供的开源网关实现,提供Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。 前提条件

使用ALB网关 2025-04-15 17:15

在大规模Web应用、需要精细化流量分发、需要自动弹性伸缩等对HTTP/HTTPS请求有复杂路由需求的应用中,推荐您基于ALB网关实现Knative服务的流量分发和路由。ALB是专门面向HTTP、HTTPS和QUIC等应用层负载场景的负载均衡服务,具备超强弹性及大规模七层流量处理能力。ALB网关是一款

使用ASM网关 2025-04-15 17:15

在大规模分布式系统、微服务应用流量管理等场景下,特别是已采用或计划采用Istio作为服务网格框架的业务场景中,推荐您使用ASM网关实现Knative服务的流量分发和路由。ASM网关兼容社区Istio规范,控制面组件由ACK托管,简化了服务治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安

使用MSE网关并实现精准自动弹性 2025-04-15 17:15

在微服务架构的业务场景下,推荐您使用MSE网关实现Knative服务的流量分发和路由。MSE网关是一款全托管免运维的网关,支持实现基于请求的精准自动弹性,即精准地控制单个Pod的请求并发处理数,能够满足大规模云原生分布式应用的流量治理诉求。 前提条件 已在集群中部署Knative,请参见

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号