日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 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/v1 kind: Service metadata:name: websocket-chat spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/websocket-chat:2019-10-15ports:- name: http1containerPort: 8080

代碼 clone 下來以后執行 kubectl apply -f service.yaml 把服務部署到 Knative 中,然后直接訪問服務地址即可使用。

查看 ksvc 列表,并獲取訪問域名。

└─# kubectl get ksvc NAME URL LATESTCREATED LATESTREADY READY REASON websocket-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/v1 kind: Service metadata:name: grpc-ping spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/grpc-ping-go:2019-10-15ports:- name: h2ccontainerPort: 8080

代碼 clone 下來以后執行 kubectl apply -f service.yaml 把服務部署到 Knative 中。

獲取 ksvc 列表和訪問域名:

└─# kubectl get ksvc NAME URL LATESTCREATED LATESTREADY READY REASON grpc-ping http://grpc-ping.default.serverless.kuberun.com grpc-ping-p2tft Unknown RevisionMissing websocket-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" -insecure 2019/10/16 11:35:07 Ping got hello - pong 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854794231 0800 CST m= 73.061909052 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854827273 0800 CST m= 73.061942072 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854835802 0800 CST m= 73.061950606 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854842843 0800 CST m= 73.061957643 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854849211 0800 CST m= 73.061964012 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854855249 0800 CST m= 73.061970049 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854861659 0800 CST m= 73.061976460 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854875071 0800 CST m= 73.061989873 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854905416 0800 CST m= 73.062020221 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.85491183 0800 CST m= 73.062026630 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.85492533 0800 CST m= 73.062040133 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854932285 0800 CST m= 73.062047083 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854946977 0800 CST m= 73.062061782 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854953311 0800 CST m= 73.062068112 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854966639 0800 CST m= 73.062081440 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854973939 0800 CST m= 73.062088739 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854985463 0800 CST m= 73.062100268 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854993275 0800 CST m= 73.062108073 2019/10/16 11:35:07 Got pong 2019-10-16 11:35:07.854999812 0800 CST m= 73.062114613 2019/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

歡迎加入 Knative 交流群

“ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術公眾號?!?/p>

總結

以上是生活随笔為你收集整理的如何在 Knative 中部署 WebSocket 和 gRPC 服务?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。