virtualservice

影响流量路由的配置。

术语:

  • service是绑定到service registry中唯一名称的应用程序行为单元。服务由在Pod,容器,VM等上运行的工作负载实例实现的多个网络端点组成。

  • Service versions(也称为subsets)-在持续部署方案中,对于给定的服务,应用程序可能会运行不同版本对应不同子集。这些变体不一定是不同的API版本。它们可能是对同一服务的迭代更改,部署在不同的环境(prod, staging, dev等)中。发生这种情况的常见方案包括A/B测试,金丝雀部署等。可以根据各种标准(header,url等)和/或通过分配给每个版本的权重来决定特定版本的选择。每个服务都有一个包含所有实例的默认版本。

  • source-调用服务的下游客户端。

  • host-客户端尝试连接服务时使用的地址。

  • Access model-应用程序仅寻址目标服务(Host),而无需了解各个服务版本(子集)。版本的实际选择由代理/sidecar决定,从而使应用程序代码能够与依赖服务的发展脱钩。

VirtualService定义了一组在寻址Host时要应用的流量路由规则。每个路由规则为特定协议的流量定义匹配条件。如果流量匹配,则将其发送到registry中定义的命名目标服务(或其子集/版本)。

流量Source也可以在路由规则中进行匹配。这允许针对特定客户端上下文自定义路由。

在Kubernetes上的以下示例默认情况下将所有HTTP流量路由到带有标签版本:"version: v1"的reviews服务的pod。另外,路径以/wpcatalog/或/consumercatalog/开头的HTTP请求将被重写为/newcatalog并发送到带有"version: v2"标签的Pod。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
  - reviews.prod.svc.cluster.local
  http:
  - name: "reviews-v2-routes"
    match:
    - uri:
        prefix: "/wpcatalog"
    - uri:
        prefix: "/consumercatalog"
    rewrite:
      uri: "/newcatalog"
    route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v2
  - name: "reviews-v1-route"
    route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v1

参考必须在相应的DestinationRule中声明的命名服务子集来标识路由目标的子集/版本

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews-destination
spec:
  host: reviews.prod.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

Last updated