Mixer Aspect 配置
说明如何配置 Mixer 切面 及其依赖项。
概述
Mixer配置通过指定三个关键信息来表达系统行为:采取什么行动,如何采取行动以及何时采取行动。
采取什么行动: Aspect 配置定义要采取什么行动。这些行动包括日志,metrics收集,名单检查,配额执行等。描述符 是切面配置的命名和可重用的部分。例如,
metrics
切面定义MetricDescriptor,并按名称引用MetricDescriptor实例。如何采取行动: 适配器配置定义如何采取行动。metrics适配器配置包括基础设施后端的详细信息。
何时采取行动: 选择器和
subjects
定义何时采取行动。选择器是基于属性的表达式,如response.code == 200
,Subject是分层资源名称,如myservice.namespace.svc.cluster.local
。
配置步骤
请考虑以下启用限速的切面配置。
- aspects:
- kind: quotas
params:
quotas:
- descriptorName: RequestCount
maxAmount: 5
expiration: 1s
labels:
label1: target.service
它使用 RequestCount
来描述配额。以下是 RequestCount
描述符的例子。
name: RequestCount
rate_limit: true
labels:
label1: 1 # STRING
在此示例中,rate_limit
为 true
,因此该 aspect
必须指定 expiration
。 类似地,该 aspect
必须提供一个string
类型的标签。
Mixer 将使用限速的工作代理给实现 quotas
类型的 adapter
。 adapters.yml 定义这个配置。
- name: default
kind: quotas
impl: memQuota
params:
minDeduplicationDuration: 2s
上述示例中的 memQuota
适配器需要一个参数。运维人员可以通过指定备用 quotas
适配器从 memQuota
切换到 redisQuota
。
- name: default
kind: quotas
impl: redisQuota
params:
redisServerUrl: redisHost:6379
minDeduplicationDuration: 2s
以下示例显示了如何使用 选择器 选择性地应用限速。
- selector: source.labels["app"]=="reviews" && source.labels["version"] == "v3"
aspects:
- kind: quotas
params:
quotas:
- descriptorName: RequestCount
maxAmount: 5
expiration: 1s
labels:
label1: target.service
切面组合
上一节中概述的步骤适用于Mixer的所有切面。每个切面都需要特定的描述符
和适配器
。 下表列举了切面
,描述符
和适配器
的有效组合。
Istio使用 protobufs
来定义配置模式。 编写配置 文档解释了如何将 proto
定义表达为 yaml
。
配置的组织
切面配置适用到 subject
。 subject
是层次结构中的资源。 通常 subject
是服务,命名空间或集群的完全限定名称。切面配置可以应用于 subject
资源及其子资源。
推送配置
istioctl
将配置更改推送到API服务器。从Alpha版本开始,API服务器支持仅推送切面规则。
临时解决方法允许您按如下所示推送 adapters.yml
和 descriptors.yml
。
找到 Mixer pod
kubectl get pods -l istio=mixer
输出类似于:
NAME READY STATUS RESTARTS AGE
istio-mixer-2657627433-3r0nn 1/1 Running 0 2d
从 Mixer 中获取adapters.yml
kubectl cp istio-mixer-2657627433-3r0nn:/etc/opt/mixer/configroot/scopes/global/adapters.yml adapters.yml
编辑文件并推送回去
kubectl cp adapters.yml istio-mixer-2657627433-3r0nn:/etc/opt/mixer/configroot/scopes/global/adapters.yml
同样更新
/etc/opt/mixer/configroot/scopes/global/descriptors.yml
查看Mixer日志以检查验证错误,因为上述操作绕过了API服务器。