不使用 Gateway API 的入門指南

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

這些步驟需要您有一個執行 Kubernetes 支援版本 (1.28、1.29、1.30、1.31) 的叢集。您可以使用任何支援的平台,例如 Minikube平台特定設定指示中指定的其他平台。

依照這些步驟開始使用 Istio

  1. 下載並安裝 Istio
  2. 部署範例應用程式
  3. 將應用程式開放給外部流量
  4. 檢視儀表板

下載 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

  1. 對於此安裝,我們使用 demo 組態設定檔。它被選擇為具有一組適合測試的預設值,但還有其他用於生產或效能測試的設定檔。

    $ istioctl install --set profile=demo -y
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Egress gateways installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    
  2. 新增命名空間標籤,指示 Istio 在您稍後部署應用程式時自動注入 Envoy Sidecar Proxy

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

部署範例應用程式

  1. 部署 Bookinfo 範例應用程式

    壓縮
    $ kubectl apply -f @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
    
  2. 應用程式將會啟動。當每個 Pod 準備就緒時,Istio Sidecar 將會與它一起部署。

    $ 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
    
  3. 驗證到目前為止一切運作正常。執行此命令以查看應用程式是否在叢集內部執行,並透過檢查回應中的頁面標題來提供 HTML 頁面

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

  1. 將此應用程式與 Istio Gateway 關聯

    壓縮
    $ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@
    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
    
  2. 確保組態沒有問題

    $ istioctl analyze
    ✔ No validation issues found when analyzing namespace: default.
    

判斷入口 IP 和連接埠

依照這些指示設定 INGRESS_HOSTINGRESS_PORT 變數,以存取 Gateway。使用索引標籤選擇您選擇的平台的指示

在新終端機視窗中執行此命令,以啟動 Minikube 通道,將流量傳送到您的 Istio Ingress Gateway。這將為 service/istio-ingressgateway 提供外部負載平衡器 EXTERNAL-IP

$ minikube tunnel

設定 Ingress 主機和連接埠

$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')

確保已成功將 IP 位址和連接埠指派給每個環境變數

$ echo "$INGRESS_HOST"
127.0.0.1
$ echo "$INGRESS_PORT"
80
$ echo "$SECURE_INGRESS_PORT"
443
  1. 設定 GATEWAY_URL

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
    
  2. 確保已成功將 IP 位址和連接埠指派給環境變數

    $ echo "$GATEWAY_URL"
    127.0.0.1:80
    

驗證外部存取

使用瀏覽器檢視 Bookinfo 產品頁面,以確認 Bookinfo 應用程式可從外部存取。

  1. 執行以下命令以檢索 Bookinfo 應用程式的外部位址。

    $ echo "http://$GATEWAY_URL/productpage"
    
  2. 將上一個命令的輸出貼到您的網頁瀏覽器中,並確認顯示 Bookinfo 產品頁面。

檢視儀表板

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 Sidecar Proxy 的標籤。如果不再需要,請使用以下命令將其移除

$ kubectl label namespace default istio-injection-
這項資訊有用嗎?
您是否有任何改進建議?

感謝您的回饋!