入門

本指南可讓您快速評估 Istio。如果您已經熟悉 Istio,或有興趣安裝其他組態設定檔或進階的部署模型,請參閱我們的我應該使用哪種 Istio 安裝方法?常見問題頁面。

您需要一個 Kubernetes 叢集才能繼續。如果您沒有叢集,可以使用kind或任何其他支援的 Kubernetes 平台

請依照下列步驟開始使用 Istio

  1. 下載並安裝 Istio
  2. 安裝 Kubernetes Gateway API CRD
  3. 部署範例應用程式
  4. 對外開放應用程式
  5. 檢視儀表板

下載 Istio

  1. 前往Istio 版本頁面下載適用於您作業系統的安裝檔案,或自動下載並解壓縮最新的版本(Linux 或 macOS)

    $ curl -L https://istio.dev.org.tw/downloadIstio | sh -
    
  2. 移動到 Istio 套件目錄。例如,如果套件是 istio-1.24.0

    $ cd istio-1.24.0
    

    安裝目錄包含

    • samples/ 中的範例應用程式
    • bin/ 目錄中的 istioctl 用戶端二進位檔案。
  3. istioctl 用戶端新增到您的路徑(Linux 或 macOS)

    $ export PATH=$PWD/bin:$PATH
    

安裝 Istio

在本指南中,我們使用 demo組態設定檔。選擇此設定檔是因為它具有一組適用於測試的良好預設值,但還有其他適用於生產、效能測試或OpenShift的設定檔。

Istio 閘道不同,建立Kubernetes 閘道預設也會部署閘道 Proxy 伺服器。因為我們不會使用它們,所以我們會停用通常作為 demo 設定檔一部分安裝的預設 Istio 閘道服務的部署。

  1. 使用 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.
    
  2. 新增命名空間標籤,指示 Istio 在稍後您部署應用程式時自動注入 Envoy 邊車 Proxy

    $ kubectl label namespace default istio-injection=enabled
    namespace/default labeled
    

安裝 Kubernetes Gateway API CRD

Kubernetes Gateway API CRD 預設不會安裝在大多數 Kubernetes 叢集上,因此請確保在開始使用 Gateway API 之前已安裝它們。

  1. 如果 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 命名空間中的任何應用程式。

  1. 部署Bookinfo 範例應用程式

    $ 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 邊車容器。

  2. 透過檢查回應中的頁面標題,驗證應用程式是否在叢集內部執行

    $ 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 應用程式已部署,但無法從外部存取。若要使其可存取,您需要建立一個入口閘道,將路徑對應到網格邊緣的路由。

  1. 為 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 位址設定負載平衡器,請閱讀入口閘道文件。

  2. 透過註釋閘道將服務類型變更為 ClusterIP

    $ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
    
  3. 若要檢查閘道的狀態,請執行

    $ 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 應用程式。

Bookinfo Application
Bookinfo 應用程式

如果您重新整理頁面,您應該會看到書籍評論和評分隨著請求在 reviews 服務的不同版本之間分配而改變。

檢視儀表板

Istio 與數個不同的遙測應用程式整合。這些應用程式可以幫助您瞭解服務網格的結構、顯示網格的拓撲,並分析網格的健全狀況。

請依照下列指示部署Kiali 儀表板,以及PrometheusGrafanaJaeger

  1. 安裝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
    
  2. 存取 Kiali 儀表板。

    $ istioctl dashboard kiali
    
  3. 在左側導覽功能表中,選取圖表,然後在命名空間下拉式選單中,選取default

    Kiali 儀表板會顯示您的網格概觀,其中包含 Bookinfo 範例應用程式中服務之間的關係。它還提供篩選器,以便將流量視覺化。

    Kiali Dashboard
    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 -
    
此資訊對您有幫助嗎?
您有任何改進建議嗎?

感謝您的回饋!