Istio_06_Istio扩展
Extensibility
EnvoyFilter
EnvoyFilter(EF): 配置Envoy过滤器
- 本质: 将配置内容直接下发至Envoy
- 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> # 操作
- path操作可分为:
ADD、REMOVE、INSERT_BEFORE、INSERT_AFTER、INSERT_FIRST - 若匹配条件失败, 则将patch操作更改为
INSERT_FIRST
RateLimit
RateLimit(限流): 流量规划阈值, 并在超出时拒绝请求
- 限流分为: 本地限流、全局限流
- 限流功能基于数据面代理Envoy实现, 可通过EnvoyFilter配置限流参数
如: Istio的限流架构

- 全局限流要求对应服务实现标准限流接口的
gRPC
本地限流: 每个数据面代理Envoy单独限制所治理服务的请求
- 基于令牌桶机制, 支持L4的连接限制和L7的请求数限制
- 本地限流可能出现限流不均衡的问题(流量先分配后限流导致)
如: Istio本地限流原理

- 令牌桶初始化特定数量的令牌
- 每个请求需消费个流派, 当请求无法获取令牌时则请求失败
- 相隔固定时间之后向令牌桶填充特定数量的令牌, 令牌过多则丢弃之前的
全局限流: 基于标准限流接口的gRPC限制服务的请求
- 服务需实现基于限流标识和阈值配置, 执行各项限流控制
- 数据面代理Envoy根据全局限流配置将请求的重要内容转换成限流标识
- 全局代理配置: 原始请求的关键信息和服务限流标识的映射关系
- 请求可匹配多个限流规则, 其中有条不满足都会拒绝该请求
WasmPlugin
WasmPlugin(WP): WebAssembly扩展机制
- 本质: 以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虚拟机配置, 以环境变量方式注入
- 若省略
spec.selector, 则作用于WP所在NS下的所有服务

浙公网安备 33010602011771号