在 ambient 模式下通过 Kubernetes Gateway API 暴露服务
在 Istio ambient 模式中,Kubernetes Gateway API 是配置入口流量路由的推荐方法。您可以创建 Gateway 和 HTTPRoute 资源来部署一个网关,使网格内部服务可被外部流量访问。
用于第七层路由的 waypoint 代理
为了执行第七层(L7)路由策略——包括基于路径的路由和头部匹配——请在包含目标服务的命名空间中部署 waypoint 代理。waypoint 代理负责处理 L7 流量并应用通过 HTTPRoute 和 GRPCRoute 资源定义的路由规则。
在 ambient 模式下,VirtualService 资源的兼容性有限,不应与 Gateway API 配置混用。请使用 Kubernetes Gateway API 资源作为 ambient 模式下流量路由的标准方法。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
Istio和IstioCNI资源已使用 ambient 配置文件进行配置。- 已创建
Ztunnel资源。 - 确认 Linux 内核兼容性。
- 您的 Kubernetes 集群支持外部负载均衡器(即,类型为
LoadBalancer的 Service)。
操作步骤
-
创建名为
httpbin的命名空间: -
为
httpbin命名空间添加标签istio-discovery=enabled: -
通过应用数据平面模式标签启用该命名空间的 ambient 模式:
-
部署
httpbin示例服务: -
创建名为
httpbin-waypoint.yaml的文件以定义 waypoint 代理。该Gateway资源使用istio-waypoint网关类来处理命名空间内服务的 L7 流量。istio.io/waypoint-for: service标签表示该 waypoint 处理服务的流量。标签值决定处理的流量类型。详情请参见 Waypoint traffic types(Istio 文档)。- 指定
istio-waypoint网关类,部署 waypoint 代理而非标准入口网关。
-
应用 waypoint 代理配置:
-
为
httpbin服务添加标签,使入口流量通过 waypoint 代理:NOTEistio.io/ingress-use-waypoint=true标签确保来自入口网关的流量经过 waypoint 代理,使得在 waypoint 上配置的 L7 策略在流量到达httpbin服务前生效。 -
通过为命名空间添加标签,将该命名空间内所有服务关联到 waypoint 代理:
-
创建名为
httpbin-gw.yaml的文件,定义 KubernetesGateway资源。该配置使网关代理在端口 80 上接受针对主机httpbin.example.com的 HTTP 流量。- 指定网关的
Service类型;默认为LoadBalancer。 - 指定客户端访问该端口时使用的虚拟主机名。
- 指定网关的
-
应用网关配置:
-
创建名为
httpbin-ingress-hr.yaml的文件,定义入口网关的HTTPRoute资源。该资源指定流量如何从网关代理路由到httpbin服务。- 将此
HTTPRoute绑定到前一步创建的 KubernetesGateway。 - 将匹配的流量路由到端口 8000 上的
httpbin服务。
- 将此
-
应用入口 HTTPRoute:
-
创建名为
httpbin-waypoint-hr.yaml的文件,定义 waypoint 代理的HTTPRoute资源。该资源配置 waypoint 强制执行的基于路径的路由规则。- 将此
HTTPRoute绑定到httpbin服务。结合istio.io/ingress-use-waypoint=true标签,配置了 waypoint 代理对目标服务流量执行的 L7 路由规则。 - 将匹配的流量转发到端口 8000 上的
httpbin服务。
- 将此
-
应用 waypoint HTTPRoute:
NOTE在此配置中,来自入口网关的流量因服务上的
istio.io/ingress-use-waypoint=true标签而流经 waypoint 代理。waypoint 的HTTPRoute随后应用基于路径的路由策略,之后流量才到达httpbin服务。 -
等待 waypoint 代理就绪:
验证
-
创建一个用于
curl客户端的命名空间: -
部署
curl客户端: -
为
curl命名空间添加标签istio-discovery=enabled: -
启用
curl命名空间的 ambient 模式: -
将
curlPod 名称存储到变量中: -
从
curl客户端通过入口网关的Service向httpbin应用的/headers端点发送请求。设置Host头为httpbin.example.com,以匹配 KubernetesGateway和HTTPRoute资源中指定的主机:响应应返回
HTTP/1.1 200 OK状态,表示请求成功处理。示例输出
-
向 waypoint
HTTPRoute中无匹配 URI 前缀的端点发送请求:响应返回
HTTP/1.1 404 Not Found,这是预期行为,因为/get路径在 waypointHTTPRoute中没有对应的前缀匹配。示例输出
-
通过将
Service类型更改为默认的LoadBalancer,将网关代理暴露给集群外部流量: -
使用网关
Service的外部主机名或 IP 地址验证httpbin服务是否可从集群外访问。根据您的集群环境设置INGRESS_HOST变量。a. 设置
INGRESS_HOST变量:b. 设置
INGRESS_PORT变量:c. 使用网关主机发送
curl请求到httpbin服务:INFO如果
$INGRESS_HOST是 IPv6 地址,构造 URL 时请用方括号括起来。例如: -
确认响应包含
HTTP/1.1 200 OK状态,表示请求成功。示例输出
清理
删除本操作步骤中创建的资源: