第二十章 九析帶你輕鬆完爆 Istio - virtual service 簡述

系列文章:


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

目錄

1 前言

2 邀約

3 virtual service 簡述

4 virtual service 樣例

    4.1 jiuxi-busybox.yaml

    4.2 jiuxi-deployment.yaml

    4.3 jiuxi-svc.yaml

    4.4 jiuxi-vs.yaml

5 Istio 注入

6 登錄客戶端驗證規則生效

7 總結


1 前言

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


2 邀約

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


3 virtual service 簡述

        在前面的章節中已經講過了 virtual service 的概念和理論了。這裏再做一個贅述,virtual service 是虛擬服務,它並非真正的 k8s service,首先不能通過 kubectl get svc 的方式找到它,其次在服務調用的時候也不會直接調用它,它就像 k8s service 背後的女人一樣,緊緊握着 k8s service 的老二,讓它乖乖按照自己的旨意將請求流量路由到網格內的特定目標。

如下是經常困擾初學者的問題,下面一一做解答。

問題一:Virtual service 跟 k8s service 的關係是什麼。屬於強綁定嗎?

回答:不是強綁定。virtual service 可以幫助 k8s service 在路由控制上做到更細粒度,不必只是 Round-Robin 策略。


問題二:Virtual service 必須要跟 Istio traffic management 的其他資源,比如 destination rule、gateway、service entries 捆綁使用嗎?

回答:否。Virtual service 自身就可以產生作用。當然它也可以跟網關,或者跟 destination rule 一起構造更加靈活、豐富的路由規則。


問題三:路由規則(Routing rules)跟 Destination rule 是同樣的東西嗎?

回答:否。路由規則是邏輯上的概念,而 Destination rule 是 Istio 的一種資源。你可以將 Destination rule 看做 Routing rules 的子集。


問題四:Virtaul service 的 hosts 字段填寫什麼內容?

回答:hosts 字段值是客戶端向服務發送請求時使用的地址。這個地址可以是 IP 地址、DNS 名稱、也可以是 k8s service 名稱(短名詞地址或者完整地址,比如 web-svc.default.cluster.local),如果是短名稱,要求可以隱式或者顯式地解析爲完全限定域名(FQDN)。當然也可以使用通配符(*)前綴,從而爲所有匹配的服務創建一套路由規則。虛擬服務主機實際上不一定是 Istio 服務註冊表的一部分,它們只是可以可尋址的虛擬目的地而已。這樣,也就可以爲網格內沒有可路由條目的虛擬主機流量進行建模。


4 virtual service 樣例

        下面介紹一個 virtual service 獨立作用的例子,本例需要的資源如下:

# 調用服務的客戶端

jiuxi-busybox.yaml

# 兩個 web 服務器: tomcat 和 httpd。模擬兩個微服務,需要被 Istio 注入,注入後就變成服務網格中的服務

jiuxi-deployment.yaml


# 定義 3 個服務:httpd-svc 指向 httpd,tomcat-svc 指向 tomcat。web-svc 同時指向 httpd 和 tomcat

jiuxi-svc.yaml


# Istio virtual service:定義虛擬服務,該虛擬服務作用在 web-svc 服務上,並設置簡單的路由規則(Routing rule,而非 Destination rule)

jiuxi-vs.yaml

        下面一一介紹各個資源文件明細。

4.1 jiuxi-busybox.yaml

        代碼如下圖所示:clipboard3.png

4.2 jiuxi-deployment.yaml

        代碼如下截圖所示:clipboard4.png

4.3 jiuxi-svc.yaml

        代碼如下截圖所示:clipboard5.png

4.4 jiuxi-vs.yaml

        代碼如下截圖所示:clipboard6.png


5 Istio 注入

        針對客戶端和 deployment 執行手工注入:

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

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


6 登錄客戶端驗證規則生效

        登錄到 busybox,然後通過如下命令均可以看到規則生效:

wget -q -O - http://web-svc:8080 # web-svc 是 k8s service。字母 O,非數字 0

wget -q -O - http://IP:8080 # IP 是 web-svc 的 ClusterIP。


7 總結

        自此九析帶你輕鬆完爆了 Istio traffic management 的 virtaul service。

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