Istio路由配置
前提
- 在kubernetes正確安裝Istio。
- 部署 Bookinfo 示例應用程式。
- 瞭解流量管理基本概念,如destination rule、virtual service和subset等
任務
Istio Bookinfo 示例包含四個獨立的微服務,每個微服務都有多個版本。 其中一個微服務 reviews 的三個不同版本已經部署並同時執行。 為了說明這導致的問題,在瀏覽器中訪問 Bookinfo 應用程式的 /productpage 並重新整理幾次。 您會注意到,有時書評的輸出包含星級評分,有時則不包含。 這是因為沒有明確的預設服務版本路由,Istio 將以迴圈方式請求路由到所有可用版本。該例子中部分資源是網際網路資源(如js和圖片),所有需要有網路。
此任務的最初目標是應用將所有流量路由到微服務的 v1 版本的規則。稍後, 您將應用規則根據 HTTP 請求 header 的值路由流量。
應用 virtual service
要僅路由到一個版本,請應用為微服務設定預設版本的 virtual service。在這種情況下,如果您還沒有應用 destination rule,請先應用預設目標規則,即第十部分所描述的。
執行以下命令以應用 virtual service,將 Istio 配置為路由到 Bookinfo 的 v1 版本,最重要的是 reviews 服務的為v1 版本:
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
YAML具體內容為:
- apiVersion: networking.istio.io/v1alpha3
- kind: VirtualService
- metadata:
- name: productpage
- spec:
- hosts:
- - productpage
- http:
- - route:
- - destination:
- host: productpage
- subset: v1
- apiVersion: networking.istio.io/v1alpha3
- kind: VirtualService
- metadata:
- name: reviews
- spec:
- hosts:
- - reviews
- http:
- - route:
- - destination:
- host: reviews
- subset: v1
- apiVersion: networking.istio.io/v1alpha3
- kind: VirtualService
- metadata:
- name: ratings
- spec:
- hosts:
- - ratings
- http:
- - route:
- - destination:
- host: ratings
- subset: v1
- apiVersion: networking.istio.io/v1alpha3
- kind: VirtualService
- metadata:
- name: details
- spec:
- hosts:
- - details
- http:
- - route:
- - destination:
- host: details
- subset: v1
由於配置傳播最終是一致的,因此請等待幾秒鐘以使虛擬服務生效。使用以下命令顯示已定義的路由:
kubectl get virtualservices -o yaml
您還可以使用以下命令顯示相應的 subset 定義:
kubectl get destinationrules -o yaml
測試新的路由配置
再次重新整理 Bookinfo 應用程式的 /productpage 測試新配置。
在瀏覽器中開啟 Bookinfo 站點。 URL 為 http://$GATEWAY_URL/productpage,其中 GATEWAY_URL 是外部的入口 IP 地址,如 Bookinfo 文件中所述。無論重新整理多少次,頁面的評論部分都不會顯示評級星標。這是因為將 Istio 配置為將評論服務的所有流量路由到版本 reviews:v1,並且此版本的服務不訪問星級評分服務。
基於使用者身份的路由
您將更改路由配置,以便將來自特定使用者的所有流量路由到特定服務版本。在這種情況下,來自名為 Jason 的使用者的所有流量將被路由到服務 reviews:v2。
Istio 對使用者身份沒有任何特殊的內建機制。這個例子的基礎在於, productpage 服務在所有針對 reviews 服務的呼叫請求中 都加自定義的 HTTP header,從而達到在流量中對終端使用者身份識別的這一效果。reviews:v2 是包含星級評分功能的版本。
執行以下命令以啟用基於使用者的路由
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
YAML具體內容如下:
- apiVersion: networking.istio.io/v1alpha3
- kind: VirtualService
- metadata:
- name: reviews
- spec:
- hosts:
- - reviews
- http:
- - match:
- - headers:
- end-user:
- exact: jason
- route:
- - destination:
- host: reviews
- subset: v2
- - route:
- - destination:
- host: reviews
- subset: v1
確認規則已建立
kubectl get virtualservice reviews -o yaml
- 在 Bookinfo 應用程式的 /productpage 上,以使用者 jason 身份登入,谷歌瀏覽器可以使用modheader外掛。
- 重新整理瀏覽器,星級評分顯示在每個評論旁邊。
- 以其他使用者身份登入(選擇您想要的任何名稱)。
- 重新整理瀏覽器。現在星星消失了。這是因為除了 Jason 之外,所有使用者的流量都被路由到 reviews:v1。已成功配置 Istio 以根據使用者身份路由流量。
原理介紹
在此任務中,您首先使用 Istio 將 100% 的請求流量都路由到了 Bookinfo 服務的 v1 版本。 然後再設定了一條路由規則,在 productpage 服務中添加了路由規則,這一規則根據請求的 end-user 自定義 header 內容,選擇性地將特定的流量路由到了 reviews 服務的 v2 版本。
轉自:https://blog.csdn.net/u013538795/article/details/89948526