InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

如何在 Knative 中部署 WebSocket 和 gRPC 服务?

  • 2019-10-26
  • 本文字数:2728 字

    阅读完需:约 9 分钟

如何在 Knative 中部署 WebSocket 和 gRPC 服务?

虽然说 Knative 默认就支持 WebSocket 和 gRPC,但在使用中会发现,有时想要把自己的 WebSocket 或 gRPC 部署到 Knative 中,还是存在各种不顺利。虽然最后排查发现,大多是自己的程序问题或是配置错误导致的。本文分别给出了一个 WebSocket 和 gRPC 的例子,当需要在生产或者测试环境部署相关服务时,可以使用本文给出的示例进行 Knative 服务的测试。


WebSocket

如果自己手动的配置 Istio Gateway 支持 WebSocket 就需要开启 websocketUpgrade 功能。但使用 Knative Serving 部署其实就自带了这个能力。本示例的完整代码放在 https://github.com/knative-sample/websocket-chat ,这是一个基于 WebSocket 实现的群聊的例子。


使用浏览器连接到部署的服务中就可以看到一个接收信息的窗口和发送信息的窗口。当你发出一条信息以后所有连接进来的用户都能收到你的消息。所以你可以使用两个浏览器窗口分别连接到服务中,一个窗口发送消息一个窗口接收消息,以此来验证 WebSocket 服务是否正常。


本示例是在 gorilla/websocket  基础之上进行了一些优化:


  • 代码中添加了 vendor 依赖,你下载下来就可以直接使用

  • 添加了 Dockerfile 和 Makefile 可以直接编译二进制和制作镜像

  • 添加了 Knative Sevice 的 yaml 文件(service.yaml),你可以直接提交到 Knative 集群中使用

  • 也可以直接使用编译好的镜像 registry.cn-hangzhou.aliyuncs.com/knative-sample/websocket-chat:2019-10-15


Knative Service 配置:


apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: websocket-chatspec:  template:    spec:      containers:        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/websocket-chat:2019-10-15          ports:            - name: http1              containerPort: 8080
复制代码


代码 clone 下来以后执行 kubectl apply -f service.yaml 把服务部署到 Knative 中,然后直接访问服务地址即可使用。


查看 ksvc 列表,并获取访问域名。


└─# kubectl get ksvcNAME             URL                                                    LATESTCREATED          LATESTREADY            READY   REASONwebsocket-chat   http://websocket-chat.default.serverless.kuberun.com   websocket-chat-7ghc9   websocket-chat-7ghc9   True
复制代码


现在使用浏览器打开 http://websocket-chat.default.serverless.kuberun.com 即可看到群聊窗口。



打开两个窗口,在其中一个窗口发送一条消息,另外一个窗口通过 WebSocket 也收到了这条消息。

gRPC

gRPC 不能通过浏览器直接访问,需要通过 client 端和 server 端进行交互。本示例的完整代码放在 https://github.com/knative-sample/grpc-ping-go ,本示例会给一个可以直接使用的镜像,测试 gRPC 服务。


Knative Service 配置:


apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: grpc-pingspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/grpc-ping-go:2019-10-15        ports:          - name: h2c            containerPort: 8080
复制代码


代码 clone 下来以后执行 kubectl apply -f service.yaml 把服务部署到 Knative 中。


获取 ksvc 列表和访问域名:


└─# kubectl get ksvcNAME             URL                                                    LATESTCREATED          LATESTREADY            READY     REASONgrpc-ping        http://grpc-ping.default.serverless.kuberun.com        grpc-ping-p2tft                               Unknown   RevisionMissingwebsocket-chat   http://websocket-chat.default.serverless.kuberun.com   websocket-chat-6hgld   websocket-chat-6hgld   True
复制代码


现在我们已经知道 gRPC  server 的地址是 grpc-ping.default.serverless.kuberun.com,端口是 80,那么我们可以发起测试请求:


└─# docker run --rm registry.cn-hangzhou.aliyuncs.com/knative-sample/grpc-ping-go:2019-10-15 /client -server_addr="grpc-ping.default.serverless.kuberun.com:80" -insecure2019/10/16 11:35:07 Ping got hello - pong2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854794231 +0800 CST m=+73.0619090522019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854827273 +0800 CST m=+73.0619420722019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854835802 +0800 CST m=+73.0619506062019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854842843 +0800 CST m=+73.0619576432019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854849211 +0800 CST m=+73.0619640122019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854855249 +0800 CST m=+73.0619700492019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854861659 +0800 CST m=+73.0619764602019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854875071 +0800 CST m=+73.0619898732019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854905416 +0800 CST m=+73.0620202212019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.85491183 +0800 CST m=+73.0620266302019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.85492533 +0800 CST m=+73.0620401332019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854932285 +0800 CST m=+73.0620470832019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854946977 +0800 CST m=+73.0620617822019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854953311 +0800 CST m=+73.0620681122019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854966639 +0800 CST m=+73.0620814402019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854973939 +0800 CST m=+73.0620887392019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854985463 +0800 CST m=+73.0621002682019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854993275 +0800 CST m=+73.0621080732019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854999812 +0800 CST m=+73.0621146132019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.855012676 +0800 CST m=+73.062127479
复制代码

小结

本文通过两个例子分别展示了 WebSocket 和 gRPC 的部署方法:


  • WebSocket 示例通过一个 chat 的方式展示发送和接受消息

  • gRPC 通过启动一个 client 的方式展示 gRPC 远程调用的过程


作者简介:


冬岛,阿里云容器平台工程师,负责阿里云容器平台 Knative 相关工作。了解更多 ACK 详情:https://www.aliyun.com/product/kubernetes。本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2019-10-26 08:001847

评论

发布
暂无评论
发现更多内容

【架构师训练营】第三周作业

Mr.hou

极客大学架构师训练营

「架构师训练营」第 3 周作业 - 模式与重构

guoguo 👻

极客大学架构师训练营

单例模式 & 组合模式

朱月俊

架构师训练营作业 -20200621

caibird1984

极客大学架构师训练营

代码重构:如何充实你的设计工具箱

SkyeDance

极客大学架构师训练营 代码重构

架构师训练营 Week 03 总结

Wancho

投资人李丰对中国商业模式创新的理解

石云升

投资 零售 模式创新

分布式时序数据库SilverDB-技术架构1

Hervor。

时序数据库 分布式架构 分布式存储

第三周作业

王鑫龙

极客大学架构师训练营

架构师训练营 - 第三周 - 作业

韩挺

Week 03 学习总结

卧石漾溪

极客大学架构师训练营

架构师课程第三周作业

杉松壁

改变要一点点来

Neco.W

正确阅读 进步

八张图彻底了解JDK8 GC调优秘籍-附PDF下载

程序那些事

JVM jdk8 「Java 25周年」 Java 25 周年 性能调优

架构师训练营-第三周作业

清风徐徐

为什么建议你使用枚举?

王磊

Java 枚举

架构师训练营 - 第三周 - 学习总结

韩挺

最近一周总结

朱月俊

谁再悄咪咪的吃掉异常,我上去就是一 JIO

楼下小黑哥

Java dubbo 踩坑经历

架构师训练营 No.3 周作业

连增申

架构训练营第三章课后作业单例模式 组合模式

周冬辉

【架构师训练营】第三周总结

Mr.hou

极客大学架构师训练营

架构师训练营第三周作业

大丁💸💵💴💶🚀🐟

架构师训练营 第三周作业

Glowry

极客大学架构师训练营

架构师训练营第三章总结

叮叮董董

Zookeeper面试题36问,再和面试官多聊半个点

Java小咖秀

zookeeper 负载均衡 面试 分布式协同 分布式系统

Week 03 命题作业

卧石漾溪

极客大学架构师训练营

第三周作业

CP

观察者模式详解

Seven七哥

设计模式 观察者模式

架构师训练营第三章作业

叮叮董董

BIGO全球计算平台的技术挑战

DT极客

  • 扫码添加小助手
    领取最新资料包
如何在 Knative 中部署 WebSocket 和 gRPC 服务?_文化 & 方法_冬岛_InfoQ精选文章