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

Loading

Facebook评论