Tetrate - 使用Istio進行gRPC轉碼
在構建新的API(如HTTP/2,流,跨語言支援,伺服器推送等)時使用gRPC而不是HTTP/JSON有很多優點。最難的部分往往是如何處理HTTP/ JSON的遺留服務。這就是為什麼gRPC-JSON轉碼非常有吸引力的原因:我們可以實現基於gRPC的伺服器,但是使用HTTP/JSON介面暴露給其他傳統服務。因此通常,我們會使用gRPC閘道器或Google Cloud Endpoints等產品 來為我們處理gRPC-JSON轉碼,但Envoy也實現了轉碼!
Envoy將gRPC轉碼作為過濾器實現。在Tetrate,我們使用Istio作為我們的Envoy邊車的控制平面,Istio允許透過其EnvoyFilterCRD 進行自定義Envoy配置。為了利用這一點,我們建立了一個小工具gen-transcoder,它掃描gRPC原型描述符以自動生成準確的Envoy過濾器配置。它還支援過濾Envoy公開為HTTP/JSON的描述符中的服務或包等功能。 gen-transcoder是為了與CI / CD工作流程保持友好。在Tetrate,我們使用它來自動交付gRPC-JSON轉碼器配置,作為我們正常服務部署的一部分。
使用gen-transcoder是一個簡單的兩步過程:
第1步:在原型編譯期間生成原型描述符:
$ protoc \ -I path/to/google/protobufs \ -I path/to/your/protos \ --descriptor_set_out=path/to/output/dir/YOUR_SERVICE_NAME.proto-descriptor \ --include_imports \ --go_out=plugins=grpc:. \ path/to/your/protos/service.proto |
第2步:gen-transcoder用於生成Istio Envoy代理配置
$ gen-transcoder \ --port 9080 \ --service foo \ --packages proto.package.name \ --services='Service.*' \ --descriptor=path/to/output/dir/YOUR_SERVICE_NAME.proto-descriptor |
作為其中的一部分,我們已經包含了一些示例proto服務,這些服務被編譯為單個proto描述符,您可以透過以下方式使用它。
$ gen-transcoder \ --port 9080 \ --service echo \ --packages proto \ --services 'Echo.*' \ --descriptor \ proto/onebig.proto-descriptor |
這將EnvoyFilter專門針對服務proto.EchoService打包proto。
我們很樂意親自嘗試這個工具。您可以在此處下載原始碼。有關詳細資訊,請參閱README.md。
作為警告,EnvoyFilter必須謹慎使用Istio !如果推送了錯誤的過濾器配置,Envoy將拒絕配置更新並停止服務 - 在編寫此工具之前,我們在Tetrate遇到了停機。
相關文章
- 使用jave1.0.2.jar進行音視訊轉碼JAR
- 【轉】istio原始碼分析——mixer遙測報告原始碼
- js中對URL進行轉碼與解碼JS
- gRPC進階RPC
- idou老師教你學Istio 26:如何使用Grafana進行視覺化監控Grafana視覺化
- Istio Mixer Adapter開發 (三)自定義Mixer Grpc Adapter部署APTRPC
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- 【原始碼】使用MATLAB進行ECG模擬原始碼Matlab
- GRPC的使用RPC
- go使用grpcGoRPC
- python 使用gRPCPythonRPC
- 如何進行Linux下檔案編碼格式轉換Linux
- 使用 Mitmdump 與 Python 指令碼進行密碼嗅探MITPython指令碼密碼
- Istio最佳實踐:在K8s上透過Istio服務網格進行灰度釋出K8S
- Flutter 使用Navigator進行區域性跳轉頁面Flutter
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- 使用 MediaCodec 在 Android 上進行硬解碼Android
- 使用指令碼進行 SAP Spartacus 安裝工作指令碼
- 分析原始碼:istio mixer原始碼
- 帶你輕鬆使用Hyperf玩轉Grpc(一)環境搭建RPC
- 使用 Go 語言進行多時區時間轉換Go
- GRPC使用記錄RPC
- Docker中使用Xhprof 對程式碼進行效能分析Docker
- 使用shell指令碼對Nginx日誌進行切分指令碼Nginx
- Android中使用ffmpeg編碼進行rtmp推流Android
- 基於Istio/gRPC/Redis/BigQuery/Spring Boot/Spring Cloud和Stackdriver的微服務案例RPCRedisSpring BootCloud微服務
- (問)get請求會對中文及特殊字元進行轉碼字元
- Spring Boot中使用gRPC與Protobuf驗證教程原始碼Spring BootRPC原始碼
- 如何使用Vidmore Video Converter進行分割和旋轉裁剪影片?IDE
- [20220314]利用vim下使用gdb進行各種進位制轉換外掛.txt
- 使用 functrace 輔助進行 Go 專案原始碼分析Go原始碼
- 《Node.js設計模式》使用流進行編碼Node.js設計模式
- 使用springboot對各層的程式碼進行測試!Spring Boot
- .Net Core中使用GrpcRPC
- 將一個字串進行反轉:將字串中指定部分進行反轉。比如“abcdefg”反轉為”abfedcg”字串
- 構建無縫整合的gRPC-Web和Istio的雲原生應用教程RPCWeb
- idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸HTTPTLS
- idou老師教你學Istio 17 : 透過HTTPS進行雙向TLS傳輸HTTPTLS