Professional Documents
Culture Documents
研发三部 温作超
密级:内部
目录
01 基 本 介 绍
02 原 理 分 析
03 E n vo yF i lter 介 绍
3.1 Wa s m f i l t e r 详 解
密级:内部
istio 是什么
istio是一个完全开
源的服务网格,作为透
明的一层接入到现有的
分布式应用程序里。
密级:内部
Envoy 是什么
Envoy 是专为大型现代
SOA(面向服务架构)架
构设计的 L7 代理和通信
总线,在 Istio 中,envoy
作为数据面,负责流量管
理。
密级:内部
EnvoyFilter 是什么
EnvoyFilter 是 istio 提供的一种 k8s 资源,支持从多个粒度修改 envoy 的配置。
配置EnvoyFilter
密级:内部
02
原理分析
密级:内部
原理分析
密级:内部
03
EnvoyFilter 介绍
密级:内部
EnvoyFilter 介绍
EnvoyFilter
密级:内部
配置 listener
listener 是 envoy 最重要的配置之一,envoy 通过 listener 实现对流量的管理。Istio 会为接
入网格内的服务自动配置 listener,当然你也可以 EnvoyFilter 去修改默认的配置。
示例
LISTENER
FILTER_CHAIN
Envoy listener 文档
NETWORK_FILTER
HTTP_FILTER
密级:内部
配置 RouteConfiguration
RouteConfiguration 配置位于 listener 中,不过由于层级太深,所以 istio 把该配置拎出来单独
处理。这样用户配置的时候会更加方便。 RouteConfiguration 用于配置路由规则,该
RouteConfiguration 专指 HttpConnectionManager 下的 route_config。
示例
RouteConfiguration
添加返回头
删除请求头
配置路由
密级:内部
匹配 cluster
在Envoy中,Cluster是一个服务集群,Cluster中包含一个到多个endpoint,每个endpoint都可
以提供服务,Envoy根据负载均衡算法将请求发送到这些endpoint中。
v1
Envoy Cluster 文档
示例
cluster v2
v3
密级:内部
Filter 是什么
Filter 是流量管理的重
要组成部分,能够控制流量
的处理流。有些 Filter(例如
lua filter, wasm filter)是
允许用户自定义,用户能够
操控他们实现定制化的需求
密级:内部
3.1
Wasm filter 详解
密级:内部
Wasm filter 详解
密级:内部
Wasm filter 构建
// 安装 wasme
$ curl -sL https://run.solo.io/wasme/install | sh
$ export PATH=$HOME/.wasme/bin:$PATH
// 验证 wasme
$ wasme --version
wasme version 0.0.33
// 初始化项目
$ wasme init ./new-filter
? What language do you wish to use for the filter:
cpp
rust
assemblyscript
▸ tinygo
? With which platforms do you wish to use the filter?:
▸ istio:1.7.x, gloo:1.6.x, istio:1.8.x, istio:1.9.x
密级:内部
Wasm filter 构建
// 按照需求修改代码
// 构建镜像
$ cd new-filter
$ wasme build <languge> -t webassemblyhub.io/<YOUR_USERNAME>/<PROJECT_NAME>:v0.1 .
// 查看镜像列表
$ wasme list -d
NAME TAG SIZE SHA UPDATED DIRECTORY
webassemblyhub.io/ilackarms/assemblyscript-test istio-1.5 12.6 kB a515a5d2 29 Apr 21 14:41 CST
/root/.wasme/store/50873deb75ceeb7b584501aac92aacf7
密级:内部
Wasm filter 验证
// 部署测试用例
$ kubectl create ns sample
$ kubectl label namespace sample istio-injection=enabled
$ kubectl apply –f service.yaml –n sample
// 查询 filter.wasm 是否挂载成功
$ kubectl exec deploy/helloworld-v1 –n sample -c istio-proxy -- ls /var/local/lib/wasm-filters
// 查看服务 cluster-ip
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloworld ClusterIP 10.109.99.84 <none> 5000/TCP 19h
密级:内部
Wasm filter 验证
// 使用服务的 cluster-ip 调用服务
$ curl -v http://10.109.99.84:5000/hello
> GET /hello HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.109.99.84:5000
> Accept: */*
>
< HTTP/1.1 200 OK
< newheader: my-config // 代码里配置的 header,说明 filter 配置生效
< location: envoy-wasm
< x-envoy-decorator-operation: helloworld.default.svc.cluster.local:5000/*
<
Hello version: v1, instance: helloworld-v1-6b8955fc4-2kmrl
* Connection #0 to host 10.109.99.84 left intact
密级:内部
3.2
Lua filter 详解
密级:内部
Lua filter 详解
Lua filter 是 envoy 原生支持的 filter,用户可以在 filter 中使用自定义的 lua 脚本。具体的使用可以参考
文档:https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter
增加/删除请求头 请求其他服务
示例
修改请求Body 增加/删除返回头
Lua Filter
中断请求
打印日志
修改返回Body
密级:内部
谢谢!
密级:内部