使用 Kubernetes Gateway API 在 ambient 模式下通过网关路由出口流量
本指南演示如何结合 Kubernetes Gateway API 和 waypoint 代理,在 ambient 模式下通过出口网关路由出站 HTTP 流量。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
Istio和IstioCNI资源已使用 ambient 配置文件进行配置。- 已创建
Ztunnel资源。 - 请确认Linux 内核兼容性。
操作步骤
-
创建名为
egress-gateway的命名空间: -
为
egress-gateway命名空间添加istio-discovery=enabled标签: -
通过应用数据平面模式标签启用该命名空间的 ambient 模式:
-
创建名为
egress-se.yaml的 YAML 文件,定义外部服务的ServiceEntry。istio.io/use-waypoint标签将该条目与 waypoint 代理关联。- 指示此
ServiceEntry的流量通过同一命名空间中名为waypoint的 waypoint 代理。
- 指示此
-
应用该
ServiceEntry: -
创建名为
waypoint.yaml的 YAML 文件,在egress-gateway命名空间部署 waypoint 代理。waypoint 代理拦截并处理该命名空间内服务的 L7 流量。istio.io/waypoint-for: service标签表示该 waypoint 处理服务的流量。标签值决定处理的流量类型。详情请参见 Waypoint traffic types(Istio 文档)。- 指定
istio-waypoint网关类,部署的是 waypoint 代理,而非标准的入口网关。
-
应用 waypoint 代理配置:
NOTE除了手动创建 YAML 文件外,还可以使用以下命令部署 waypoint 代理:
使用
--enroll-namespace选项时,egress-gateway命名空间中的所有服务(包括ServiceEntry)都会通过该 waypoint 路由流量。
验证
-
通过检查状态确认 waypoint 代理已就绪:
PROGRAMMED列应显示True,表示配置成功。示例输出
-
在
egress-gateway命名空间部署curl客户端: -
将
curlpod 名称存储到变量中: -
从
curl客户端验证是否能通过出口网关访问httpbin.org:成功收到来自
httpbin.org的响应,说明出口流量已通过配置的网关路由。示例输出
ztunnel 日志应显示流量通过 waypoint,类似如下输出:
示例 ztunnel 日志输出
清理
删除 egress-gateway 命名空间及所有相关资源: