首页 资讯 社群 我的社区 搜索

istio-请求路由配置(Request Routing)

LM123
2019-05-07 17:44:57

通常,我们服务程序都会打一个版本号(v1,v2 ...),我们发布了v1版本后,下次需要发布v2,但是我们不想所有用户使用新版v2,这时可以利用请求路由功能,把10%的用户引导使用v2,90%的用户还是继续使用v1。当v2运行稳定后,再把100%的用户导向使用v2版本。如下图

如上图所示,客户端不知道服务不同版本间的差异。他们可以使用主机名/IP地址继续访问服务。Envoy sidecar/代理拦截并转发客户端和服务器之间的所有请求/响应。

运维人员使用Pilot指定路由规则,Envoy根据这些规则动态地确定其服务版本的实际选择。该模型使应用程序代码能够将它从其依赖服务的演进中解耦出来,同时提供其他好处(参见 Mixer)。路由规则允许Envoy根据诸如header,与源/目的地相关联的标签和/或分配给每个版本的权重的标准来选择版本。

Istio还为同一服务版本的多个实例提供流量负载均衡。可以在服务发现和负载均衡中找到更多信息。

Istio不提供DNS。应用程序可以尝试使用底层平台(kube-dns,mesos-dns等)中存在的DNS服务来解析FQDN。

这里以bookinfo为例子,将“reviews”服务90%的传入流量发送到“v1”版本,10%的传入流量发送到“v2”版本。DSL规则如下描述:

cat ./bookinfo-rule.yaml:

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: reviews-default
spec:
  destination:
    name: reviews
  route:
  - labels:
      version: v1
    weight: 90
  - labels:
      version: v2
    weight: 10
istioctl create -f ./bookinf-rule.yaml

这时候再访问 http://${GATEWAY_URL}/productpage 会有90%的流量指向v1,10%的流量指向v2 。

destination是service的名称,流量将被导向到这里。

route lables标记将接受流量的特定服务实例。

如在samples/bookinfo/kube/bookinfo.yaml中相应名称:

....  
apiVersion: v1
kind: Service
metadata:
  name: reviews
  labels:
    app: reviews
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: reviews 
......  
apiVersion: extensions/v1beta1  
kind: Deployment  
metadata:  
  name: reviews-v1  
spec:  
  replicas: 1  
  template:  
    metadata:  
      labels:  
        app: reviews  
        version: v1  
......  

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: reviews-v2
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: reviews
        version: v2
......

Ingress和Egress

Istio假定进入和离开服务网络的所有流量都会通过Envoy代理进行传输。通过将Envoy代理部署在服务之前,运维人员可以针对面向用户的服务进行A/B测试,部署金丝雀服务等。类似地,通过使用Envoy将流量路由到外部Web服务(例如,访问Maps API或视频服务API),运维人员可以添加故障恢复功能,例如超时、重试、熔断器等,并在访问这些服务的连接上获得详细指标。

参考:

http://istio.doczh.cn/docs/reference/config/istio.routing.v1alpha1.md

http://istio.doczh.cn/docs/tasks/traffic-management/request-routing.html

https://istio.io/docs/tasks/traffic-management/request-routing.html

https://istio.io/docs/concepts/traffic-management/rules-configuration.html

 

用户评论