你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Kubernetes 服务 (AKS)(预览版)中为基于 Istio 的服务网格附加产品启用本机 Sidecar 模式

Kubernetes 本机 sidecar 旨在提供一种更可靠且用户友好的方式将 sidecar 模式合并到 Kubernetes 应用程序中,从而提高效率、可靠性和简单性。

本机 sidecar 非常适合 Istio。 它提供多种优势,例如简化的 sidecar 管理。 此外,它还提高了可靠性和协调性。 它也可以优化资源并提高运营效率。

从 Kubernetes 版本 1.29 开始,AKS 已启用 sidecar 容器功能。 通过此更改,Istio 本机 sidecar 模式可以与 AKS 的 Istio 附加产品一起使用。

本文介绍如何在 AKS 上为基于 Istio 的服务网格启用本机 sidecar 模式。

开始之前

  1. 通过 az feature register 注册 IstioNativeSidecarModePreview 功能标志。

    az feature register --namespace Microsoft.ContainerService --name IstioNativeSidecarModePreview
    
  2. 通过 az feature show 验证注册状态。

    az feature show --namespace Microsoft.ContainerService --name IstioNativeSidecarModePreview
    

    需要花费几分钟时间,状态才会显示为 Registered

  3. 当状态反映“已注册”时,通过 az provider register 来刷新 Microsoft.ContainerService 资源提供程序的注册。

    az provider register --namespace Microsoft.ContainerService
    

在现有群集上

检查版本

  1. 使用 az aks show 检查 AKS 群集的 Kubernetes 控制平面版本是否为 1.29 或更高版本。

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER -o json | jq ".kubernetesVersion"
    

    如果控制平面版本过低,请升级 Kubernetes 控制平面

  2. 确保节点池运行 1.29 或更高版本,并且电源状态为正在运行。

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER -o json | jq ".agentPoolProfiles[] | { currentOrchestratorVersion, powerState}"
    

    注意

    本机 sidecar 模式需要 Kubernetes 控制平面和数据平面均为 1.29 及更高版本。 在启用本机 sidecar 模式之前,请确保所有节点都已升级到 1.29。 否则,sidecar 将无法按预期工作。

    如果任何节点池版本过低,请将节点映像升级1.29 或更高版本。

  3. 请确保 Istio 附加产品为 asm-1-20 或更高版本。

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER -o json | jq ".serviceMeshProfile.istio.revisions"
    

    如果 istiod 版本过低,请按照 Istio 升级中的步骤升级到 asm-1-20 或更高版本。

检查 Istio 控制平面上的本机 sidecar 功能状态

需要使用 az aks update 命令协调 AKS 群集。

az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER

启用本机 sidecar 模式后,将在 Istio 的控制平面 Pod 模板中显示环境变量 ENABLE_NATIVE_SIDECARS,值为 true。 使用以下命令检查 istiod 部署。

kubectl get deployment -l app=istiod -n aks-istio-system -o json | jq '.items[].spec.template.spec.containers[].env[] | select(.name=="ENABLE_NATIVE_SIDECARS")'

重启工作负载

Istio 控制平面准备就绪后,请滚动重启工作负载,让 istiod 注入本机 sidecar。

for ns in $(kubectl get ns -l istio.io/rev -o=jsonpath='{.items[0].metadata.name}'); do
  kubectl rollout restart deployments -n $ns
done

对于使用 istioctl kube-inject 注入 istio sidecar 的部署,需要重新注入 sidecar。

检查 sidecar 注入

如果成功启用本机端模式,istio-proxy 容器将显示为 init 容器。 使用以下命令检查 sidecar 注入:

kubectl get pods -o "custom-columns=NAME:.metadata.name,INIT:.spec.initContainers[*].name,CONTAINERS:.spec.containers[*].name"

istio-proxy 容器应显示为 Init 容器。

NAME                     INIT                     CONTAINERS
sleep-7656cf8794-5b5j4   istio-init,istio-proxy   sleep

创建新群集

使用 az aks create 命令创建新的 AKS 群集时,请选择版本 1.29 或更高版本、istio asm-1-20 或更高版本。 新群集应自动启用本机 sidecar 模式。

az aks create \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER \
    --enable-asm \
    --kubernetes-version 1.29 \
    --revision asm-1-20 \
    --generate-ssh-keys    
    ...

后续步骤