一、Istio簡介
Istio是一個由Google、IBM和Lyft聯合開發的開源項目,旨在解決微服務架構中的一系列問題,包括:服務間通信、服務監控和觀察、流量管理等等。基於Envoy代理實現,通過一系列組件來構建服務網格,提供對微服務的全面治理。
相比於傳統的三層網關,包括L7負載均衡,故障恢復和A/B測試等功能,Istio提供了微服務級別的流量管理和安全性,包括流量路由、請求重試、流量限制和端到端的安全性等。此外,它還可以通過自動追蹤服務間的調用關係、性能指標和日誌信息等來幫助跟蹤問題和分析瓶頸。
二、部署Istio
1. 配置Istio CLI
在開始部署Istio之前,需要安裝Istio CLI。可以通過以下命令來下載最新的Istio版本:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.10.3 TARGET_ARCH=x86_64 sh -
其中TARGET_ARCH應該更具系統架構設置;ISTIO_VERSION應根據版本號進行更改。
接下來,將Istio CLI添加到PATH路徑中:
cd istio-X.X.X/bin export PATH=$PWD:$PATH
“X.X.X”應該替換為您下載的Istio版本號。
2. 安裝Istio
可以使用helm或kubectl安裝Istio。此處以helm為例。執行以下命令來部署Istio:
helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.10.3/charts/ helm install istio-base istio.io/base -n istio-system helm install istiod istio.io/istio -n istio-system
稍等片刻,可以使用以下命令來確保所有Istio組件都已成功安裝:
kubectl get pods -n istio-system
應該看到類似如下的輸出:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-6fb7454f96-ckjzs 1/1 Running 0 1m istio-ingressgateway-6fb7454f96-s4lrv 1/1 Running 0 1m istiod-784dc5b75-pxsqq 1/1 Running 0 1m prometheus-9f5d4cf84-tklfz 2/2 Running 0 1m
這表明Istio已經成功地部署在Kubernetes集群上了。
三、應用Istio進行服務管理和治理
1. 部署示例應用
為了演示Istio的功能,可以部署一個示例應用,並使用Istio進行流量管理和安全性控制。
首先,將示例應用Bookinfo部署到Kubernetes中,可以使用如下命令:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/platform/kube/bookinfo.yaml
等待片刻,可以通過以下命令來確保所有的服務和Pod都已經成功運行:
kubectl get pods
2. 配置Istio網關
在使用Istio進行流量管理之前,需要在Kubernetes中配置一個網關。可以使用以下命令來創建一個Istio網關:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/networking/bookinfo-gateway.yaml
該命令將配置一個Istio網關,使得可以通過其訪問Bookinfo應用程序。
3. 流量路由和負載平衡
為了了解Istio的流量管理功能,可以使用以下命令來確保Istio代理已經注入到所有服務中:
kubectl get pods -n istio-system -l app=istio-sidecar-injector
可以看到所有服務的Pod都已經成功注入了Istio代理。
下一步,可以使用如下命令來將所有流量路由到v1版本的reviews服務:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/networking/virtual-service-all-v1.yaml
現在,所有流量都將進入v1版本的reviews服務。可以使用以下命令來驗證:
curl -s -o /dev/null -w "%{http_code}\n" "http://$GATEWAY_URL/productpage"
GATEWAY_URL應該替換為Istio網關的URL。
如果一切正常,應該看到輸出為200的HTTP狀態碼。
接下來,可以使用以下命令來將50%的流量路由到v2版本的reviews服務,50%的流量路由到v3版本的reviews服務:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
現在,可以多次訪問Productpage,觀察各版本的Reviews服務是否被正確調用。
4. 流量限制和請求重試
為了了解Istio的流量限制和請求重試功能,可以使用以下命令來配置:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml
該YAML文件配置了限制某個服務的QPS,以及在注入請求延遲和重試。
5. 安全性控制
除了流量管理功能外,Istio還提供了端到端的安全性控制。使用以下命令,可以啟用Istio的MTLS功能,以允許僅強制要求來自Istio代理的加密通信:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/security/bookinfo-tls.yaml
該命令將啟用Istio的MTLS功能,並添加了用於證書管理的Kubernetes Secret。
總結
以上就是使用Istio進行服務網格化管理的完整指南。Istio提供了豐富的功能,包括流量管理、日誌跟蹤和端到端的安全控制等,幫助企業更好地管理微服務架構。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295623.html