不使用 Gateway API 的入門指南
本指南可讓您快速評估 Istio,僅使用其舊版 API。如果您想使用 Kubernetes Gateway API,請參閱該範例。如果您已熟悉 Istio 或有興趣安裝其他組態設定檔或進階的部署模型,請參閱我們的 我應該使用哪種 Istio 安裝方法? 常見問題頁面。
這些步驟需要您有一個執行 Kubernetes 支援版本 (1.28、1.29、1.30、1.31) 的叢集。您可以使用任何支援的平台,例如 Minikube 或 平台特定設定指示中指定的其他平台。
依照這些步驟開始使用 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
組態設定檔。它被選擇為具有一組適合測試的預設值,但還有其他用於生產或效能測試的設定檔。$ istioctl install --set profile=demo -y ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete
新增命名空間標籤,指示 Istio 在您稍後部署應用程式時自動注入 Envoy Sidecar Proxy
$ kubectl label namespace default istio-injection=enabled namespace/default labeled
部署範例應用程式
$ 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
應用程式將會啟動。當每個 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
驗證到目前為止一切運作正常。執行此命令以查看應用程式是否在叢集內部執行,並透過檢查回應中的頁面標題來提供 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,它會將路徑對應到網格邊緣的路由。
將此應用程式與 Istio Gateway 關聯
$ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@ gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
確保組態沒有問題
$ istioctl analyze ✔ No validation issues found when analyzing namespace: default.
判斷入口 IP 和連接埠
依照這些指示設定 INGRESS_HOST
和 INGRESS_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
執行以下命令以確定您的 Kubernetes 叢集是否在支援外部負載平衡器的環境中執行
$ kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 172.21.109.129 130.211.10.121 80:31380/TCP,443:31390/TCP,31400:31400/TCP 17h
如果已設定 EXTERNAL-IP
值,則您的環境具有可供 Ingress Gateway 使用的外部負載平衡器。如果 EXTERNAL-IP
值為 <none>
(或持續處於 <pending>
狀態),則您的環境未為 Ingress Gateway 提供外部負載平衡器。在這種情況下,您可以使用服務的 節點連接埠來存取 Gateway。
選擇與您的環境對應的指示
如果您已確定您的環境具有外部負載平衡器,請依照這些指示進行操作。
設定 Ingress IP 和連接埠
$ 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}')
如果您的環境沒有外部負載平衡器,請依照這些指示,並選擇一個節點連接埠。
設定 Ingress 連接埠
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
GKE
$ export INGRESS_HOST=worker-node-address
您需要建立防火牆規則,以允許 TCP 流量傳輸到 ingressgateway
服務的連接埠。執行以下命令以允許 HTTP 連接埠、安全連接埠 (HTTPS) 或兩者的流量
$ gcloud compute firewall-rules create allow-gateway-http --allow "tcp:$INGRESS_PORT"
$ gcloud compute firewall-rules create allow-gateway-https --allow "tcp:$SECURE_INGRESS_PORT"
IBM Cloud Kubernetes Service
$ ibmcloud ks workers --cluster cluster-name-or-id
$ export INGRESS_HOST=public-IP-of-one-of-the-worker-nodes
Docker For Desktop
$ export INGRESS_HOST=127.0.0.1
其他環境
$ export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
設定
GATEWAY_URL
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
確保已成功將 IP 位址和連接埠指派給環境變數
$ echo "$GATEWAY_URL" 127.0.0.1:80
驗證外部存取
使用瀏覽器檢視 Bookinfo 產品頁面,以確認 Bookinfo 應用程式可從外部存取。
執行以下命令以檢索 Bookinfo 應用程式的外部位址。
$ echo "http://$GATEWAY_URL/productpage"
將上一個命令的輸出貼到您的網頁瀏覽器中,並確認顯示 Bookinfo 產品頁面。
檢視儀表板
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 Sidecar Proxy 的標籤。如果不再需要,請使用以下命令將其移除
$ kubectl label namespace default istio-injection-