共用方式為


部署適用於 Azure Kubernetes Service 的 Istio 型服務網格附加元件

本文將說明如何在 Azure Kubernetes Service (AKS) 叢集上,安裝 Istio 型服務網格附加元件。

如需 Istio 和服務網格附加元件的詳細資訊,請參閱 適用於 Azure Kubernetes Service 的 Istio 型服務網格附加元件

開始之前

  • 附加元件需要安裝 Azure CLI 2.57.0 版或更新版本。 您可以執行 az --version 來驗證版本。 若要安裝或升級,請參閱安裝 Azure CLI

  • 若要尋找區域中有哪些 Istio 附加元件修訂的相關資訊,以及其與 AKS 叢集版本的相容性,請使用 az aks mesh get-revisions 命令:

    az aks mesh get-revisions --location <location> -o table
    
  • 請注意,如果您選擇使用任何 istioctl CLI 命令,則必須包含旗標以指向 Istio 的附加元件安裝: --istioNamespace aks-istio-system

設定環境變數

export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>

安裝 Istio 附加元件

本節包含在叢集建立期間安裝 Istio 附加元件,或使用 Azure CLI 為現有叢集啟用的步驟。 如果您要使用 Bicep 來安裝附加元件,請參閱使用 Bicep 安裝具有 Istio 服務網格附加元件的 AKS 叢集指南。 若要深入了解 AKS 叢集的 Bicep 資源定義,請參閱 Bicep managedCluster 參考

修訂選取項目

如果您啟用附加元件而不指定修訂,則會為您安裝預設支援的修訂。

若要指定修訂,請執行下列步驟。

  1. 使用 az aks mesh get-revisions 命令來檢查區域中不同 AKS 叢集版本可用的修訂。
  2. 根據可用的修訂,您可以在用於網格安裝的 enable 命令中包含 --revision asm-X-Y (例如:--revision asm-1-20) 旗標。

在叢集建立期間安裝網格

若要在建立叢集時安裝 Istio 附加元件,請使用 --enable-azure-service-mesh--enable-asm 參數。

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az aks create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${CLUSTER} \
    --enable-asm \
    --generate-ssh-keys    

安裝現有叢集的網格

下列範例會啟用現有 AKS 叢集的 Istio 附加元件:

重要

如果您的叢集上已經有 OSM 附加元件,您就無法在現有叢集上啟用 Istio 附加元件。 安裝 Istio 附加元件之前,請先解除安裝 OSM 附加元件。 如需詳細資訊,請參閱從 AKS 叢集解除安裝 OSM 附加元件。 Istio 附加元件只能在版本 >= 1.23 的 AKS 叢集上啟用。

az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

確認安裝成功

若要確認 Istio 附加元件已安裝在您的叢集上,請執行下列命令:

az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}  --query 'serviceMeshProfile.mode'

確認輸出會顯示 Istio

使用 az aks get-credentials 為您的 AKS 叢集使用認證:

az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

使用 kubectl 來確認 istiod (Istio 控制平面) Pod 是否順利執行:

kubectl get pods -n aks-istio-system

確認 Pod 的 Running 狀態為 istiod。 例如:

NAME                               READY   STATUS    RESTARTS   AGE
istiod-asm-1-18-74f7f7c46c-xfdtl   1/1     Running   0          2m
istiod-asm-1-18-74f7f7c46c-4nt2v   1/1     Running   0          2m

啟用側車插入

若要自動將側車安裝到任何新的 Pod,您需要使用對應至目前所安裝控制平面修訂的修訂標籤來標註命名空間。

如果您不確定已安裝了哪個修訂,請使用:

az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}  --query 'serviceMeshProfile.istio.revisions'

套用修訂標籤:

kubectl label namespace default istio.io/rev=asm-X-Y

重要

預設 istio-injection=enabled 標籤無法使用。 需要符合控制平面修訂 (例如:istio.io/rev=asm-1-18) 的明確版本控制。

若要使用 istioctl kube-inject 手動插入側車,您必須為 istioNamespace (-i) 和 revision (-r) 指定額外的參數。 例如:

kubectl apply -f <(istioctl kube-inject -f sample.yaml -i aks-istio-system -r asm-X-Y) -n foo

觸發側車插入

您可以部署提供進行測試的範例應用程式,或針對現有的工作負載觸發側車插入。

現有的應用程式

如果您有要新增至網格的現有應用程式,請確定其命名空間已標示為在上一個步驟中,然後重新啟動其部署以觸發側車插入:

kubectl rollout restart -n <namespace> <deployment name>

確認側車插入成功,方法是確保所有容器都就緒,並在 kubectl describe 輸出中尋找 istio-proxy 容器,例如:

kubectl describe pod -n namespace <pod name>

istio-proxy 容器是 Envoy 側車。 您的應用程式現在是資料平面的一部分。

部署範例應用程式

使用 kubectl apply 在叢集上部署應用程式範例:

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml

注意

使用 HTTP Proxy 進行輸出因特網存取的叢集必須設定服務專案。 如需安裝指示,請參閱 Azure Kubernetes Service 中的 HTTP Proxy 支援

確認叢集上已建立數個部署和服務。 例如:

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

使用 kubectl get services 來確認已成功建立服務:

kubectl get services

確認已部署下列服務:

NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.0.180.193   <none>        9080/TCP   87s
kubernetes    ClusterIP   10.0.0.1       <none>        443/TCP    15m
productpage   ClusterIP   10.0.112.238   <none>        9080/TCP   86s
ratings       ClusterIP   10.0.15.201    <none>        9080/TCP   86s
reviews       ClusterIP   10.0.73.95     <none>        9080/TCP   86s
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 都有 Running 的狀態,且在 READY 資料行中有兩個容器。 新增至每個 Pod 的第二個容器 (istio-proxy) 是 Istio 插入的 Envoy 側車,另一個是應用程式容器。

若要測試此應用程式範例與輸入,請參閱 下一步

刪除資源

使用 kubectl delete 刪除應用程式範例:

kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml

如果您不想在叢集上啟用 Istio 輸入,而且想要停用 Istio 附加元件,請執行下列命令:

az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

警告

將服務網格附加元件停用即會從叢集完全移除 Istio 控制平面。

Istio CustomResourceDefintion(CRD) 預設不會刪除。 若要清除,請使用:

kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')

使用 az group delete 刪除叢集和相關聯的資源:

az group delete --name ${RESOURCE_GROUP} --yes --no-wait

下一步