四、HTTP路由目标(HttpRouteDestination)
表示满足条件的流量目标。是一个HTTPRouteDestination类型的数组,主要有三个字段:destination(请求目标)、weight(权重)和headers(HTTP头操作),其中destination和weight是必选字段.
- destination
表示请求的目标。通过host、subset、port三个属性来描述。
host:必选字段,istio中注册的服务名,包括网格内服务和通过 serviceEntry方式注册的外部服务。建议写全域名。
subset:表示host上定义的一个子集。如灰度发布中将版本定义为subset,路由策略将流量转发到不同版本的subset上
2)weight
除了destination,route上的另一个必选字段时weight,表示流量分配的比例,在一个route下多个destination的weight的综合要求是100.
如果一个route仅有一个destination,那么可以不用配置weight。
3)headers
提供对http header的操作,可以修改http请求中request或response的值。
request:发请求给目标地址时修改request的header
response: 返回应答时修改response的Header
对应的操作包括:
set: 使用map上的Key和Value覆盖Request或者Response中对应Header。
add: 追加map上的Key和Value到原有Header。
remove :删除在列表中指定的Header。
五、HTTP重定向(httpRedirect)
发送301的重定向应答给服务调用方。如下场景:
有一个在线网站,网址变了,通过这样的重定向,可以在用户输入老地址时 跳转到新地址。
httpRedirect的两个字段:
uri: 替换url的path部分
authority:替换url中的authority部分
如下所示,对 forecast 服务所有前缀是“/advertisement”的请求都会被重定向到new-forecast
的“/recommendation/activity”地址:
六、HTTP重写(HTTPRewrite)
将请求转发给目标服务前修改http请求中指定部分的内容。
重写 HTTPRewrite 也包括 uri 和 authority 这两个字段:
◎ uri:重写URL中的Path部分。
◎ authority:重写URL中的Authority部分。
前缀匹配“/advertisement”的请求,其请求 uri 中的这部分前缀会被“/recommendation/activity”替换:
七、http重试
重试规则可以一定程度上避免服务调用失败。
重试策略包括重试次数、超时、重试条件等,这里分别 描述相应的三个字段。
◎ attempts:必选字段,定义重试的次数。
◎ perTryTimeout:每次重试的超时时间,单位可以是毫秒(ms)、秒(s)、分钟(m)和小时 (h)。
◎ retryOn:进行重试的条件,可以是多个条件,以逗号分隔。包括5xx,gateway-error,connect-failure等。
下示例为 forecast 服务配置了一个重试策略,在“5xx,connect-failure”条件下进行最多5次重试,每次重试的超时时间是3秒:
八、http流量镜像
在流量转发到目标地址的同时,将流量给另外一个目标地址镜像一份。
九、http故障注入
修改HTTP请求或者 应答的内容。需要注意,在使用故障输入时不能启用超时和重试。故障类型包括:
1)延迟故障注入
表示在发送请求前 进行一段延时,模拟网络、远端服务负载等各种原因导致的失败,主要有如下两个字段。
◎ fixedDelay:一个必选字段,表示延迟时间,单位可以是毫秒、秒、分钟和小时,要求时间必须大于1毫秒。
◎ percentage:配置的延迟故障作用在多少比例的请求上,通过这种方式可以只让部分请求发生故 障。
如下所示为让forecast服务的v2版本上百分之1.5的请求产生10秒的延迟:
2)请求中止故障注入
模拟服务端异常,给调用的客户端 返回预先定义的错误状态码,主要有如下两个字段。
◎ httpStatus:是一个必选字段,表示中止的HTTP 状态码。
◎ percentage:配置的中止故障作用在多少比例的请求上,通过这种方式可以只让部分请求发生故 障,用法同延迟故障。
让forecast服务v2版本上百分之1.5的请求返回“500”状态码:
十、HTTP跨域资源共享(CorsPolicy)
当一个资源向该资源所在服务器的不同的域发起请求时,就会产生一个跨域的HTTP 请求。浏览器会限制从脚本发起的跨域HTTP请求。
◎allowOrigin:允许跨域资源共享的源的列表,在内容被序列化后,被添加到Access-Control-Allow- Origin的Header上。当使用通配符“*”时表示允许所有。
◎ allowMethods:允许访问资源的HTTP方法列表,内容被序列化到Access-Control-Allow-Methods的 Header上。
◎ allowHeaders:请求资源的HTTP Header列表,内容被序列化到Access-Control-Allow-Headers的 Header上。
◎ exposeHeaders:浏览器允许访问的 HTTP Header 的白名单,内容被序列化到Access-Control- Expose-Headers的Header上。
◎ maxAge:请求缓存的时长,被转化为Access-Control-Max-Age的Header。
◎ allowCredentials:是否允许服务调用方使用凭据发起实际请求,被转化为Access-Control-Allow- Credentials的Header。
给forecast服务配置跨域策略,允许源自news.com的GET方法的请求的访问:
请求示意图
配置