使用 Istio 的十個技巧

2021-10-10 11:43:40 字數 2910 閱讀 2960

如果大家正在學習或使用 istio,那麼以下有關 istio 的十個技巧,可能會對大家進一步了解 istio 和 envoy proxy 有所幫助。

使用 kubectl sniff 和 wireshark

不知道大家有沒有聽說過 wireshark。sniff 提供了一種抽象概念,讓我們可以偵聽那些通過 wireshark 進入離開 istio **的資料報。sniff 非常適合於底層分析,它可以將問題的根本原因隔離到應用程式級和 envoy 級。首先通過global.proxy.privileged=true在 istiooperator crd 上啟用特權模式,然後將以下注釋新增到 deployment。

在 wireshark 中,我們可以捕捉 grpc 請求並進行過濾,然後通過請求的生命週期來確定 ingress 和 egress,最後移植本地服務,使用 bloomrpc 或 postman 隔離連線問題。

wireshark 中的篩選 grpc 請求

首先使用 envoy

通過在 docker-compose 檔案中執行 envoy 了解如何配置 envoy 過濾器鏈(filter chain),可以更容易地對請求映象和 wasm 等更改進行原型改變(prototype change)。在將 envoy 轉換為 istio 配置的過程中,對 envoy 足夠了解可以提供很多幫助。

認真閱讀發行說明

在之前的 istio 公升級過程中,很多人不小心錯過了乙個更改,即 envoy 狀態埠修改(15020->15021)。

istio **上的發行說明和公升級指南

在 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 等過濾器。

十個正確使用 Redis 的技巧

redis 在當前的技術社群裡是非常熱門的。從來自 antirez 乙個小小的個人專案到成為記憶體資料儲存行業的標準,redis已經走過了很長的一段路。隨之而來的一系列最佳實踐,使得大多數人可以正確地使用 redis。下面我們將探索正確使用 redis 的10個技巧。okay,以挑戰這個命令開始這篇...

Redis正確使用的十個技巧

redis 在當前的技術社群裡是非常熱門的。從來自 antirez 乙個小小的個人專案到成為記憶體資料儲存行業的標準,redis已經走過了很長的一段路。1 停止使用 keys okay,以挑戰這個命令開始這篇文章,或許並不是乙個好的方式,但其確實可能是最重要的一點。很多時候當我們關注乙個redis例...

Redis正確使用的十個技巧

redis 在當前的技術社群裡是非常熱門的。從來自 antirez 乙個小小的個人專案到成為記憶體資料儲存行業的標準,redis 已經走過了很長的一段路。本文和大家分享的是使用redis 資料庫 1 停止使用 keys okay,以挑戰這個命令開始這篇文章,或許並不是乙個好的方式,但其確實可能是最重...