iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
DevOps

學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路系列 第 10

Day10 - 踏出學習 Istio 的第一步,完成 Microservices 流量切換

  • 分享至 

  • xImage
  •  

前言

Istio 是個很強大的工具,但同時也有一定的學習成本,若是能將 Istio 駕輕就熟,就可以對 Microservices 流量做到很精細的控管。那我們該如何學習呢,在 Istio Tasks 有很多實驗教學可供參考,本篇我們會介紹 Request Routing,帶你初步了解 Istio 的基本功能。

https://ithelp.ithome.com.tw/upload/images/20220919/20139235b6DuttF0LT.png

學會 Istio ,就可以為所欲為的控管 Microservices 流量

準備 Istio 實驗環境

在開始實驗之前,請先在 Kubernetes 準備好 Istio 環境,詳細可參考 Day06 教學,接著需要安裝 Bookinfo Application,並開啟 Sidecar 模式讓 Istio 管理,實際要如何操作可參考以下教學。

  1. 先將實驗環境清除乾淨
kubectl delete --all deployment
kubectl delete --all service
kubectl delete --all serviceaccount
  1. 在 dafault namespace 設定 istio-injection=enabled Label,允許 Sidecar 注入
kubectl label namespace default istio-injection=enabled --overwrite
kubectl get namespace -L istio-injection
  1. 使用 kubectl apply -f <file> 部屬 Bookinfo Application
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/bookinfo/platform/kube/bookinfo.yaml
  1. 使用 kubectl get pods 查看 Pods
kubectl get pods
# 等待直到所有 Pods 都建置完成
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-7d4d9d5fcb-qr4cg       2/2     Running   0          42s
productpage-v1-66756cddfd-74bzx   2/2     Running   0          41s
ratings-v1-85cc46b6d4-2kjfc       2/2     Running   0          42s
reviews-v1-777df99c6d-f5gzg       2/2     Running   0          42s
reviews-v2-cdd8fb88b-468mf        2/2     Running   0          42s
reviews-v3-58b6479b-lbtlp         2/2     Running   0          42s

https://ithelp.ithome.com.tw/upload/images/20220919/201392357AYbkVDZXs.png

Bookinfo Application 架構圖,與之前不同在於現在每個 Pod 都會部屬 Sidecar

  1. 使用 kubectl port-forward 將本機流量轉移到 Productage
kubectl port-forward svc/productpage 8080:9080
  1. 在瀏覽器輸入網址連接至服務
http://127.0.0.1:8080/productpage

https://ithelp.ithome.com.tw/upload/images/20220919/20139235RncgdljDaz.png

瀏覽器顯示的頁面,重新整理多次會發現 Reviews 會顯示三種不同的版本

Istio Request Routing 實驗

Bookinfo Application 預設會部屬三個版本的 Reviews 元件,現在會透過 Service 負載平衡機制將流量分散至不同的版本。在本次 Request Routing 實驗中,希望可以利用 Istio 的 DestinationRule 以及 VirtualService 將流量移轉至特定版本,下面就來實際操作看看。

  1. 建立 DestinationRule Yaml 檔案
  • destination_rule.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
  1. 建立 VirtualService Yaml 檔案
  • virtual_service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2

DestinationRule 與 VirtualService 為 Istio 的元件,完整介紹會在下一章提到,這裡先實際體驗看看使用後的效果如何

  1. 使用 kubectl apply -f <file> 部屬 DestinationRule 及 VirtualService
kubectl apply -f destination_rule.yaml
kubectl apply -f virtual_service.yaml
  1. 使用 kubectl get <type> 查看 DestinationRule 及 VirtualService 資訊
kubectl get destinationRule
kubectl get virtualService

(輸出結果)

# DestinationRule 資訊
NAME      HOST      AGE
reviews   reviews   76s
# VirtualService 資訊
NAME      GATEWAYS   HOSTS         AGE
reviews              ["reviews"]   80s

DestinationRule 與 VirtualService 都建置成功

  1. kubectl-forward 後,在瀏覽器輸入網址連接至服務
http://127.0.0.1:8080/productpage

https://ithelp.ithome.com.tw/upload/images/20220919/20139235TBwasL3N4f.png

在瀏覽器頁面中,可以看到 Reviews 顯示的皆為 Version 2 的內容

接著我們修改看看 VirtualService,使流量從 v2 切換至 v3 版本

# 修改前
- destination:
    host: reviews
    subset: v2
# 修改後
- destination:
    host: reviews
    subset: v3
  1. 修改 VirtualService Yaml 檔案
  • virtual_service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v3
  1. 使用 kubectl apply -f <file> 部屬修改後的 VirtualService Yaml 檔案
kubectl apply -f virtual_service.yaml
  1. kubectl-forward 後,在瀏覽器輸入網址連接至服務
http://127.0.0.1:8080/productpage

https://ithelp.ithome.com.tw/upload/images/20220919/2013923542scuZOWzi.png

在瀏覽器頁面中,可以看到 Reviews 顯示的皆為 Version 3 的內容

Request Routing 實驗原理

還記得在 Day8 我們做過相同實驗,當時是透過 Service 的 Label Serlector 機制,修改 versions 的 Label 以完成版本的切換。

https://ithelp.ithome.com.tw/upload/images/20220919/20139235BUaX2tK5KL.png

在 Day8 實驗中,使用到 Label Selector 將流量移轉至正確版本

在使用 Istio 後,因為在每個 Pod 上都建置了 Sidecar,此時就能定義 Istio 的相關元件如 DestinationRule 及 VirtualService ,apply 之後 Istio 的 Control Plane 就會對 Sidecar 下達規則,使通往 Reviews 的流量全部移轉至特定版本,藉以完成版本的切換。

https://ithelp.ithome.com.tw/upload/images/20220919/201392353Ktr65PWeC.png

本次實驗有了 Istio 後,就能用 Sidecar 控管 Microservices 之間的流量

總結

本章使用 Istio 的 DestinationRule 及 VirtualService 來實現不同版本的切換,下一章我們將介紹這兩個元件要如何配置,才能實際隨心所欲的控制流量。


上一篇
Day09 - 用 Kubernetes 好好的,是什麼理由讓你需要 Istio ?
下一篇
Day11 - 一次清楚搞懂 Istio Virtual Service 及 Destination Rule
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言