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遇到了停機。
相關文章
- 使用 Bash shell 指令碼進行功能測試(轉)指令碼
- 使用jave1.0.2.jar進行音視訊轉碼JAR
- gRPC進階RPC
- 【轉】istio原始碼分析——mixer遙測報告原始碼
- idou老師教你學Istio 26:如何使用Grafana進行視覺化監控Grafana視覺化
- 使用APT對redhat進行更新(轉)APTRedhat
- js中對URL進行轉碼與解碼JS
- [URL轉碼]瀏覽器如何給URL進行轉碼的瀏覽器
- 進行統計的 awk 指令碼(轉)指令碼
- 使用GnuPG對檔案進行加密(轉)加密
- 使用XPathExpression類對XML進行排序 (轉)ExpressXML排序
- Istio最佳實踐:在K8s上透過Istio服務網格進行灰度釋出K8S
- 分析原始碼:istio mixer原始碼
- Istio Mixer Adapter開發 (三)自定義Mixer Grpc Adapter部署APTRPC
- 使用javascript如何給url進行編碼JavaScript
- 使用acorn對JavaScript程式碼進行解析。JavaScript
- 使用Lccwin32進行MySQL開發。 (轉)Win32MySql
- go使用grpcGoRPC
- GRPC的使用RPC
- 使用指令碼進行 SAP Spartacus 安裝工作指令碼
- 【原始碼】使用MATLAB進行ECG模擬原始碼Matlab
- 使用Git進行小專案程式碼管理Git
- 使用python進行密碼暴力破解Python密碼
- 使用Windows指令碼進行邏輯備份Windows指令碼
- 使用 Mitmdump 與 Python 指令碼進行密碼嗅探MITPython指令碼密碼
- Docker中使用Xhprof 對程式碼進行效能分析Docker
- 使用shell指令碼對Nginx日誌進行切分指令碼Nginx
- 使用NSSecureCoding協議進行物件編解碼協議物件
- 使用Faric+Git進行分散式程式碼管理Git分散式
- GRPC使用記錄RPC
- python 使用gRPCPythonRPC
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- 【轉】webshell檢測——使用auditd進行system呼叫審計Webshell
- 【轉】使用PowerDesigner 15.2對Oracle進行反向工程Oracle
- 使用ERRORSTACK進行錯誤跟蹤及診斷(轉)Error
- 怎樣使用AJAX進行應用程式開發(轉)
- 使用RPM包對RedHat進行核心升級(轉)Redhat