Mixer 为应用程序和基础架构后端之间提供了一个通用的策略控制层,负责先决条件检查(如认证授权)、配额管理并从 Envoy 代理中收集遥测数据等。

策略管理 - 图1

Mixer 是高度模块化和可扩展的组件。他的一个关键功能就是把不同后端的策略和遥测收集系统的细节抽象出来,使得 Istio 的其余部分对这些后端不知情。Mixer 处理不同基础设施后端的灵活性是通过使用通用插件模型实现的。每个插件都被称为 Adapter,Mixer通过它们与不同的基础设施后端连接,这些后端可提供核心功能,例如日志、监控、配额、ACL 检查等。通过配置能够决定在运行时使用的确切的适配器套件,并且可以轻松扩展到新的或定制的基础设施后端。

策略管理 - 图2

实现原理

本质上,Mixer 是一个 属性 处理机,进入 Mixer 的请求带有一系列的属性,Mixer 按照不同的处理阶段处理:

  • 通过全局 Adapters 为请求引入新的属性
  • 通过解析(Resolution)识别要用于处理请求的配置资源
  • 处理属性,生成 Adapter 参数
  • 分发请求到各个 Adapters 后端处理

策略管理 - 图3

流量限制示例

  1. apiVersion: "config.istio.io/v1alpha2"
  2. kind: memquota
  3. metadata:
  4. name: handler
  5. namespace: istio-system
  6. spec:
  7. quotas:
  8. - name: requestcount.quota.istio-system
  9. maxAmount: 5000
  10. validDuration: 1s
  11. # The first matching override is applied.
  12. # A requestcount instance is checked against override dimensions.
  13. overrides:
  14. # The following override applies to 'ratings' when
  15. # the source is 'reviews'.
  16. - dimensions:
  17. destination: ratings
  18. source: reviews
  19. maxAmount: 1
  20. validDuration: 1s
  21. # The following override applies to 'ratings' regardless
  22. # of the source.
  23. - dimensions:
  24. destination: ratings
  25. maxAmount: 100
  26. validDuration: 1s
  27. ---
  28. apiVersion: "config.istio.io/v1alpha2"
  29. kind: quota
  30. metadata:
  31. name: requestcount
  32. namespace: istio-system
  33. spec:
  34. dimensions:
  35. source: source.labels["app"] | source.service | "unknown"
  36. sourceVersion: source.labels["version"] | "unknown"
  37. destination: destination.labels["app"] | destination.service | "unknown"
  38. destinationVersion: destination.labels["version"] | "unknown"
  39. ---
  40. apiVersion: "config.istio.io/v1alpha2"
  41. kind: rule
  42. metadata:
  43. name: quota
  44. namespace: istio-system
  45. spec:
  46. actions:
  47. - handler: handler.memquota
  48. instances:
  49. - requestcount.quota
  50. ---
  51. apiVersion: config.istio.io/v1alpha2
  52. kind: QuotaSpec
  53. metadata:
  54. name: request-count
  55. namespace: istio-system
  56. spec:
  57. rules:
  58. - quotas:
  59. - charge: 1
  60. quota: requestcount
  61. ---
  62. apiVersion: config.istio.io/v1alpha2
  63. kind: QuotaSpecBinding
  64. metadata:
  65. name: request-count
  66. namespace: istio-system
  67. spec:
  68. quotaSpecs:
  69. - name: request-count
  70. namespace: istio-system
  71. services:
  72. - name: ratings
  73. - name: reviews
  74. - name: details
  75. - name: productpage

参考文档