入門
本指南可讓您快速評估 Istio。如果您已經熟悉 Istio,或有興趣安裝其他組態設定檔或進階的部署模型,請參閱我們的我應該使用哪種 Istio 安裝方法?常見問題頁面。
您需要一個 Kubernetes 叢集才能繼續。如果您沒有叢集,可以使用kind或任何其他支援的 Kubernetes 平台。
請依照下列步驟開始使用 Istio
下載 Istio
前往Istio 版本頁面下載適用於您作業系統的安裝檔案,或自動下載並解壓縮最新的版本(Linux 或 macOS)
$ curl -L https://istio.dev.org.tw/downloadIstio | sh -
移動到 Istio 套件目錄。例如,如果套件是
istio-1.24.0
$ cd istio-1.24.0
安裝目錄包含
samples/
中的範例應用程式bin/
目錄中的istioctl
用戶端二進位檔案。
將
istioctl
用戶端新增到您的路徑(Linux 或 macOS)$ export PATH=$PWD/bin:$PATH
安裝 Istio
在本指南中,我們使用 demo
組態設定檔。選擇此設定檔是因為它具有一組適用於測試的良好預設值,但還有其他適用於生產、效能測試或OpenShift的設定檔。
與Istio 閘道不同,建立Kubernetes 閘道預設也會部署閘道 Proxy 伺服器。因為我們不會使用它們,所以我們會停用通常作為 demo
設定檔一部分安裝的預設 Istio 閘道服務的部署。
使用
demo
設定檔安裝 Istio,但不包含任何閘道$ istioctl install -f @samples/bookinfo/demo-profile-no-gateways.yaml@ -y ✔ Istio core installed ✔ Istiod installed ✔ Installation complete Made this installation the default for injection and validation.
新增命名空間標籤,指示 Istio 在稍後您部署應用程式時自動注入 Envoy 邊車 Proxy
$ kubectl label namespace default istio-injection=enabled namespace/default labeled
安裝 Kubernetes Gateway API CRD
Kubernetes Gateway API CRD 預設不會安裝在大多數 Kubernetes 叢集上,因此請確保在開始使用 Gateway API 之前已安裝它們。
如果 Gateway API CRD 尚未安裝,請安裝它們
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl apply -f -; }
部署範例應用程式
您已將 Istio 設定為將邊車容器注入您部署在 default
命名空間中的任何應用程式。
$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created
應用程式將會啟動。當每個 Pod 準備就緒時,Istio 邊車將會隨之部署。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 <none> 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25m productpage ClusterIP 10.0.0.57 <none> 9080/TCP 28s ratings ClusterIP 10.0.0.33 <none> 9080/TCP 29s reviews ClusterIP 10.0.0.28 <none> 9080/TCP 29s
和
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
請注意,這些 Pod 顯示
READY 2/2
,確認它們具有其應用程式容器和 Istio 邊車容器。透過檢查回應中的頁面標題,驗證應用程式是否在叢集內部執行
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
對外開放應用程式
Bookinfo 應用程式已部署,但無法從外部存取。若要使其可存取,您需要建立一個入口閘道,將路徑對應到網格邊緣的路由。
為 Bookinfo 應用程式建立一個Kubernetes 閘道
$ kubectl apply -f @samples/bookinfo/gateway-api/bookinfo-gateway.yaml@ gateway.gateway.networking.k8s.io/bookinfo-gateway created httproute.gateway.networking.k8s.io/bookinfo created
預設情況下,Istio 會為閘道建立一個
LoadBalancer
服務。由於我們將透過通道存取此閘道,因此我們不需要負載平衡器。如果您想瞭解如何為外部 IP 位址設定負載平衡器,請閱讀入口閘道文件。透過註釋閘道將服務類型變更為
ClusterIP
$ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
若要檢查閘道的狀態,請執行
$ kubectl get gateway NAME CLASS ADDRESS PROGRAMMED AGE bookinfo-gateway istio bookinfo-gateway-istio.default.svc.cluster.local True 42s
存取應用程式
您將透過剛佈建的閘道連線到 Bookinfo productpage
服務。若要存取閘道,您需要使用 kubectl port-forward
命令
$ kubectl port-forward svc/bookinfo-gateway-istio 8080:80
開啟您的瀏覽器並瀏覽至 https://127.0.0.1:8080/productpage
以檢視 Bookinfo 應用程式。
如果您重新整理頁面,您應該會看到書籍評論和評分隨著請求在 reviews
服務的不同版本之間分配而改變。
檢視儀表板
Istio 與數個不同的遙測應用程式整合。這些應用程式可以幫助您瞭解服務網格的結構、顯示網格的拓撲,並分析網格的健全狀況。
請依照下列指示部署Kiali 儀表板,以及Prometheus、Grafana 和Jaeger。
安裝Kiali 和其他附加元件,並等待它們部署完成。
$ kubectl apply -f samples/addons $ kubectl rollout status deployment/kiali -n istio-system Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available... deployment "kiali" successfully rolled out
存取 Kiali 儀表板。
$ istioctl dashboard kiali
在左側導覽功能表中,選取圖表,然後在命名空間下拉式選單中,選取default。
Kiali 儀表板會顯示您的網格概觀,其中包含
Bookinfo
範例應用程式中服務之間的關係。它還提供篩選器,以便將流量視覺化。Kiali 儀表板
下一步
恭喜您完成評估安裝!
這些任務是初學者使用此 demo
安裝來進一步評估 Istio 功能的好地方
在您自訂 Istio 以供生產使用之前,請參閱這些資源
加入 Istio 社群
我們歡迎您加入Istio 社群來提出問題並給予我們回饋。
解除安裝
若要刪除 Bookinfo
範例應用程式及其組態,請參閱Bookinfo
清理。
Istio 解除安裝會刪除 RBAC 權限和 istio-system
命名空間下所有階層的資源。忽略不存在的資源的錯誤是安全的,因為它們可能已依階層刪除。
$ kubectl delete -f @samples/addons@
$ istioctl uninstall -y --purge
預設不會移除 istio-system
命名空間。如果不再需要,請使用下列命令移除它
$ kubectl delete namespace istio-system
預設不會移除指示 Istio 自動注入 Envoy 邊車 Proxy 的標籤。如果不再需要,請使用下列命令移除它
$ kubectl label namespace default istio-injection-
如果您安裝了 Kubernetes Gateway API CRD,而現在想要移除它們,請執行下列其中一個命令
如果您執行了任何需要 實驗性版本 CRD 的任務
$ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v1.2.0" | kubectl delete -f -
否則
$ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl delete -f -