共用方式為


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

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

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

Tip

你可以使用 Azure Copilot 來協助將 Istio 部署到 Azure 入口網站的 AKS 叢集。 欲了解更多資訊,請參閱「 使用 Azure Copilot 高效地處理 AKS 叢集」。

開始之前

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

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

    az aks mesh get-revisions --location <location> -o table
    

    如需 Istio 附加元件與 AKS 相容性的詳細資訊,請參閱 相容性支援原則

  • 在某些情況下,先前安裝的 Istio CRD 可能不會在卸載時自動清除。 確定已刪除現有的 Istio CRD:

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

    建議也從 Istio 的自我管理安裝清除其他資源,例如 ClusterRoles、MutatingWebhookConfigurations 和 ValidatingWebhookConfigurations。

  • 請注意,如果您選擇使用任何 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 參考

Note

如果您需要排定在特定節點的 istiod 和輸入/輸出閘道 Pod,您可以使用 AKS 系統節點azureservicemesh/istio.replica.preferred 節點標籤。 Pod 具有節點親和性,對於 AKS 系統節點(標記為100)有kubernetes.azure.com/mode: system的加權喜好,對於已標記為50的節點則有azureservicemesh/istio.replica.preferred: true的加權喜好設定。

修訂選擇

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

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

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

在叢集建立期間安裝網格

若要在建立叢集時安裝 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 附加元件:

Important

如果您的叢集上已經有 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 的 istiod 狀態為 Running。 例如:

NAME                               READY   STATUS    RESTARTS   AGE
istiod-asm-1-24-74f7f7c46c-xfdtl   1/1     Running   0          2m
istiod-asm-1-24-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

Important

需要符合控制平面修訂 (例如:istio.io/rev=asm-1-24) 的明確版本控制。

預設 istio-injection=enabled 標籤將無法運作,而且會導致側車插入略過附加元件的命名空間

若要使用 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>

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

kubectl describe pod -n namespace <pod name>

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

部署範例應用程式

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

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

Note

使用 HTTP 代理進行對外網路存取的叢集必須設定服務入口。 如需安裝指示,請參閱 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 側車,另一個是應用程式容器。

若要測試此範例應用程式的 ingress,請查看 後續步驟

後續步驟