在 ambient 模式下使用 Kubernetes Gateway API 通过网关路由出口流量
本指南演示如何结合 Kubernetes Gateway API 和 waypoint proxy,在 ambient 模式下通过出口网关路由出站 HTTP 流量。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已使用 ambient 配置文件配置
Istio和IstioCNI资源。 - 已创建
Ztunnel资源。 - 已安装 Gateway API CRD。
- 确认 Linux 内核兼容性。
操作步骤
-
创建名为
egress-gateway的命名空间: -
将
istio-discovery=enabled标签添加到egress-gateway命名空间: -
通过应用数据平面模式标签,为该命名空间启用 ambient 模式:
-
创建名为
egress-se.yaml的 YAML 文件,为外部服务定义ServiceEntry。istio.io/use-waypoint标签会将此条目与 waypoint proxy 关联起来。- 将发往此
ServiceEntry的流量通过同一命名空间中名为waypoint的 waypoint proxy。
- 将发往此
-
应用
ServiceEntry: -
将
istio-waypointgateway class overlay 添加到Istio资源,以便 waypoint pod 能够被准入Restrictedegress-gateway命名空间:有关更多信息,请参阅 Pod Security Admission。
-
创建名为
waypoint.yaml的 YAML 文件,在egress-gateway命名空间中部署 waypoint proxy。waypoint proxy 会拦截并处理此命名空间中服务的 L7 流量。istio.io/waypoint-for: service标签表示此 waypoint 为服务处理流量。标签值决定所处理流量的类型。有关详细信息,请参阅 Waypoint 流量类型(Istio 文档)。- 指定
istio-waypointgateway class,该类部署 waypoint proxy,而不是标准 ingress gateway。
-
应用 waypoint proxy 配置:
NOTE除了手动创建 YAML 文件之外,还可以使用以下命令部署 waypoint proxy:
使用
--enroll-namespace选项时,egress-gateway命名空间中的所有服务(包括ServiceEntries)都会将其流量路由通过 waypoint。 -
可选:将网关部署到 Infra Nodes:
单击展开
PrerequisitesAlauda Container Platform 4.2.0 或更高版本,或者将 Gateway API CRD 升级到最新版本。
a. 在计划部署 Gateway 的同一命名空间中创建名为
asm-kube-gateway-options的 ConfigMap:- 指定 configmap 的名称。
- 指定与 Gateway 相同的 configmap 命名空间。
- 设置节点选择器和容忍度,以便将 Gateway pod 调度到 Infra Nodes。
b. 添加
infrastructure.parametersRef字段,在 Gateway 资源中引用该 ConfigMap:- 指定 Gateway 的名称。
- 指定 Gateway 的命名空间。
验证
-
通过检查状态确认 waypoint proxy 已就绪:
PROGRAMMED列应显示True,表示配置成功。示例输出
-
在
egress-gateway命名空间中部署curl客户端: -
将
curlpod 的名称存储在变量中: -
从
curl客户端验证是否可以通过出口网关访问httpbingo.org:从
httpbingo.org获得成功响应,表明出口流量正通过已配置的网关进行路由。示例输出
ztunnel 日志应显示流量正通过 waypoint,输出示例如下:
ztunnel 日志输出示例
清理
删除 egress-gateway 命名空间及所有关联资源: