虚拟服务 virtualservice 可以类比 k8s service 管理 pod, vs 是管理 svc 的
vs 对 svc 定义了流量规则,将满足条件的流量转发到对应的服务后端
配置定义
hosts:流量发送的目标
在 k8s 中,hosts 一般是 servic 的短域名(建议填写完整的域名)
reviews 这种短域名在 k8s 中完整的域名是
reviews.weather.svc.cluster.local
其中 weather 是 reviews 应用所在的命名空间
如果 vs 绑定网关后,hosts 需要添加匹配 gateway 的外部访问地址(IP 或域名)
gateways
配置格式为 <gateway_namespace>/<gateway_name>
,如果省略 gateway_namespace
则默认匹配 vs 所在命名空间对应名字的 gateway
http:处理 http 流量
数组类型,但是顺序很重要。因为流量匹配是自上而下依次匹配,直到匹配成功根据 route 规则完成转发
match:匹配规则
headers:匹配请求中的头域
匹配模式分为以下三种:exact(准确值)、prefix(前缀)、regex(正则表达式)
支持通过 withoutHeaders 负向匹配请求头域,即当请求头域满足 withoutHeaders 中的条件是,认为没有匹配到(灰度发布惯用做法)
route
根据是否有 match 字段可以将 httproute 分为两种,其中没有 match 字段的 route 通常写在最后面,充当兜底路由
headers
可以修改一次 http 请求中 request 或 response 的值
- request:在发送请求给目标地址时修改 request 的 header
- response:在返回应答时修改 response 的 header
使用 set(覆盖)、add(添加) 和 remove(删除) 来对 header 操作
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: reviews
spec:hosts:- reviewsgateways:- bookinfo.comhttp:- match:- headers:end-user:exact: jasonroute:- destination:host: reviewssubset: v1- route:- destination:host: reviewssubset: v2headers:response:add:Set-Cookie: version=v2