本文將說明如何在 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
在某些情況下,先前安裝的 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 參考。
附註
如果您需要排定在特定節點的 istiod
和輸入閘道 Pod,您可以使用 AKS 系統節點或利用 azureservicemesh/istio.replica.preferred
標籤。 Pod 具有節點親和性,對於 AKS 系統節點(標記為kubernetes.azure.com/mode: system
)有100
的加權喜好,對於已標記為azureservicemesh/istio.replica.preferred: true
的節點則有50
的加權喜好設定。
修訂選取項目
如果您啟用附加元件而不指定修訂,則會為您安裝預設支援的修訂。
若要指定修訂,請執行下列步驟。
- 使用
az aks mesh get-revisions
命令來檢查區域中不同 AKS 叢集版本可用的修訂。 - 根據可用的修訂,您可以在用於網格安裝的 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 附加元件:
重要
如果您的叢集上已經有 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
重要
需要符合控制平面修訂 (例如: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>
確認側車插入成功,方法是確保所有容器都就緒,並在 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.24/samples/bookinfo/platform/kube/bookinfo.yaml
附註
使用 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 側車,另一個是應用程式容器。
若要測試此應用程式範例與輸入,請參閱 下一步。