你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何为 Azure Kubernetes 服务 (AKS) 群集安装基于 Istio 的服务网格加载项。
有关 Istio 和服务网格加载项的详细信息,请参阅 Azure Kubernetes 服务的 Istio 服务网格加载项。
Tip
可以使用 Azure 中的 Microsoft Copilot 来帮助将 Istio 部署到 Azure 门户中的 AKS 群集。 有关详细信息,请参阅在 Azure 中使用 Microsoft Copilot 高效处理 AKS 群集。
开始之前
加载项需要安装 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 加载项
本部分包括使用 Azure CLI 在群集创建期间安装 Istio 加载项或为现有群集启用的步骤。 如果要使用 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
的加权首选项。
Revision selection
如果在未指定修订的情况下启用加载项,则会为你安装默认支持的修订。
若要指定修订,请执行以下步骤。
- 使用
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 加载项:
Important
如果现有群集上已有 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
。 For example:
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
) 指定额外的参数。 For example:
kubectl apply -f <(istioctl kube-inject -f sample.yaml -i aks-istio-system -r asm-X-Y) -n foo
触发挎斗注入
可以部署为测试提供的示例应用程序,也可以为现有工作负荷触发挎斗注入。
Existing applications
如果已有要添加到网格中的应用程序,请确保按上一步所述标记其命名空间,然后重启其部署以触发挎斗注入:
kubectl rollout restart -n <namespace> <deployment name>
验证挎斗注入是否成功,方法是确保所有容器都准备就绪,并在 istio-proxy
输出中查找 kubectl describe
容器,例如:
kubectl describe pod -n namespace <pod name>
istio-proxy
容器是 Envoy Sidecar。 应用程序现在是数据平面的一部分。
部署示例应用程序
使用 kubectl apply
将示例应用程序部署到群集:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml
Note
使用 HTTP 代理进行外部 Internet 访问的群集需要设置一个服务条目。 如需设置说明,请参阅 Azure Kubernetes 服务中的 HTTP 代理支持
确认已在群集上创建了多个部署和服务。 For example:
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 挎斗,另一个是应用程序容器。
To test this sample application against ingress, check out next-steps.