Azure Kubernetes 服务 (AKS) 中 Istio 服务网格插件的原生 sidecar 模式

Kubernetes sidecar 容器 功能旨在提供更可靠且用户友好的方法来将 sidecar 模式合并到 Kubernetes 应用程序中,提高效率、可靠性和简单性。

原生 sidecar 非常适合 Istio。 它提供了多种优势,包括简化的 Sidecar 管理、可靠性提升以及协调增强。 在原生 sidecar 模式下,sidecar 总是先于主应用程序启动。 主应用后,它还会正常关闭。 此行为减少了处理容器生命周期或 Pod 终止问题时的手动解决方法的需求。

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

版本 1.27 开始,原生 sidecar 模式成为 Istio 的默认设置。 基于 Istio 的 AKS 服务网格与此功能行为保持一致,对现有客户的干扰极小。

默认行为

使用预览 IstioNativeSidecarModePreview 功能标志使用 Istio 加载项的现有群集会保留其当前的本机 sidecar 状态,而不考虑群集版本或 Istio 加载项修订。

从 AKS 1.33 版本和 Istio 附加组件开始,AKS 服务网格附加组件默认使用本地边车容器作为 Envoy 代理。 此设置根据您的群集版本、ASM 加载项版本,以及加载项是新安装还是升级而应用。

AKS 版本 ASM 版本 加载项安装行为 升级行为
< 1.33 任意 Disabled Disabled
1.33+ < asm-1-27 Disabled Disabled
1.33+ asm-1-27 已启用(过渡版本) 已禁用(升级不自动启用)
1.33+ asm-1-28+ 已启用 已启用(通过网状网或群集升级到所需版本)

新集群

使用 az aks create 命令创建新的 AKS 群集时,请选择 1.33 版本或更高版本,以及 Istio asm-1-27 版本或更高版本。 新群集已自动启用原生 sidecar 功能模块模式。

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

对于在现有群集>上安装的新服务网格,如果版本是 AKS 1.33 或更高,请在 asm-1-27过程中选择或更新。

现有群集

本部分介绍如何检查原生 sidecar 功能的状态或在现有集群上启用该功能。

检查功能状态

启用本机 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-proxy 容器显示为一个 init 容器。 使用以下命令检查 sidecar 注入:

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

容器 istio-proxy 应显示为初始化容器。

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

检查先决条件

如果未启用原生 sidecar,则可能是由于未满足某个版本的先决条件。

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

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query "kubernetesVersion" -o tsv
    

    如果控制平面版本太旧,则可以 升级 Kubernetes 控制平面

  2. 确保节点池运行版本为 1.33 或更新,并且电源状态为运行。

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query "agentPoolProfiles[].{name:name,currentOrchestratorVersion:currentOrchestratorVersion,powerState:powerState.code}" -o table
    

    注意

    默认情况下,原生 sidecar 模式需要 Kubernetes 控制平面和数据平面在版本 1.33 或更高版本上。 在启用服务网格加载项之前,请确保所有节点都是版本 1.33 或更高版本。 否则,默认情况下不会启用原生 sidecar。

    如果任何节点池版本太旧, 请将节点映像升级到 版本 1.33 或更高版本。

  3. 如果已启用服务网格加载项,请检查已安装的对应版本:

    az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query "serviceMeshProfile.istio.revisions" -o tsv
    

    要升级到原生 sidecar 支持,将网格修订版升级到asm-1-28或更高版本。

后续步骤