开始之前
在从 Sidecar 模式迁移至 Ambient 模式之前, 请验证您的环境是否满足要求,并对当前配置进行备份。
背景:政策执行方式的演变
理解 Sidecar 与 Ambient 策略执行之间的关键差异,将有助于您理解迁移步骤,并预判何处需要进行变更。
在 Sidecar 模式下:
- 策略通过
selector(选择器)利用标签来定位 Pod。 - 目标端 Sidecar 代理负责执行 L4 和 L7 策略。
- 单个
AuthorizationPolicy即可基于源主体(Principal)、 HTTP 方法、路径或请求头进行匹配,并在目标 Pod 上强制执行。
在 Ambient 模式下:
- L4 策略的执行由 ztunnel 负责,该组件运行在每一个节点上。
- L7 策略的执行需要为每个命名空间或服务部署一个 waypoint 代理。
- 由 waypoint 执行的策略必须使用
targetRefs来指向Service或Gateway, 而不能使用 Pod 的selector。因此,您无法直接原封不动地复用基于selector的 L7 策略。 - 在 Ambient 模式下,
VirtualService处于 Alpha 阶段。 若要实现稳定的 L7 流量管理,必须迁移至HTTPRoute。
要求
- 一个受支持的 Istio 版本
- Kubernetes 受支持的版本 (1.32, 1.33, 1.34, 1.35, 1.36)
- 已安装 Gateway API CRD(waypoint 代理所需)
如果您尚未安装 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.5.1/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: DISABLE 的 PeerAuthentication 资源,
这些资源与 Ambient 模式不兼容:
$ kubectl get peerauthentication -A -o yaml | grep -A2 "mtls:"在迁移之前,必须移除或修改任何包含 mode: DISABLE
的 PeerAuthentication 资源,因为 Ambient 模式始终在网格工作负载之间强制执行 mTLS。
配置了 mode: STRICT 或 mode: PERMISSIVE 的 PeerAuthentication 资源不会阻碍迁移,
但在迁移完成后,它们将变得冗余: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 组件。