Istio – Virtual Service讲解
Kubernetes Service是注册Deployment在k8s集群当中的DNS接口
Istio的Virtual Service 有点k8s ingress的功能在内。
– 能够根据特定访问的route prefix 或 header把流量导入到Service当中
– 能够延迟注入和故障注入
– 可以设定weight,然后根据不同的权重导入流量到不同的service,来达到AB测试或Canary Deployment
– 能够设置retry次数
YAML
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: example-virtual-service # VirtualService 的名称
namespace: default # VirtualService 所属的命名空间
spec:
hosts:
- example.com # 该 VirtualService 适用的主机名
gateways:
- example-gateway # 该 VirtualService 适用的 Istio Gateway
http:
- name: route1 # 第一条 HTTP 路由规则的名称
match:
- uri:
prefix: /service1 # 匹配 URI 前缀为 /service1 的请求
route:
- destination:
host: service1.default.svc.cluster.local # 请求转发到 service1 的 v1 子集
subset: v1
weight: 80 # 该目标的权重为 80%
- destination:
host: service2.default.svc.cluster.local # 请求转发到 service2 的 v1 子集
subset: v1
weight: 20 # 该目标的权重为 20%
retries: #【重试机制】
attempts: 3 # 重试次数
perTryTimeout: 2s # 每次重试的超时时间
retryOn: gateway-error,connect-failure,refused-stream # 触发重试的条件
fault:
delay: #【延迟注入】
percentage:
value: 0.1 # 10% 的请求会被延迟
fixedDelay: 5s # 延迟时间为 5 秒
abort: #【故障注入】
percentage:
value: 0.1 # 10% 的请求会被中止
httpStatus: 500 # 中止请求时返回的 HTTP 状态码为 500
timeout: 10s # 请求超时时间为 10 秒
- name: route2 # 第二条 HTTP 路由规则的名称
match:
- uri:
prefix: /service2 # 匹配 URI 前缀为 /service2 的请求
route:
- destination:
host: service2.default.svc.cluster.local # 请求转发到 service2 的 v1 子集
subset: v1
weight: 70 # 该目标的权重为 70%
- destination:
host: service3.default.svc.cluster.local # 请求转发到 service3 的 v1 子集
subset: v1
weight: 30 # 该目标的权重为 30%
retries: #【重试机制】
attempts: 3 # 重试次数
perTryTimeout: 2s # 每次重试的超时时间
retryOn: gateway-error,connect-failure,refused-stream # 触发重试的条件
fault:
delay: #【延迟注入】
percentage:
value: 0.1 # 10% 的请求会被延迟
fixedDelay: 5s # 延迟时间为 5 秒
abort: #【故障注入】
percentage:
value: 0.1 # 10% 的请求会被中止
httpStatus: 500 # 中止请求时返回的 HTTP 状态码为 500
timeout: 10s # 请求超时时间为 10 秒
YAML
Facebook评论