Waypoint是Ambient模式中可选的7层代理。若您的应用需要7层功能时,可以通过配置标签指定发往该应用的流量被先转发给对应的Waypoint。您可以在集群中部署多个Waypoint,并且灵活的选择当前服务使用的对应的Waypoint,甚至可以跨命名空间使用Waypoint。本文将详细介绍如何指定Waypoint的生效范围。
开始阅读前,请根据Ambient模式L4和L7能力说明判断您是否需要7层能力。
前提条件
集群中已安装1.2.1及以上版本的Gateway API组件。
部署Waypoint代理
创建waypoint.yaml。
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: waypoint namespace: default spec: gatewayClassName: istio-waypoint listeners: - allowedRoutes: namespaces: from: Same name: mesh port: 15008 protocol: HBONE
部署waypoint。
kubectl apply -f waypoint.yaml
配置流量经过Waypoint
当Waypoint部署完成之后,并不会有任何流量经过Waypoint,您需要显式配置需要使用这个Waypoint的流量范围。
目前ASM支持命名空间以及Service级别的配置。
命名空间下所有Service使用指定Waypoint
如果您希望某个命名空间下的所有Service流量都被某一个Waypoint代理,需要给命名空间上添加标签istio.io/use-waypoint: ${Waypoint Name}
。例如,在配置7层授权策略中,配置了default命名空间下的所有Service都使用名为waypoint
的Waypoint代理。
指定Service使用指定Waypoint
ASM同样支持为指定Service启用Waypoint。若您并不需要命名空间下所有的Service流量都经过Waypoint,您只需要为Service添加标签istio.io/use-waypoint: ${Waypoint Name}
即可。以下以配置reviews服务使用reviews-svc-waypoint
为例:
kubectl label service reviews istio.io/use-waypoint=reviews-svc-waypoint
通过日志确认流量是否正常经过Waypoint
流量经过Waypoint之后,Waypoint中会默认输出访问日志。您可以查看Waypoint上的日志来确认。
以入门示例中的Waypoint为例,查看对应的访问日志。
kubectl logs deployments/waypoint | tail -1
预期输出:
{"bytes_received":"0","bytes_sent":"358","downstream_local_address":"192.168.221.86:9080","downstream_remote_address":"10.0.108.250:39354","duration":"1","istio_policy_status":"-","method":"GET","path":"/reviews/0","protocol":"HTTP/1.1","request_id":"c83f18ee-672e-4e2e-9f02-9ee544f1c15f","requested_server_name":"-","response_code":"200","response_flags":"-","route_name":"route","start_time":"2025-06-16T08:58:43.339Z","trace_id":"-","upstream_cluster":"inbound-vip|9080|http|reviews-v1.default.svc.cluster.local;","upstream_host":"envoy://connect_originate/10.0.109.98:9080","upstream_local_address":"envoy://internal_client_address/","upstream_service_time":"1","upstream_response_time":"1","upstream_transport_failure_reason":"-","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.X.X Safari/537.36","x_forwarded_for":"-","authority_for":"reviews:9080"}