使用 Istio 的十個技巧

若是你們正在學習或使用 Istio,那麼如下有關 Istio 的十個技巧,可能會對你們進一步瞭解 Istio 和 Envoy Proxy 有所幫助。docker

使用 Kubectl Sniff 和 Wireshark安全

不知道你們有沒有據說過 Wireshark。Sniff 提供了一種抽象概念,讓咱們能夠偵聽那些經過 Wireshark 進入離開 Istio 代理的數據包。Sniff 很是適合於底層分析,它能夠將問題的根本緣由隔離到應用程序級和 Envoy 級。首先經過 global.proxy.privileged=true 在 IstioOperator CRD 上啓用特權模式,而後將如下注釋添加到 Deployment。負載均衡

在 Wireshark 中,咱們能夠捕捉 GRPC 請求並進行過濾,而後經過請求的生命週期來肯定 ingress 和 egress,最後移植本地服務,使用 BloomRPC 或 Postman 隔離鏈接問題。工具

Wireshark 中的篩選 GRPC 請求oop

首先使用 Envoy學習

經過在 docker-compose 文件中運行 Envoy 瞭解如何配置 Envoy 過濾器鏈(filter chain),能夠更容易地對請求鏡像和 WASM 等更改進行原型改變(prototype change)。在將 Envoy 轉換爲 Istio 配置的過程當中,對 Envoy 足夠了解能夠提供不少幫助。測試

認真閱讀發行說明網站

在以前的 Istio 升級過程當中,不少人不當心錯過了一個更改,即 Envoy 狀態端口修改(15020->15021)。編碼

Istio 網站上的發行說明和升級指南spa

在 Istio Operator 上使用 Istioctl 生成聲明文件

最近有人從 v1.6 到 v1.7 進行了升級,並注意到 Operator 因爲結構(標籤->實物標籤:EnvoyFilter)的更改而沒法完成調協(reconciliation loop),但願 Operator 可以以向後兼容的方式處理此升級。生成的聲明文件很容易經過 Istio Overlay API 或 Kustomize 來處理未經過 Operator CRD 公開的字段。

找到示例聲明文件後,確認示例與代理容器中的 Envoy API/Protobuf 版本對齊。

若是將 Istio Ingress Gateway 用做 GKE 上集羣的 Ingress,並要啓用 HTTPS,請在 Istio Ingress Gateway 服務的單個上游設置一個 Ingress 對象。

添加靜態 IP 計算地址(Static IP Compute Address)、證書管理(Managed Certificate)和 BackendConfig(設置運行情況檢查),能夠方便咱們經過負載均衡器提供安全訪問。

請求鏡像是在生產環境中進行測試的有力手段。

若是在安裝中啓用了此功能,但出現下游服務拒絕請求的狀況,注意查看主機頭(Host Header)。Envoy 將 「-shadow」 附加到主機頭。若是使用的是 Vanilla Envoy,那能夠經過建立一個單獨的偵聽器來解決該問題。咱們也能夠經過 Istio 添加一個單獨的 Envoy 部署來重寫標頭。

一樣,若是要使用 istio-ingressgateway 集羣鏡像在邊緣實現請求鏡像,要在 mesh 虛擬服務中添加本地服務名稱和關鍵字。

JWT 驗證提供了一個有趣的抽象概念,它容許 service 知道它是否經過身份驗證。

與「退出(opt out)」基於工做負載選擇器標籤方案相比,「加入(opt in)」可能會暴露的通過身份驗證的 service。使用 Open Policy Agent 之類的工具能夠在工做負載上強制使用必需的標籤,以確保全部 service 上都帶有身份驗證標籤。

GRPC JSON 轉碼器能夠幫助工程師將程序代碼從 JSON 轉碼爲 GRPC。

不過,將部署更改到 proto descriptor 的過程有些笨重。有種解決方法是用 base64 編碼 proto descriptor 並將其做爲 secret 安裝,但因爲在 Protobuf 定義更改時,須要對二進制文件進行 base64 編碼,這很是麻煩,所以這種方法不太好。有種稍微好一點的方法是使用描述符(descriptor)構建容器鏡像,並將其做爲具備共享內存量的 initContainer 運行。在 pod 啓動後,initContainer 會將二進制文件複製到共享卷空間中,而且 Istio 代理容器能夠進行訪問。

Envoy 爲過濾器(filter)提供了一種修改虛擬主機特定配置的方法。

從 Istio 來講,這意味着能夠更改特定虛擬主機路徑上現有過濾器功能。此功能適用於特定過濾器,但不適用於 WASM 等過濾器。

原文連接:https://shrayk.medium.com/ten...

相關文章
相關標籤/搜索