Waypoint 代理
部署 ZTunnel 代理后,可以引入 waypoint 代理以启用高级 Layer 7 处理能力。
Ambient 模式将 Istio 的功能解耦为两个不同的层:
- 由 ZTunnel 代理管理的安全 L4 覆盖层
- 由可选 waypoint 代理管理的 L7 层
Waypoint 代理是基于 Envoy 的代理,为在 ambient 模式下运行的工作负载执行 L7 处理。它充当特定资源(例如命名空间、服务或 pod)的网关,并且可以独立于其服务的应用进行安装、升级和扩展。配置依赖于 Kubernetes Gateway API。
与每个工作负载都运行自身 Envoy 代理的 sidecar 模型不同,waypoint 代理通过为共享同一安全边界的多个工作负载提供服务来减少资源消耗(例如命名空间中的所有工作负载)。
目标 waypoint 通过充当网关来强制实施策略:所有发往命名空间、服务或 pod 等资源的入站流量,都会先经过 waypoint,然后才到达目标。
ZTunnel 节点代理负责 mTLS 加密、L4 流量处理和遥测等 L4 功能。ZTunnel 与 waypoint 代理通过 HBONE(基于 HTTP 的覆盖网络)进行通信;该协议通过 HTTP/2 CONNECT 隧道传输流量,并在端口 15008 上使用 mTLS。
如果工作负载需要以下任一 L7 能力,可以考虑部署 waypoint 代理:
- 流量管理 — 高级 HTTP 路由、负载均衡、熔断、速率限制、故障注入、重试和超时
- 安全性 — 基于请求类型或 HTTP 标头等 L7 属性的授权策略
- 可观测性 — 应用流量的 HTTP 指标、访问日志和跟踪
部署 waypoint 代理
你可以在 Bookinfo 应用命名空间中部署 waypoint 代理,使流量通过 Istio ambient 数据平面进行路由,并强制实施 L7 策略。
前提条件
- 已安装 Alauda Service Mesh Operator 2.1.1 或更高版本。
- 由具有
cluster-admin角色的集群管理员建立了活动 ACP CLI(kubectl)会话。 - 已在本地安装
istioctl,以便使用它运行这些操作步骤。 - Istio 已以 ambient 模式部署。
- 已部署 Bookinfo 示例应用(用于以下示例)。
- 已将
istio.io/dataplane-mode=ambient标签应用于目标命名空间。
操作步骤
-
将
istio-waypointgateway class overlay 添加到Istio资源,以便 waypoint pod 能够被准入Restrictedbookinfo命名空间:有关更多信息,请参阅 Pod Security Admission。
-
在
bookinfo命名空间中创建 waypoint 代理。将以下内容保存为waypoint.yaml:istio.io/waypoint-for: service标签表示此 waypoint 为服务处理流量。标签值决定所处理流量的类型。有关详细信息,请参阅 Waypoint traffic types(Istio 文档)。
-
应用 waypoint 自定义资源(CR):
-
让
bookinfo命名空间使用该 waypoint:让命名空间加入后,ambient 数据平面中任意 pod 发往
bookinfo中服务的请求,都会通过 waypoint 进行 L7 处理和策略强制实施。
验证
确认 waypoint 代理已与 bookinfo 命名空间中的所有服务关联:
示例输出
你也可以通过为相应的服务或 pod 添加标签,仅配置特定服务或 pod 使用 waypoint。显式让 pod 加入时,还需将 istio.io/waypoint-for: workload 标签添加到对应的 gateway 资源。
启用跨命名空间 waypoint 使用
跨命名空间 waypoint 允许一个命名空间中的资源通过部署在其他命名空间中的 waypoint 路由流量。
操作步骤
-
将
istio-discovery=enabled标签添加到common-infrastructure命名空间: -
创建 Gateway 资源,允许
bookinfo命名空间中的工作负载使用来自common-infrastructure命名空间的 waypoint。将以下内容保存为waypoint-common.yaml: -
应用跨命名空间 waypoint:
-
添加使用跨命名空间 waypoint 所需的标签:
-
指定 waypoint 所在的命名空间:
-
指定要使用的 waypoint:
-
其他资源
- Waypoint traffic types(Istio 文档)