Istio VirtualService
VirtualHost
-
VirtualHost
-
几个关键术语
-
Service:服务注册表上用于标识一组应用实例的独立单元,列如Kubernetes上的Service资源对象
- Service Version:Service的一至多个版本(通常称为subset),通常表现为CD场景中,同时运行着的同一应用的不版本的实例组合,用于支撑实现A/B测试、Canary发布等,以及相应的流量分配机制;
-
Host:客户端请求报文中的“主机”,用于支撑基于虚拟主机的流量过滤;
-
-
VirtualHost的定义:一组关乎到特定“主机(客户端访问的目标地址或主机名)”的流量路由规则
-
VirtualService配置要点
- VirtualService的关键字段
-
hosts: 必选字段,用于指定流量请求的目标,可以是一个DNS名称或IP地址;
-
DNS名称可以使用通配符,也可以使用短格式的Service名称;
-
-
gateways:指定应用流量规则的Gateway资源,在VirtualService上使用gateways字段时遵循如下规则
-
仅应用于网格内的东西流量时,应省略gateways字段;
-
仅用于引入网格外的流量,为gateways字段赋予合适的值(Gateway名称列表)即可
-
客户端源自网格外部
-
Gateway负责接入这部分流量,VirtualService负责将这部分流量完成在网格内的路由
-
-
同时用于网格内和网格外的流量时,需要将gateways字段的列表值的其中一项指定为“mesh”
-
客户端既可源自网格外部,也可以是网格内部的流量
-
-
-
http: 配置http协议的流量管理机制的有序列表,其配置框架称为HTTPRoute
-
tls:用于处理非终结的TLS和HTTPS流量的有序列表,其配置框架称为TLSRoute
-
tcp:管理四层的TCP流量的有序列表,其配置框架称为TCPRoute
-
VirtualService配置生效示意图
HTTP路由配置(HTTPRoute)
-
virtualservice.http配置如何处理http流量
-
服务的端口协议是HTTP、HTTP2和GRPC,即在服务的端口名中包含http-、http2-和grpc-等;
-
Gateway的端口协议是HTTP、HTTP2和GRPC,或者Gateway终结了TLS;
-
ServiceEntry的端口协议是HTTP、HTTP2和GRPC;
-
-
路由机制及服务韧性等相关的配置,即满足HTTPMatchRequest条件的流量可以做如下处理
-
路由到指定目标(HTTPRouteDestination)
-
执行重定向(HTTPRedirect)
-
URL重写(HTTPRewrite)
-
请求重试(HTTPRetry)
-
故障注入(HTTPFaultInjection)
-
跨站资源引用(CorsPolicy)
-
VirtualService and HTTPRoute CRD
HTTPRoute配置示例
示例一
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v2
url重写示例
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: demoapp
spec:
hosts:
- demoapp
http:
- name: rewrite
match:
- uri:
prefix: /canary
rewrite:
uri: /
route:
- destination:
host: demoapp
subset: v11
- name: redirect
match:
- uri:
prefix: "/backend"
redirect:
uri: /
authority: backend
port: 8082
- name: default
route:
- destination:
host: demoapp
subset: v10
fault-injection示例
kind: VirtualService
metadata:
name: demoapp
spec:
hosts:
- demoapp
http:
- name: canary
match:
- uri:
prefix: /canary
rewrite:
uri: /
route:
- destination:
host: demoapp
subset: v11
fault:
abort:
percentage:
value: 20
httpStatus: 555
- name: default
route:
- destination:
host: demoapp
subset: v10
fault:
delay:
percentage:
value: 20
fixedDelay: 3s
参考文档
https://istio.io/latest/zh/docs/reference/config/networking/virtual-service/