开始之前

在从 Sidecar 模式迁移至 Ambient 模式之前, 请验证您的环境是否满足要求,并对当前配置进行备份。

背景:政策执行方式的演变

理解 Sidecar 与 Ambient 策略执行之间的关键差异,将有助于您理解迁移步骤,并预判何处需要进行变更。

在 Sidecar 模式下:

  • 策略通过 selector(选择器)利用标签来定位 Pod。
  • 目标端 Sidecar 代理负责执行 L4 和 L7 策略。
  • 单个 AuthorizationPolicy 即可基于源主体(Principal)、 HTTP 方法、路径或请求头进行匹配,并在目标 Pod 上强制执行。

在 Ambient 模式下:

  • L4 策略的执行由 ztunnel 负责,该组件运行在每一个节点上。
  • L7 策略的执行需要为每个命名空间或服务部署一个 waypoint 代理
  • 由 waypoint 执行的策略必须使用 targetRefs 来指向 ServiceGateway, 而不能使用 Pod 的 selector。因此,您无法直接原封不动地复用基于 selector 的 L7 策略。
  • 在 Ambient 模式下,VirtualService 处于 Alpha 阶段。 若要实现稳定的 L7 流量管理,必须迁移至 HTTPRoute

要求

如果您尚未安装 Gateway API CRD,请立即安装:

请注意,Kubernetes Gateway API CRD 不会默认安装在大多数 Kubernetes 集群上, 因此请确保在使用 Gateway API 之前已安装好这些 CRD:

$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
  kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yaml

验证您当前的安装

运行以下命令,以确认现有 Sidecar 安装的状态:

$ istioctl version
$ kubectl get pods -n istio-system
$ kubectl get namespaces -l istio-injection=enabled

检查是否存在基于修订版本的安装(如果您使用的是 istio.io/rev 标签而非 istio-injection):

$ kubectl get namespaces -l 'istio.io/rev'

审计现有资源

列出集群中正在使用的 Istio 资源:

$ kubectl get virtualservice,destinationrule,authorizationpolicy,requestauthentication,peerauthentication,envoyfilter,wasmplugin -A

检查哪些 AuthorizationPolicy 资源包含 L7 规则。 在 Ambient 模式下,这些资源需要 waypoint 代理才能正常工作。

$ kubectl get authorizationpolicy -A --no-headers | while read ns name rest; do
    if kubectl get authorizationpolicy "$name" -n "$ns" -o yaml | grep -qE "(methods:|paths:|headers:|action: CUSTOM|action: AUDIT)"; then
      echo "$ns/$name"
    fi
  done

请检查是否存在 mode: DISABLEPeerAuthentication 资源, 这些资源与 Ambient 模式不兼容:

$ kubectl get peerauthentication -A -o yaml | grep -A2 "mtls:"

在迁移之前,必须移除或修改任何包含 mode: DISABLEPeerAuthentication 资源,因为 Ambient 模式始终在网格工作负载之间强制执行 mTLS。

配置了 mode: STRICTmode: PERMISSIVEPeerAuthentication 资源不会阻碍迁移, 但在迁移完成后,它们将变得冗余:Ambient 模式通过 ztunnel 强制执行 mTLS, 而无需依赖这些策略。您可以在迁移完成后安全地将其移除。

备份您的配置

在进行任何更改之前,请导出当前的 Istio 配置:

$ kubectl get virtualservice,destinationrule,authorizationpolicy,requestauthentication,peerauthentication,gateway,httproute,telemetry -A -o yaml > istio-config-backup.yaml
$ kubectl get namespaces -o yaml > namespace-backup.yaml

将这些备份存储在集群外部的安全位置。

设置流量监控(可选)

在进行更改之前,请使用 Kiali 或其他可观测性工具来捕获当前流量模式的基线。 有关设置说明,请参阅 Kiali

后续步骤

继续前往安装 Ambient 组件。

这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!