Istio Gateway 中的 selector 是一个用于指定哪些服务可以被该网关接受流量的标识符。通过在 Istio 的 VirtualService 对象中定义一个与 Gateway 相匹配的 selector,就可以将特定的请求路由到指定的服务。
在 Istio 中,Gateway 通常会与 VirtualService 和 DestinationRule 配合使用。其中,VirtualService 用于定义应该如何路由到不同版本或部署中的服务;DestinationRule 则定义了如何选择目标实例和负载均衡算法等细节。
例如,如果我们有两个名称分别为 my-service-v1 和 my-service-v2 的服务版本,并且想要将所有来自 /api 路径的请求路由到 my-service-v1 上,则需要先创建一个 Gateway,并给它指定一个 selector:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
protocol: HTTP
name: http
hosts:
- "*"
然后,在 VirtualService 中设置相应的规则:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service-route
spec:
gateways:
- my-gateway # 这里指定使用哪个 Gateway 进行路由
hosts:
- "*"
http:
- match:
- uri:
prefix: "/api"
route:
- destination:
host: my-service
subset: v1 # 这里指定使用 my-service 的 v1 版本处理请求
这样,所有来自 /api 路径的请求都将被路由到 my-service 的 v1 版本。