先查看这篇文章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)的过滤器涉及以下几个步骤:

  1. 准备WASM模块:

    • 编写你的WASM模块,其中包含Envoy的Filter逻辑。确保你的WASM模块包含了你期望的Filter行为,比如认证、日志记录等。
    • 编译WASM模块,以确保其与Envoy兼容。
  2. 配置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_filtermy_root_id/etc/wasm/ip-rate-limit/main.wasm
  • 如果你的envoy部署在k8s里,那上面的文件应该是envoy pod里的路径,你可以通过pvc进行指定pv,(pv对应存储类或者持久类)
  1. 部署Envoy配置:

    • 将更新后的Envoy配置部署到Rancher or k8s中。
  2. 监控日志和错误:

    • 监控Envoy的日志以查看是否有任何关于WASM Filter的错误或警告。确保Envoy能够成功加载和运行你的WASM模块。
  3. 测试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插件的更多相关文章

  1. 代码规范:idea上添加阿里巴巴Java开发插件

    在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改.     首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...

  2. windows上搭建svn 、 Eclipse上安装svn插件 、 eclipse中如何使用svn

    折腾了许久终于搞出来了. svn搭建 一.svn概述 SVN就是用于多个人共同开发同一个项目,共用资源的目的,该文描述了把svn搭建在本地上,和搭建在Eclipse4.5.2上. 二.svn分类 分为 ...

  3. L2Dwidget二次元前端添加人物插件

    如果想要在博客园上添加这个插件,只需要在设置的"页首html代码"中添加下面的js就行 <!-- 右下角live2d效果 --> <script src=&quo ...

  4. 如何在IDEA上 添加GIT和maven、mybatis插件

    IDEA工具上,添加GIT和maven.mybatis插件,相对比较简单: 首先下载GIT.maven.mybatis. 先添加GIT插件: 首先在IDEA找到file中找到setting,然后搜索g ...

  5. 从零开始入门 K8s | Kubernetes 存储架构及插件使用

    本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 导读:容器存储是 Kubernetes 系统中提供数据持久化的基础组件,是实现有状态服务的重要保证.Kubern ...

  6. 在kubernetes上运行WASM负载

    在kubernetes上运行WASM负载 WASM一般用在前端业务中,但目前有扩展到后端服务的趋势.本文使用Krustlet 将WASM服务部署到kubernetes. 简介 Krustlet 是一个 ...

  7. WebAssembly 助力云原生:APISIX 如何借助 Wasm 插件实现扩展功能?

    本文将介绍 Wasm,以及 Apache APISIX 如何实现 Wasm 功能. 作者朱欣欣,API7.ai 技术工程师 原文链接 什么是 Wasm Wasm 是 WebAssembly 的缩写.W ...

  8. Uploadify 上传文件插件详解

    Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...

  9. Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flas

    转自Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player Chromium谷歌的开源浏览器将不再支持Netscape浏览器插件API,Adobe ...

  10. 图片上传jQuery插件(兼容IE8)

      图片上传jQuery插件(兼容IE8) 代码来源 :https://github.com/zilan93/uploadImg   html <!DOCTYPE html> <ht ...

随机推荐

  1. 图加速数据湖分析-GeaFlow和Apache Hudi集成

    表模型现状与问题 关系模型自1970年由埃德加·科德提出来以后被广泛应用于数据库和数仓等数据处理系统的数据建模.关系模型以表作为基本的数据结构来定义数据模型,表为二维数据结构,本身缺乏关系的表达能力, ...

  2. vlak

    2023-7-14 题目 luogu题目传送门 题目描述 Nina 和 Emilija 正在玩一个特殊的游戏.这个游戏是在一张最开始为空白的纸上进行的.在每一个人的行动回合内,这个人会在这张纸上当前的 ...

  3. Go语言-Slice详解

    Go语言中的slice表示一个具有相同类型元素的可变长序列,语言本身提供了两个操作方法: 创建:make([]T,len,cap) 追加: append(slice, T ...) 同时slice支持 ...

  4. 【krpano】 ASP浏览量插件

    简述 这是一个Asp版krpano统计访问量案例,运用asp代码控制增值来实现的功能:现将案例上传网站供大家学习研究,希望对大家有所帮助. 功能 用户进入网页增值或刷新增值. 案例展示 所有文件如下图 ...

  5. 如何在kubernetes中实现分布式可扩展的WebSocket服务架构

    如何在kubernetes中实现分布式可扩展的WebSocket服务架构 How to implement a distributed and auto-scalable WebSocket serv ...

  6. LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...

  7. 20230919 .NET面经

    SQL IQuerable 和 IEnumerable 的主要区别? https://stackoverflow.com/questions/252785/what-is-the-difference ...

  8. Eclipse OSGI配置文件说明

  9. 5. 用Rust手把手编写一个Proxy(代理), 通讯协议建立, 为内网穿透做准备

    用Rust手把手编写一个Proxy(代理), 通讯协议建立, 为内网穿透做准备 项目 ++wmproxy++ gite: https://gitee.com/tickbh/wmproxy github ...

  10. 解密网络通信的关键技术(下):DNS、ARP、DHCP和NAT,你了解多少?

    引言 在上一章中,我们详细介绍了域名系统(DNS)和地址解析协议(ARP)的工作原理,从而对域名解析和介质访问控制(MAC)地址寻址有了更深入的了解.在今天的章节中,我们将继续探讨动态主机配置协议(D ...