Istio Policies and Telemetry

要理解策略和遥测,首先要理解 Mixer 的架构;

适配器和模板(Template)
适配器 封装了 Mixer 和特定基础设施后端之间的接口,把 Mixer 和基础设施后端连接起来。Istio已经实现了多个适配器。各种适配器都需要参数配置才能工作。例如日志适配器可能需要 IP 地址和端口来进行日志的输出。Istio使用处理器(Handler)来给适配器配置参数来生成一个适配器实例;。
模板 定义了从特定请求的属性到适配器输入的映射关系。一个适配器可以支持任意数量的模板。一个模板代表了一条check或者report的data item;

TEMPLATE_VARIETY_CHECK
TEMPLATE_VARIETY_REPORT
TEMPLATE_VARIETY_QUOTA
TEMPLATE_VARIETY_ATTRIBUTE_GENERATOR

策略和遥控功能的控制能力包含了三种类型资源的配置:
配置一组处理器(Handler),用于确定正在使用的适配器组及其操作方式。处理器配置的一个例子如:为 Statsd 后端提供带有 IP 地址的 statsd 适配器。

配置一组实例(Instance),描述如何将请求属性映射到适配器输入。实例表示一个或多个适配器将操作的各种数据。例如,运维人员可能决定从诸如 destination.service 和 response.code 之类的属性中生成 requestcount 指标的实例。

配置一组规则(Rule),这些规则描述了何时调用特定适配器及哪些实例。规则包含 match 表达式和 action。match 表达式控制何时调用适配器,而 action 决定了要提供给适配器的一组实例。例如,规则可能会将生成的 requestcount 实例发送到 statsd 适配器。

Instance对应Template
Handler对应Adapter

apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
  name: quotahandler
  namespace: istio-system
spec:
  compiledAdapter: memquota
  params:
    quotas:
    - name: requestcountquota.instance.istio-system
      maxAmount: 500
      validDuration: 1s
      # The first matching override is applied.
      # A requestcount instance is checked against override dimensions.
      overrides:
      # The following override applies to 'reviews' regardless
      # of the source.
      - dimensions:
          destination: reviews
        maxAmount: 1
        validDuration: 5s
      # The following override applies to 'productpage' when
      # the source is a specific ip address.
      - dimensions:
          destination: productpage
          source: "10.28.11.20"
        maxAmount: 500
        validDuration: 1s
      # The following override applies to 'productpage' regardless
      # of the source.
      - dimensions:
          destination: productpage
        maxAmount: 2
        validDuration: 5s
---
apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
  name: requestcountquota
  namespace: istio-system
spec:
  compiledTemplate: quota
  params:
    dimensions:
      source: request.headers["x-forwarded-for"] | "unknown"
      destination: destination.labels["app"] | destination.service.name | "unknown"
      destinationVersion: destination.labels["version"] | "unknown"

参考
Mixer Out Of Process Adapter Dev Guide
Mixer Out of Process Adapter Walkthrough
Mixer Template Dev Guide

你可能感兴趣的:(Istio)