1. 程式人生 > 實用技巧 >Istio路由配置

Istio路由配置

前提

  1. 在kubernetes正確安裝Istio。
  2. 部署 Bookinfo 示例應用程式。
  3. 瞭解流量管理基本概念,如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具體內容為:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: productpage
  5. spec:
  6. hosts:
  7. - productpage
  8. http:
  9. - route:
  10. - destination:
  11. host: productpage
  12. subset: v1
  13. ---
  14. apiVersion: networking.istio.io/v1alpha3
  15. kind: VirtualService
  16. metadata:
  17. name: reviews
  18. spec:
  19. hosts:
  20. - reviews
  21. http:
  22. - route:
  23. - destination:
  24. host: reviews
  25. subset: v1
  26. ---
  27. apiVersion: networking.istio.io/v1alpha3
  28. kind: VirtualService
  29. metadata:
  30. name: ratings
  31. spec:
  32. hosts:
  33. - ratings
  34. http:
  35. - route:
  36. - destination:
  37. host: ratings
  38. subset: v1
  39. ---
  40. apiVersion: networking.istio.io/v1alpha3
  41. kind: VirtualService
  42. metadata:
  43. name: details
  44. spec:
  45. hosts:
  46. - details
  47. http:
  48. - route:
  49. - destination:
  50. host: details
  51. subset: v1
  52. ---

由於配置傳播最終是一致的,因此請等待幾秒鐘以使虛擬服務生效。使用以下命令顯示已定義的路由:

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具體內容如下:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: reviews
  5. spec:
  6. hosts:
  7. - reviews
  8. http:
  9. - match:
  10. - headers:
  11. end-user:
  12. exact: jason
  13. route:
  14. - destination:
  15. host: reviews
  16. subset: v2
  17. - route:
  18. - destination:
  19. host: reviews
  20. subset: v1

確認規則已建立

kubectl get virtualservice reviews -o yaml
  1. 在 Bookinfo 應用程式的 /productpage 上,以使用者 jason 身份登入,谷歌瀏覽器可以使用modheader外掛。
  2. 重新整理瀏覽器,星級評分顯示在每個評論旁邊。
  3. 以其他使用者身份登入(選擇您想要的任何名稱)。
  4. 重新整理瀏覽器。現在星星消失了。這是因為除了 Jason 之外,所有使用者的流量都被路由到 reviews:v1。已成功配置 Istio 以根據使用者身份路由流量。

原理介紹

在此任務中,您首先使用 Istio 將 100% 的請求流量都路由到了 Bookinfo 服務的 v1 版本。 然後再設定了一條路由規則,在 productpage 服務中添加了路由規則,這一規則根據請求的 end-user 自定義 header 內容,選擇性地將特定的流量路由到了 reviews 服務的 v2 版本。

轉自:https://blog.csdn.net/u013538795/article/details/89948526