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配置示例
示例一
url重写示例
fault-injection示例
参考文档
https://istio.io/latest/zh/docs/reference/config/networking/virtual-service/