k8s~envoy上添加wasm插件
先查看这篇文章k8s~envoy的部署
当在Kubernetes中使用Envoy的WASM过滤器时,WASM过滤器会与Envoy一起部署在同一个Pod中,并与后端服务进行通信。以下是一个简单的关系图示意:
+----------------------+
| Kubernetes |
| Cluster |
+----------|-----------+
|
|
+----------v-----------+
| |
| Pod |
| |
| +------------------+ |
| | Envoy | |
| | with WASM | |
| | Filter | |
| +------------------+ |
| | Backend App | |
| +------------------+ |
| |
+----------------------+
在这个示意图中,我们有一个运行在Kubernetes中的Pod,其中包含了Envoy和后端服务两个容器。Envoy与WASM过滤器一起作为Sidecar代理与后端服务一起运行,负责处理流量转发、负载均衡、安全策略等功能。后端服务则是实际提供业务功能的应用程序。
wasm部署过程
WASM过滤器可以在Envoy中拦截请求并对其进行修改或增强,然后将请求发送到后端服务。这种部署模式允许WASM过滤器直接与Envoy共享相同的网络命名空间,并通过Envoy来与后端服务通信。
在Kubernetes中应用Envoy的Filter并实现WebAssembly(WASM)的过滤器涉及以下几个步骤:
准备WASM模块:
- 编写你的WASM模块,其中包含Envoy的Filter逻辑。确保你的WASM模块包含了你期望的Filter行为,比如认证、日志记录等。
- 编译WASM模块,以确保其与Envoy兼容。
配置Envoy Filter:
在你的Envoy配置文件中,添加一个Filter配置,指定使用你的WASM模块。
在配置文件中,你可能需要添加类似以下的部分:
filters:
- name: envoy.filters.http.wasm
config:
name: "my_wasm_filter"
root_id: "my_root_id"
vm_config:
code:
local:
filename: "/etc/wasm/ip-rate-limit/main.wasm"
runtime: "envoy.wasm.runtime.v8"
configuration:
"@type": "type.googleapis.com/google.protobuf.StringValue"
value: |
{
"ttlSecond": 60,
"burst": 3
}
- 请根据实际情况替换
my_wasm_filter、my_root_id、/etc/wasm/ip-rate-limit/main.wasm。 - 如果你的envoy部署在k8s里,那上面的文件应该是envoy pod里的路径,你可以通过pvc进行指定pv,(pv对应存储类或者持久类)
部署Envoy配置:
- 将更新后的Envoy配置部署到Rancher or k8s中。
监控日志和错误:
- 监控Envoy的日志以查看是否有任何关于WASM Filter的错误或警告。确保Envoy能够成功加载和运行你的WASM模块。
测试Filter行为:
- 发送请求到Envoy并确保WASM Filter按照预期进行操作。可以通过查看Envoy的日志、观察返回的请求或使用其他调试工具来验证Filter的行为。
envoy版本的注意项
- envoyproxy/envoy:v1.21-latest,对应10000端口
- envoyproxy/envoy 对应80端口
完成的envoy.yaml配置
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address: { address: 0.0.0.0, port_value: 9901 } #envoy后台系统的端口
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 10000 } #envoy路由的端口
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
scheme_header_transformation:
scheme_to_overwrite: https
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: httpbin
http_filters:
- name: wasmdemo
typed_config:
"@type": type.googleapis.com/udpa.type.v1.TypedStruct
type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
value:
config:
name: wasmdemo
vm_config:
runtime: envoy.wasm.runtime.v8
code:
local:
filename: /etc/wasm/ip-rate-limit/main.wasm
configuration:
"@type": "type.googleapis.com/google.protobuf.StringValue"
value: |
{
"ttlSecond": 60,
"burst": 3
}
- name: envoy.filters.http.router
clusters:
- name: httpbin
connect_timeout: 30s
type: LOGICAL_DNS
# Comment out the following line to test on v6 networks
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: httpbin
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: httpbin_app_service.app_namespace
port_value: 8080
最后,我们把envoy服务的10000端口公开出去,在集群外就可以访问它了,你的wasm就可以被启用了;当然将10000端口公开出现的方法有很多,比较通用的方式是将它通过ingress或者阿里higress进行代理,更灵活。
k8s~envoy上添加wasm插件的更多相关文章
- 代码规范:idea上添加阿里巴巴Java开发插件
在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改. 首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...
- windows上搭建svn 、 Eclipse上安装svn插件 、 eclipse中如何使用svn
折腾了许久终于搞出来了. svn搭建 一.svn概述 SVN就是用于多个人共同开发同一个项目,共用资源的目的,该文描述了把svn搭建在本地上,和搭建在Eclipse4.5.2上. 二.svn分类 分为 ...
- L2Dwidget二次元前端添加人物插件
如果想要在博客园上添加这个插件,只需要在设置的"页首html代码"中添加下面的js就行 <!-- 右下角live2d效果 --> <script src=&quo ...
- 如何在IDEA上 添加GIT和maven、mybatis插件
IDEA工具上,添加GIT和maven.mybatis插件,相对比较简单: 首先下载GIT.maven.mybatis. 先添加GIT插件: 首先在IDEA找到file中找到setting,然后搜索g ...
- 从零开始入门 K8s | Kubernetes 存储架构及插件使用
本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 导读:容器存储是 Kubernetes 系统中提供数据持久化的基础组件,是实现有状态服务的重要保证.Kubern ...
- 在kubernetes上运行WASM负载
在kubernetes上运行WASM负载 WASM一般用在前端业务中,但目前有扩展到后端服务的趋势.本文使用Krustlet 将WASM服务部署到kubernetes. 简介 Krustlet 是一个 ...
- WebAssembly 助力云原生:APISIX 如何借助 Wasm 插件实现扩展功能?
本文将介绍 Wasm,以及 Apache APISIX 如何实现 Wasm 功能. 作者朱欣欣,API7.ai 技术工程师 原文链接 什么是 Wasm Wasm 是 WebAssembly 的缩写.W ...
- Uploadify 上传文件插件详解
Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...
- Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flas
转自Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player Chromium谷歌的开源浏览器将不再支持Netscape浏览器插件API,Adobe ...
- 图片上传jQuery插件(兼容IE8)
图片上传jQuery插件(兼容IE8) 代码来源 :https://github.com/zilan93/uploadImg html <!DOCTYPE html> <ht ...
随机推荐
- Web通用漏洞--SSRF
Web通用漏洞--SSRF 漏洞简介 SSRF(Server-Side Request Forgery:服务器端请求伪造) 一种由攻击者构造形成由服务端发起请求的一个安全漏洞; 一般情况下,SSRF攻 ...
- 使用Jenkins部署Git仓库微服务项目
Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具.本文使用Jenkins自动构建git仓库中的微服务项目,包括Jenkins的安装,插件的安装:系统环境的配置:docker镜像构建的 ...
- 9.1 C++ STL 排序、算数与集合
C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法.在STL中,排序.算数和集合算法是常用的 ...
- 【路由器】OpenWrt 简介和安装
目录 简介 来源 介绍 安装 一般安装流程 固件搜索下载 参考资料 简介 来源 2002 年底 Linksys 公司推出 WRT-54G,采用了 Linux 取代了原来的 vXworks 系统.迫于 ...
- Redis系列20:LFU内存淘汰算法分析
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...
- Java爬虫实战系列——常用的Java网络爬虫库
常用的Java网络爬虫库 Java 开发语言是业界使用最广泛的开发语言之一,在互联网从业者中具有广泛的使用者,Java 网络爬虫可以帮助 Java 开发人员以快速.简单但广泛的方式为各种目的抓取数据. ...
- 作为用户我该如何调用API 接口获取商品数据
作为用户,如果你想要获取商品数据,可以通过调用API接口来实现.下面是一些步骤和注意事项,帮助你成功获取商品数据. 了解开放平台:首先,你需要了解开放平台,注册一个开发者账号,并创建一个应用.在创建应 ...
- C++算法之旅、05 基础篇 | 第二章 数据结构
常用代码模板2--数据结构 - AcWing 笔试用数组模拟而不是结构体 使用结构体指针,new Node() 非常慢,创建10万个节点就超时了,做笔试题不会用这种方式(优化是提前初始化好数组,但这样 ...
- Windows安装JDK 8/11/17教程
JDK,全称Java Development Kit,即Java开发工具包,它是整个Java开发的核心,包含了Java运行环境(JVM+Java系统类库)和Java工具.目前JDK 8.11.17是长 ...
- KRPANO开发拍摄拼图视频常用软件分享
KRPano开发拍摄拼图视频常用软件分享,包含了KRPano开发,拼图,视频等软件. 包括如下软件: 全景照片拼接,全景照片查看,全景视频拼接,全景视频查看,全景视频插件,全景漫游制作,KRPano资 ...