系列文章
- istio 實戰 一 Kubernetes 中快速搭建 istio
- istio 實戰 二 bookinfo 部署
- istio 實戰 三 智能路由
- istio 實戰 四 權重路由以及監控
- istio 實戰 五 網格可視化 - kiali
- istio 實戰 六 全鏈路監控 - Jaeger
簡介
上文介紹到 istio bookinfo,瀏覽器訪問 product 服務,界面五角星顏色發生變化, 這是通過service 訪問 details、reviews 服務以及不同的版實現。
如何通過istio智能路由訪問details、review是服務的某個版本,使用 Bookinfo 示例應用,演示運行中的應用進行請求路由的動態配置以及故障注入的方法。
前提
- kubernetes 集羣 基於centos7 搭建 1.14 kubernetes 集羣
- Istio 1.2.4: istio 實戰 一 Kubernetes 中快速搭建 istio
- bookinfo: istio 實戰 二 bookinfo 部署
istio 組件
- 數據面
- envoy
- 控制面板
- Pilot:服務發現、流量管理
- Mixer:訪問控制、遙測
- Citadel:終端用戶認證、流量加密
istio 管理基礎概念
- Gateway: 類似於k8s ingress, HTTP/TCP 流量配置負載均衡器,流量入口
- VirtualService: 定義路由規則,控制流量路由到服務上的各種行爲
- DestinationRule: 在 VirtualService 路由生效後,配置應用與請求的策略集
- ServiceEntry: 網格內部請求外部服務的策略
任務
-
- 流量全部導向 reviews 服務的 v1 版本。(reviews:v1 不包含星級評分功能的版本)
-
- 特定用戶的請求發送給 v2 版本,其他用戶則不受影響(reviews:v2 是包含星級評分功能的版本)
任務一操作步驟
1.1 yaml 解析
virtual-service-all-v1.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
---
- 該配置中流量的目標主機是 reviews,如果該服務和規則部署在 Kubernetes 的 default namespace 下的話,對應於 Kubernetes 中的服務的 DNS 名稱就是 reviews.default.svc.cluster.local。
- 我們在 hosts 配置了服務的名字只是表示該配置是針對 reviews.default.svc.cluster.local 的服務的路由規則,但是具體將對該服務的訪問的流量路由到哪些服務的哪些實例上,就是要通過 destination 的配置了。
- 我們看到上面的 VirtualService 的 HTTP 路由中還定義了一個 destination。destination 用於定義在網絡中可尋址的服務,請求或連接在經過路由規則的處理之後,就會被髮送給 destination。destination.host 應該明確指向服務註冊表中的一個服務。Istio 的服務註冊表除包含平臺服務註冊表中的所有服務(例如 Kubernetes 服務、Consul 服務)之外,還包含了 ServiceEntry 資源所定義的服務。VirtualService 中只定義流量發送給哪個服務的路由規則,但是並不知道要發送的服務的地址是什麼,這就需要 DestinationRule 來定義了。
- subset 配置流量目的地的子集,下文會講到。VirtualService 中其實可以除了 hosts 字段外其他什麼都不配置,路由規則可以在 DestinationRule 中單獨配置來覆蓋此處的默認規則。
1.2 應用 virtual service
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
1.3 測試
瀏覽器中打開http://ingressip:port/productpage 刷新
v1版本的服務不訪問星級評分服務,無論您刷新多少次,頁面的評論部分都不會顯示評級星標。
此時已經成功的將所有流量路由到版本 reviews:v1。
任務二 操作步驟
2.1 yaml解析
virtual-service-reviews-test-v2.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
2.2 應用 virtual service
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
2.3 測試
- 在 Bookinfo 應用程序的 /productpage 上,以用戶 jason 身份登錄。
刷新瀏覽器。你看到了什麼?星級評分顯示在每個評論旁邊。 - 以其他用戶身份登錄(選擇您想要的任何名稱)。
刷新瀏覽器。現在星星消失了。這是因爲除了 Jason 之外,所有用戶的流量都被路由到 reviews:v1。
您已成功配置 Istio 以根據用戶身份路由流量。