手摸手帶你 在Windows系統中安裝Istio

2023-05-30 12:00:53

Istio簡介

通過負載均衡、服務間的身份驗證、監控等方法,Istio 可以輕鬆地建立一個已經部署了服務的網路,而服務的程式碼只需很少更改甚至無需更改。

通過在整個環境中部署一個特殊的 sidecar 代理為服務新增 Istio 的支援,而代理會攔截微服務之間的所有網路通訊,然後使用其控制平面的功能來設定和管理 Istio,包括:

  • 為 HTTP、gRPC、WebSocket 和 TCP 流量自動負載均衡。
  • 通過豐富的路由規則、重試、故障轉移和故障注入對流量行為進行細粒度控制。
  • 可插拔的策略層和設定 API,支援存取控制、速率限制和配額。
  • 叢集內(包括叢集的入口和出口)所有流量的自動化度量、紀錄檔記錄和追蹤。
  • 在具有強大的基於身份驗證和授權的叢集中實現安全的服務間通訊。

在Istio官方檔案中,安裝Istio是以Linux或MacOS系統為例的,對於Windows使用者不是很友好,不過真難不倒我們。

安裝 Hyper-V

Hyper-V是微軟提出的一種系統管理程式虛擬化技術,能夠實現桌面虛擬化。Hyper-V 可用於 64 位 Windows 10 專業版、企業版和教育版。 它無法用於家庭版。

點選「小窗戶」,然後再點選「設定」,如下圖:

在搜尋方塊中輸入「啟用或關閉Windows功能」,如下圖:

點選「啟用或關閉Windows功能」後,勾選「Hyper-V」所有選項,如下圖:

點選「確定」,等一會兒就安裝好了。(可能需要重啟電腦)

安裝 Docker Desktop

存取https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe下載,雙擊Docker Desktop Installer.exe執行安裝程式。按照安裝嚮導上的說明授權安裝程式並繼續進行安裝。

安裝完成後,啟動Docker Desktop,等一會兒初始化完成後,將啟動入門教學:

這個教學包括一個簡單的練習,以構建範例Docker映象,將其作為容器執行,將映像推播並儲存到Docker Hub。

開啟 Kubernetes

在Docker Desktop的設定中,為 Kubernetes 設定 CPU 和 記憶體資源,建議分配4核或更多CPU,8GB或更多記憶體,如下圖:

在Docker Desktop的設定中,勾選開啟 Kubernetes 和 顯示系統容器,如下:

重啟Docker Desktop後,等待Kubernetes啟動,啟動成功後,可以看到Kubernetes的標籤變成綠色,並且在容器列表中可以看到Kubernetes相關的容器,如下圖:

安裝

到Istio的官方網站(https://github.com/istio/istio/releases)下載windows系統的安裝包,如下圖:

把壓縮包解壓到你覺得安逸的目錄裡,然後把istio-1.14.0\bin目錄新增到環境變數中。

開啟命令提示字元,執行istioctl version命令可以看到IIstio的版本資訊,說明環境變數設定成功,如下圖:

執行如下命令,安裝Istio:

istioctl install --set profile=demo -y

本次安裝採用 demo 設定組合。 選擇它是因為它包含了一組專為測試準備的功能集合,另外還有用於生產或效能測試的設定組合。

稍等片刻,我們就可以看到:

C:\萬貓學社> istioctl install --set profile=demo -y
 ✔ Istio core installed 
 ✔ Istiod installed 
 ✔ Egress gateways installed 
 ✔ Ingress gateways installed 
 ✔ Installation complete

執行如下命令,檢視Istio是否安裝成功:

kubectl get pods -n istio-system

可以看到 Istio 相關的 Pod 都處於 Running 狀態,如下圖:

給名稱空間新增標籤,指示 Istio 在部署應用的時候,自動注入 Envoy 邊車代理:

kubectl label namespace default istio-injection=enabled

至此,Istio已經在在Windows上安裝完成了。如果你還想進行一些學習或者測試Istio的功能,可以部署範例應用。

部署範例應用

進入istio-1.14.0目錄中,執行一下命令,部署 Bookinfo 範例應用:

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

如下圖:

稍等幾分鐘後,執行kubectl get pods命令我們就可以看到Bookinfo 範例應用相關的 Pod 都處於 Running 狀態,如下圖:

最後,我們通過檢查返回的頁面標題,來驗證應用是否已在叢集中執行,並已提供網頁服務:

# 獲取ratings的Pod名稱
kubectl get pod -l app=ratings -o jsonpath={.items[0].metadata.name}
# 替換掉ratings的Pod名稱
kubectl exec ratings的Pod名稱 -c ratings -- curl -s productpage:9080/productpage | findstr /r "<title>.*</title>"

具體操作如下圖:

返回的頁面標題為:<title>Simple Bookstore App</title>

最後,感謝你這麼帥,還給我點贊