部署适用于 Azure Kubernetes 服务的基于 Istio 的服务网格加载项
本文介绍如何为 Azure Kubernetes 服务 (AKS) 群集安装基于 Istio 的服务网格加载项。
有关 Istio 和服务网格加载项的详细信息,请参阅 Azure Kubernetes 服务的 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
设置环境变量。
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
安装 Istio 加载项
本部分包括使用 Azure CLI 在群集创建期间安装 Istio 加载项或为现有群集启用的步骤。 如果要使用 Bicep 安装加载项,请参阅使用 Bicep 安装具有 Istio 服务网格加载项的 AKS 群集指南。 若要详细了解 AKS 群集的 Bicep 资源定义,请参阅 Bicep managedCluster 参考。
修订选择
如果在未指定修订的情况下启用加载项,则会为你安装默认支持的修订。
若要指定修订,请执行以下步骤。
- 使用
az aks mesh get-revisions
命令检查哪些修订可用于区域中的不同 AKS 群集版本。 - 根据可用的修订,可以在用于网格安装的 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 加载项。 只能在版本不低于 1.23 的 AKS 群集上启用 Istio 加载项。
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
确认 istiod
Pod 的状态为 Running
。 例如:
NAME READY STATUS RESTARTS AGE
istiod-asm-1-18-74f7f7c46c-xfdtl 2/2 Running 0 2m
istiod-asm-1-18-74f7f7c46c-4nt2v 2/2 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
触发 Sidecar 注入
可以部署为测试提供的示例应用程序,也可以为现有工作负载触发 Sidecar 注入。
现有应用程序
如果已有要添加到网格中的应用程序,请确保按上一步所述标记其命名空间,然后重启其部署以触发 Sidecar 注入:
kubectl rollout restart -n <namespace> <deployment name>
验证 Sidecar 注入是否成功,方法是确保所有容器都准备就绪,并在 kubectl describe
输出中查找 istio-proxy
容器,例如:
kubectl describe pod -n namespace <pod name>
istio-proxy
容器是 Envoy Sidecar。 应用程序现在是数据平面的一部分。
部署示例应用程序
使用 kubectl apply
将示例应用程序部署到群集:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/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
使用 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 Sidecar,另一个是应用程序容器。
若要对示例应用程序进行入口测试,请查看后续步骤。
删除资源
使用 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