作者?|?冬島??阿里云容器平臺工程師 導(dǎo)讀:雖然說 Knative 默認就支持 WebSocket 和 gRPC,但在使用..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在 Knative 中部署 WebSocket 和 gRPC 服務(wù)?

發(fā)布時間:2020-06-01 19:47:01 來源:網(wǎng)絡(luò) 閱讀:223 作者:阿里系統(tǒng)軟件技術(shù) 欄目:云計算

如何在 Knative 中部署 WebSocket 和 gRPC 服務(wù)?cdn.com/833c7ecf05588f257bcf7071d0f7b0d3b7aa298e.png">

作者?|?冬島??阿里云容器平臺工程師

導(dǎo)讀:雖然說 Knative 默認就支持 WebSocket 和 gRPC,但在使用中會發(fā)現(xiàn),有時想要把自己的 WebSocket 或 gRPC 部署到 Knative 中,還是存在各種不順利。雖然最后排查發(fā)現(xiàn),大多是自己的程序問題或是配置錯誤導(dǎo)致的。本文分別給出了一個 WebSocket 和 gRPC 的例子,當(dāng)需要在生產(chǎn)或者測試環(huán)境部署相關(guān)服務(wù)時,可以使用本文給出的示例進行 Knative 服務(wù)的測試。

WebSocket

如果自己手動的配置 Istio Gateway 支持 WebSocket 就需要開啟 websocketUpgrade 功能。但使用 Knative Serving 部署其實就自帶了這個能力。本示例的完整代碼放在 https://github.com/knative-sample/websocket-chat ,這是一個基于 WebSocket 實現(xiàn)的群聊的例子。

使用瀏覽器連接到部署的服務(wù)中就可以看到一個接收信息的窗口和發(fā)送信息的窗口。當(dāng)你發(fā)出一條信息以后所有連接進來的用戶都能收到你的消息。所以你可以使用兩個瀏覽器窗口分別連接到服務(wù)中,一個窗口發(fā)送消息一個窗口接收消息,以此來驗證 WebSocket 服務(wù)是否正常。

本示例是在 gorilla/websocket ?基礎(chǔ)之上進行了一些優(yōu)化:

  • 代碼中添加了 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-15
          ports:
            - name: http1
              containerPort: 8080

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

查看 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

現(xiàn)在使用瀏覽器打開 http://websocket-chat.default.serverless.kuberun.com 即可看到群聊窗口。

如何在 Knative 中部署 WebSocket 和 gRPC 服務(wù)?

打開兩個窗口,在其中一個窗口發(fā)送一條消息,另外一個窗口通過 WebSocket 也收到了這條消息。

gRPC

gRPC 不能通過瀏覽器直接訪問,需要通過 client 端和 server 端進行交互。本示例的完整代碼放在 https://github.com/knative-sample/grpc-ping-go ,本示例會給一個可以直接使用的鏡像,測試 gRPC 服務(wù)。

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-15
        ports:
          - name: h3c
            containerPort: 8080

代碼 clone 下來以后執(zhí)行 kubectl apply -f service.yaml 把服務(wù)部署到 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

現(xiàn)在我們已經(jīng)知道 gRPC ?server 的地址是 grpc-ping.default.serverless.kuberun.com,端口是 80,那么我們可以發(fā)起測試請求:

└─# 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

小結(jié)

本文通過兩個例子分別展示了 WebSocket 和 gRPC 的部署方法:

  • WebSocket 示例通過一個 chat 的方式展示發(fā)送和接受消息
  • gRPC 通過啟動一個 client 的方式展示 gRPC 遠程調(diào)用的過程

作者簡介:
冬島,阿里云容器平臺工程師,負責(zé)阿里云容器平臺 Knative 相關(guān)工作。
了解更多 ACK 詳情:https://www.aliyun.com/product/kubernetes

“ 阿里巴巴云×××icloudnative×××erverless、容器、Service Mesh等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)×××

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI