Istio_06_Istio扩展

Extensibility

EnvoyFilter

EnvoyFilter(EF): 配置Envoy过滤器

  1. 本质: 将配置内容直接下发至Envoy
  2. Istio各资源对象均交由Pilot解析转换为Envoy配置后再下发

EF常用配置清单:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: <String>
  namespace: <String>
spec:
  workloadSelector: <Object>       # Label匹配管理的服务
  priority: <Integer>              # 优先级(值越低, 优先级越高)
  configPatches: <[]Object>        # Envoy过滤器配置
  - match: <Object>                # 匹配条件
      context: <String>            # 配置生成的上下文(配置生效处: 出流量、入流量、网关)
      proxy: <Object>              # 代理的匹配条件
      listener: <Object>           # 监听器匹配
      routeConfiguration: <Object> # 路由匹配
      cluster: <Object>            # 服务匹配
    applyTo: <String>              # 应用到Envoy的配置对象
    patch: <Object>                # 操作
  1. path操作可分为: ADDREMOVEINSERT_BEFOREINSERT_AFTERINSERT_FIRST
  2. 若匹配条件失败, 则将patch操作更改为INSERT_FIRST

RateLimit

RateLimit(限流): 流量规划阈值, 并在超出时拒绝请求

  1. 限流分为: 本地限流、全局限流
  2. 限流功能基于数据面代理Envoy实现, 可通过EnvoyFilter配置限流参数

如: Istio的限流架构

image

  1. 全局限流要求对应服务实现标准限流接口的gRPC

本地限流: 每个数据面代理Envoy单独限制所治理服务的请求

  1. 基于令牌桶机制, 支持L4的连接限制和L7的请求数限制
  2. 本地限流可能出现限流不均衡的问题(流量先分配后限流导致)

如: Istio本地限流原理

image

  1. 令牌桶初始化特定数量的令牌
  2. 每个请求需消费个流派, 当请求无法获取令牌时则请求失败
  3. 相隔固定时间之后向令牌桶填充特定数量的令牌, 令牌过多则丢弃之前的

全局限流: 基于标准限流接口的gRPC限制服务的请求

  1. 服务需实现基于限流标识和阈值配置, 执行各项限流控制
  2. 数据面代理Envoy根据全局限流配置将请求的重要内容转换成限流标识
  3. 全局代理配置: 原始请求的关键信息和服务限流标识的映射关系
  4. 请求可匹配多个限流规则, 其中有条不满足都会拒绝该请求

WasmPlugin

WasmPlugin(WP): WebAssembly扩展机制

  1. 本质: 以CRD的形式声明Wasm的用法

WP常用配置清单:

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <String>
  namespace: <String>
spec:
  selector: <Object>        # Label匹配管理的服务
  url: <String>             # Wasm二进制/镜像地址
  sha256: <String>          # 校验Wasm二进制/镜像的Hash值
  imagePullPolicy: <String> # 镜像拉取策略(与Pod相同)
  imagePullSecret: <String> # Wasm拉取镜像的凭证, Kubernetes中的Secret名称
  pluginName: <String>      # Wasm在Envoy配置中的名称
  pluginConfig: <Object>    # Wasm配置(根据Wasm程序决定)
  phase: <String>           # 插入位置(UNSPECIFIED_PHASE、AUTHN、AUTHZ、STATS)
  priority: <Integer>       # 优先级(相同phase的不同Wasm插入顺序)
  vmConfig: <Object>        # Wasm虚拟机配置, 以环境变量方式注入
  1. 若省略spec.selector, 则作用于WP所在NS下的所有服务

posted @ 2024-12-23 11:27  爱和可乐的w  阅读(20)  评论(0)    收藏  举报