第三十五章 九析帶你輕鬆完爆 Istio - 網絡彈性之超時(timeout)

系列文章:


總目錄索引:九析帶你輕鬆完爆 istio 服務網格系列教程

目錄

1 前言

2 邀約

3 網絡彈性介紹

4 超時時間

5 Istio 超時實例

5.1 jiuxi-client.yaml 文件

5.2 jiuxi-deploy.yaml

5.3 jiuxi-svc.yaml

5.4 jiuxi-vs.yaml

6 超時實例部署

6.1 Istio 注入

6.2 部署 k8s service:

6.3 部署 Istio 虛擬服務:

7 超時實例設置

8 超時實例驗


1 前言

        如果你對博客有任何疑問,請告訴我。

1.png


2 邀約

        你可以從 b 站搜索 “九析”,獲取免費的、更生動的視頻資料:

clipboard2.png


3 網絡彈性介紹

        網絡彈性也稱爲運維彈性,是指網絡在遇到災難事件時快速恢復和繼續運行的能力。災難事件的範疇很廣泛,比如長時間停電、網絡設備故障、惡意***等。


4 超時時間

        工作中常常會碰到這樣的開發、測試場景,比如:“對方處理請求時間過長,沒有及時響應,我們的程序要怎麼處理來確保不會無限期地等待”。常見的處理方式是被調用方使用 sleep 語句模擬響應時間過長,調用方設定請求超時時間過短,來造成請求超時的結果。但是這種處理方法有很多的弊端,第一:本屬於網絡彈性層的東西,卻需要在代碼中體現;第二:超時時間設置過長可能導致過多的延遲、設置過短可能導致不必要的失敗,因此超時時間需要動態調整。基於上面兩個弊端,Istio  使用虛擬服務來優雅實現超時處理。

spacer.gifclipboard3.png


5 Istio 超時實例

        本實例需要結合 Istio 故障注入模擬被調用方響應請求慢的場景,有關 Istio 失敗注入之延遲請參考本人的另外一篇博文,簡單到讓你分分鐘輕鬆完爆。

        該實例的架構圖如下:

spacer.gifclipboard4.png

        架構說明如下,本實例就是模擬客戶端調用 nginx,nginx 將請求轉發給 tomcat 的常見功能。tomcat 響應請求設置爲 5s(通過故障注入實現,相當於 sleep 5s 邏輯),nginx 設置 client 的請求超時時間爲 2s。因爲 nginx 需要在 2s 內返回給 client,而 nginx 請求 tomcat 卻需要 5s,因此模擬 client 調用 nginx 超時的情景。

        該實例資源文件一共有 4 個,分別如下:

jiuxi-client.yaml # 客戶端資源

jiuxi-deploy.yaml # nginx、tomcat 的 deployment 資源

jiuxi-svc.yaml # nginx、tomcat 的 service 資源

jiuxi-vs.yaml # Istio 虛擬資源

5.1 jiuxi-client.yaml 文件

        資源內容如下圖所示:

spacer.gifclipboard5.png

5.2 jiuxi-deploy.yaml

        資源內容如下圖所示:

spacer.gifclipboard6.png

5.3 jiuxi-svc.yaml

        資源內容如下圖所示:

spacer.gifclipboard7.png

5.4 jiuxi-vs.yaml

        Istio 虛擬服務資源內容如下所示:

spacer.gifclipboard8.png

        此虛擬服務有兩個知識點。

        第一:故障注入:

http:

- fault:

     delay:

         percentage:

         value: 100

     fixedDelay: 5s

        該設置說明每次調用 tomcat-svc 的 k8s service,都會延遲 5s 纔會調用。

        第二:調用超時:

hosts:

- nginx-svc

http:

- route:

  - destination:

     host: nginx-svc

timeout: 2s

        該設置說明調用 nginx-svc 的 k8s service,請求超時時間是 2s。


6 超時實例部署

        在上面我們編寫完樣例,下面準備部署。

6.1 Istio 注入

        需要對 client 和 deploy 資源文件進行 Istio 注入,將 client、nginx、tomcat 都放入到網格中。本人是手工注入 Istio 方式,如果你設置了自動 Istio 注入不會影響,一樣可以輕鬆完爆。

istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -

istioctl kube-inject -f jiuxi-deploy.yaml | kubectl apply -f -

        執行成功後,通過 kubectl get pods 查看 Istio 注入情況:

spacer.gifclipboard9.png

6.2 部署 k8s service

        部署 jiuxi-svc.yaml:

kubectl apply -f jiuxi-svc.yaml

6.3 部署 Istio 虛擬服務

        部署 jiuxi-vs.yaml:

kubectl apply -f jiuxi-vs.yaml


7 超時實例設置

        因爲要用到 nginx 對 tomcat 的轉發功能,因此需要對 nginx 做一些設置:

        登錄 nginx pod:

kubectl exec -it nginx-7559f7d487-djzbb -- sh

        編輯 nginx 配置文件:

vi /etc/nginx/conf.d/default.conf

        添加和修改如下內容:

spacer.gifclipboard10.png

        編輯完後,再執行如下語句驗證配置和讓配置生效:

spacer.gifclipboard11.png

        自此,整個樣例配置和部署完畢。


8 超時實例驗證

        登錄 client,執行如下語句:

kubectl exec -it client-5b77d5949f-nzdtl -- sh # 別照抄本人 pod,根據各自情況修改

        執行如下語句:

wget -q -O - http://nginx-svc

        執行結果如下所示:

spacer.gifclipboard12.png

        說明 timeout 樣例運行成功。

        也可以同樣驗證故障注入效果,執行如下語句:

wget -q -O - http://tomcat-svc:8080

        執行效果是請求 5s 後纔會返回,說明 Istio 故障注入(延遲 5s)運行成功。

        自此,九析帶你輕鬆完爆了 Istio。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章