istio.io/archive/v1.12/zh/blog/2020/wasm-announce/index.html

15 lines
30 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=zh itemscope itemtype=https://schema.org/WebPage><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=theme-color content="#466BB0"><meta name=title content="重新定义代理的扩展性Envoy 和 Istio 引入 WebAssembly"><meta name=description content="Istio 的扩展中使用 WASM 的前景。"><meta name=author content="Craig Box, Mandar Jog, John Plevyak, Louis Ryan, Piotr Sikora (Google), Yuval Kohavi, Scott Weiss (Solo.io)"><meta name=keywords content="microservices,services,mesh,wasm,extensibility,alpha,performance,operator"><meta property="og:title" content="重新定义代理的扩展性Envoy 和 Istio 引入 WebAssembly"><meta property="og:type" content="website"><meta property="og:description" content="Istio 的扩展中使用 WASM 的前景。"><meta property="og:url" content="/v1.12/zh/blog/2020/wasm-announce/"><meta property="og:image" content="https://raw.githubusercontent.com/istio/istio.io/master/static/img/istio-whitelogo-bluebackground-framed.svg"><meta property="og:image:alt" content="Istio Logo"><meta property="og:image:width" content="1024"><meta property="og:image:height" content="1024"><meta property="og:site_name" content="Istio"><meta name=twitter:card content="summary"><meta name=twitter:site content="@IstioMesh"><title>Istioldie 1.12 / 重新定义代理的扩展性Envoy 和 Istio 引入 WebAssembly</title><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98480406-2"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}
gtag('js',new Date());gtag('config','UA-98480406-2');</script><link rel=alternate type=application/rss+xml title="Istio Blog" href=/v1.12/blog/feed.xml><link rel=alternate type=application/rss+xml title="Istio News" href=/v1.12/news/feed.xml><link rel=alternate type=application/rss+xml title="Istio Blog and News" href=/v1.12/feed.xml><link rel="shortcut icon" href=/v1.12/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.12/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.12/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.12/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.12/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.12/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.12/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.12/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.12/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.12/favicons/android-192x192.png sizes=192x192><link rel=mask-icon href=/v1.12/favicons/safari-pinned-tab.svg color=#466bb0><link rel=manifest href=/v1.12/manifest.json><meta name=apple-mobile-web-app-title content="Istio"><meta name=application-name content="Istio"><meta name=msapplication-config content="/browserconfig.xml"><meta name=msapplication-TileColor content="#466BB0"><meta name=theme-color content="#466BB0"><link rel=stylesheet href=/v1.12/css/all.css><link rel=preconnect href=https://fonts.gstatic.com><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap"><script src=/v1.12/js/themes_init.min.js></script></head><body class="language-unknown archive-site"><script>const branchName="release-1.12";const docTitle="重新定义代理的扩展性Envoy 和 Istio 引入 WebAssembly";const iconFile="\/v1.12/img/icons.svg";const buttonCopy='复制到剪切板';const buttonPrint='打印';const buttonDownload='下载';</script><script src="https://www.google.com/cse/brand?form=search-form" defer></script><script src=/v1.12/js/all.min.js data-manual defer></script><header class=main-navigation><nav class="main-navigation-wrapper container-l"><div class=main-navigation-header><a id=brand href=/v1.12/zh/><span class=logo><svg xmlns="http://www.w3.org/2000/svg" width="128" height="60" viewBox="0 0 128 60"><path d="M58.434 48.823A.441.441.0 0158.3 48.497V22.583a.444.444.0 01.134-.326.446.446.0 01.327-.134h3.527a.447.447.0 01.325.134.447.447.0 01.134.326v25.914a.443.443.0 01-.134.326.444.444.0 01-.325.134h-3.527a.444.444.0 01-.327-.134z"/><path d="m70.969 48.477a6.556 6.556.0 01-2.818-1.955 4.338 4.338.0 01-1-2.78v-.345a.443.443.0 01.134-.326.444.444.0 01.326-.135h3.374a.444.444.0 01.326.135.445.445.0 01.134.326v.077a2.014 2.014.0 001.054 1.667 4.672 4.672.0 002.664.709 4.446 4.446.0 002.492-.633 1.862 1.862.0 00.958-1.591 1.426 1.426.0 00-.786-1.322 12.7 12.7.0 00-2.549-.939l-1.457-.46a21.526 21.526.0 01-3.3-1.227 6.57 6.57.0 01-2.262-1.783 4.435 4.435.0 01-.92-2.894 5.081 5.081.0 012.109-4.275 8.993 8.993.0 015.558-1.591 10.445 10.445.0 014.1.748 6.3 6.3.0 012.722 2.07 5 5 0 01.958 3.009.441.441.0 01-.134.326.441.441.0 01-.325.134h-3.258a.441.441.0 01-.326-.134.443.443.0 01-.134-.326 1.974 1.974.0 00-.978-1.667 4.647 4.647.0 00-2.665-.671 4.741 4.741.0 00-2.435.556 1.724 1.724.0 00-.938 1.553 1.512 1.512.0 00.9 1.4 15.875 15.875.0 003.01 1.055l.843.229a27.368 27.368.0 013.412 1.246 6.67 6.67.0 012.338 1.763 4.387 4.387.0 01.958 2.933 4.988 4.988.0 01-2.146 4.275 9.543 9.543.0 01-5.712 1.552 11.626 11.626.0 01-4.227-.709z"/><path d="m97.039 32.837a.443.443.0 01-.326.135h-3.911a.169.169.0 00-.191.192v9.239a2.951 2.951.0 00.632 2.108 2.7 2.7.0 002.013.652h1.15a.444.444.0 01.325.134.441.441.0 01.134.326v2.875a.471.471.0 01-.459.5l-1.994.039a8 8 0 01-4.524-1.035q-1.495-1.035-1.533-3.91V33.166A.17.17.0 0088.164 32.974H85.978A.441.441.0 0185.652 32.839.441.441.0 0185.518 32.513V29.83a.441.441.0 01.134-.326.444.444.0 01.326-.135h2.186a.169.169.0 00.191-.192v-4.485a.438.438.0 01.134-.326.44.44.0 01.325-.134h3.336a.443.443.0 01.325.134.442.442.0 01.135.326v4.485a.169.169.0 00.191.192h3.911a.446.446.0 01.326.135.446.446.0 01.134.326v2.683a.446.446.0 01-.133.324z"/><path d="m101.694 25.917a2.645 2.645.0 01-.767-1.955 2.65 2.65.0 01.767-1.955 2.65 2.65.0 011.955-.767 2.65 2.65.0 011.955.767 2.652 2.652.0 01.767 1.955 2.647 2.647.0 01-.767 1.955 2.646 2.646.0 01-1.955.767 2.645 2.645.0 01-1.955-.767zm-.211 22.906a.441.441.0 01-.134-.326V29.79a.444.444.0 01.134-.326.446.446.0 01.326-.134h3.527a.446.446.0 01.326.134.445.445.0 01.134.326v18.707a.443.443.0 01-.134.326.443.443.0 01-.326.134h-3.527a.443.443.0 01-.326-.134z"/><path d="m114.019 47.734a8.1 8.1.0 01-3.047-4.255 14.439 14.439.0 01-.652-4.37 14.3 14.3.0 01.614-4.371 7.869 7.869.0 013.066-4.178 9.072 9.072.0 015.252-1.5 8.543 8.543.0 015.041 1.5 7.985 7.985.0 013.009 4.14 12.439 12.439.0 01.69 4.37 13.793 13.793.0 01-.651 4.37 8.255 8.255.0 01-3.028 4.275 8.475 8.475.0 01-5.1 1.553 8.754 8.754.0 01-5.194-1.534zm7.629-3.1a4.536 4.536.0 001.476-2.262 11.335 11.335.0 00.383-3.221 10.618 10.618.0 00-.383-3.22 4.169 4.169.0 00-1.457-2.243 4.066 4.066.0 00-2.531-.785 3.942 3.942.0 00-2.453.785 4.376 4.376.0 00-1.5 2.243 11.839 11.839.0 00-.383 3.22 11.84 11.84.0 00.383 3.221 4.222 4.222.0 001.476 2.262 4.075 4.075.0 002.549.8 3.8 3.8.0 002.44-.809z"/><path d="m15.105 32.057v15.565a.059.059.0 01-.049.059L.069 50.25A.06.06.0 01.005 50.167l14.987-33.47a.06.06.0 01.114.025z"/><path d="m17.631 23.087v24.6a.06.06.0 00.053.059l22.449 2.507a.06.06.0 00.061-.084L17.745.032a.06.06.0 00-.114.024z"/><path d="m39.961 52.548-24.833 7.45a.062.062.0 01-.043.0L.079 52.548a.059.059.0 01.026-.113h39.839a.06.06.0 01.017.113z"/></svg></span></a><button id=hamburger class=main-navigation-toggle aria-label="Open navigation"><svg class="icon menu-hamburger"><use xlink:href="/v1.12/img/icons.svg#menu-hamburger"/></svg></button>
<button id=menu-close class=main-navigation-toggle aria-label="Close navigation"><svg class="icon menu-close"><use xlink:href="/v1.12/img/icons.svg#menu-close"/></svg></button></div><div id=header-links class=main-navigation-links-wrapper><ul class=main-navigation-links><li class=main-navigation-links-item><a class="main-navigation-links-link has-dropdown"><span>关于</span><svg class="icon dropdown-arrow"><use xlink:href="/v1.12/img/icons.svg#dropdown-arrow"/></svg></a><ul class=main-navigation-links-dropdown><li class=main-navigation-links-dropdown-item><a href=/v1.12/zh/about/service-mesh class=main-navigation-links-link>服务网格</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.12/zh/about/solutions class=main-navigation-links-link>解决方案</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.12/zh/about/case-studies class=main-navigation-links-link>案例学习</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.12/zh/about/ecosystem class=main-navigation-links-link>生态系统</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.12/zh/about/deployment class=main-navigation-links-link>部署</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.12/zh/about/faq class=main-navigation-links-link>FAQ</a></li></ul></li><li class=main-navigation-links-item><a href=/v1.12/zh/blog/ class=main-navigation-links-link><span>博客</span></a></li><li class=main-navigation-links-item><a href=/v1.12/zh/news/ class=main-navigation-links-link><span>新闻</span></a></li><li class=main-navigation-links-item><a href=/v1.12/zh/get-involved/ class=main-navigation-links-link><span>加入我们</span></a></li><li class=main-navigation-links-item><a href=/v1.12/zh/docs/ class=main-navigation-links-link><span>文档</span></a></li></ul><div class=main-navigation-footer><button id=search-show class=search-show title="搜索 istio.io" aria-label=搜索><svg class="icon magnifier"><use xlink:href="/v1.12/img/icons.svg#magnifier"/></svg></button>
<a href=/v1.12/zh/docs/setup/getting-started class="btn btn--primary" id=try-istio>试用 Istio</a></div></div><form id=search-form class=search name=cse role=search><input type=hidden name=cx value=002184991200833970123:iwwf17ikgf4>
<input type=hidden name=ie value=utf-8>
<input type=hidden name=hl value=zh>
<input type=hidden id=search-page-url value=/zh/search>
<input id=search-textbox class="search-textbox form-control" name=q type=search aria-label="搜索 istio.io" placeholder=搜索>
<button id=search-close title=取消搜索 type=reset aria-label=取消搜索><svg class="icon menu-close"><use xlink:href="/v1.12/img/icons.svg#menu-close"/></svg></button></form></nav></header><div class=banner-container></div><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=header-content><h1>重新定义代理的扩展性Envoy 和 Istio 引入 WebAssembly</h1><p>Istio 的扩展中使用 WASM 的前景。</p></div><p class=post-author>Mar 5, 2020 <span>|</span> By Craig Box, Mandar Jog, John Plevyak, Louis Ryan, Piotr Sikora - Google, Yuval Kohavi, Scott Weiss - Solo.io</p><div><p>自 2016 年使用 <a href=https://www.envoyproxy.io/>Envoy</a> 以后Istio 项目一直想提供一个平台,在此平台上可以构建丰富的扩展,以满足用户多样化的需求。有很多要向服务网格的数据平面增加功能的理由 &mdash; 比如:支持更新的协议,与专有安全控件集成,或是通过自定义度量来增强可观察性。</p><p>在过去的一年半中,我们在 Google 的团队一直在努力用 <a href=https://webassembly.org/>WebAssembly</a> 来为 Envoy 代理添加动态扩展。今天我们很高兴与大家分享这项工作,并推出<a href=https://github.com/proxy-wasm/spec>针对代理的 WebAssembly (Wasm)</a> (Proxy-Wasm):包括一个会标准化的 ABISDK以及它的第一个重点实现新的低延迟的 <a href=/v1.12/zh/docs/reference/config/telemetry>Istio 遥测系统</a></p><p>我们还与社区紧密合作以确保为用户提供良好的开发者体验帮助他们快速上手。Google 团队一直与 <a href=https://solo.io>Solo.io</a> 团队紧密合作Solo 他们已经建立了 <a href=https://webassemblyhub.io/>WebAssembly Hub</a> 服务,用于构建,共享,发现和部署 Wasm 扩展。有了 WebAssembly HubWasm 扩展就会像容器一样易于管理,安装和运行。</p><p>这个项目现在发布了 Alpha 版本,仍然还有很多<a href=#next-steps>工作要做</a>,但是我们很高兴将其交提供给开发者,以便他们可以开始尝试由此带来的巨大可能性。</p><h2 id=background>背景</h2><p>可扩展需求一直都是 Istio 和 Envoy 项目的基本原则但是两个项目采用了不同的实现方式。Istio 项目的做法是启用一个通用的进程外扩展模型,叫做 <a href=/v1.12/zh/docs/reference/config/policy-and-telemetry/mixer-overview/>Mixer</a>,以此带来轻量级的开发者体验,而 Envoy 则专注于代理内<a href=https://www.envoyproxy.io/docs/envoy/latest/extending/extending>扩展</a></p><p>每种方法都各有利弊。Istio 模型导致明显的资源效率低下,从而影响了尾部延迟和资源利用率。该模型在根本上来说是有局限性的 - 例如,它永远不会支持实现<a href=https://blog.envoyproxy.io/how-to-write-envoy-filters-like-a-ninja-part-1-d166e5abec09>自定义协议处理</a></p><p>Envoy 模型强化了单体构建过程,并要求使用 C++ 编写扩展,从而限制了开发者的生态。给集群发布新的扩展需要下发新的二进制文件并滚动重启,这可能很难协调,并有可能会导致停机。这也促使了开发者向 Envoy 上游提交他们的扩展,而这些扩展仅由一小部分生产环境使用,更多仅仅是为了利用其发布机制。</p><p>随着时间的流逝Istio 的一些对性能最敏感的功能已合进了上游的 Envoy - 例如<a href=https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/security/rbac_filter>流量检查策略</a>和例如<a href=/v1.12/zh/docs/reference/config/telemetry/metrics/>遥测上报</a>。尽管如此,我们一直想把扩展汇聚在一个技术栈上,从而减少两者之间犹豫的权衡:这使 Envoy 版本与其扩展生态系统脱钩,使开发者能够使用他们选择的语言进行工作,并使 Istio 可靠地推出新功能而不必有停机风险。</p><h2 id=what-is-WebAssembly>什么是 WebAssembly</h2><p><a href=https://webassembly.org/>WebAssembly</a>Wasm是一种由<a href=https://github.com/appcypher/awesome-wasm-langs>多种语言</a>编写的,可移植的字节码格式,它能以以接近本机的速度执行。其最初的<a href=https://webassembly.org/docs/high-level-goals/>设计目标</a>与上述挑战很相符并且在其背后得到了相当大的行业支持。Wasm 是在所有主流浏览器中可以本地运行的第四种标准语言(继 HTMLCSS 和 JavaScript 之后),于 2019 年 12 月成为 <a href=https://www.w3.org/TR/wasm-core-1/>W3C 正式建议</a>。这使我们有信心对其进行战略下注。</p><p>尽管 WebAssembly 最初是作为客户端技术而诞生,但它在服务器上用也有很多优势。运行时是内存安全的,并且以沙盒方式运行以确保安全。它有一个很大的工具生态系统,用于以文本或二进制格式编译和调试 Wasm。<a href=https://www.w3.org/>W3C</a><a href=https://bytecodealliance.org/>BytecodeAlliance</a> 已成为其它服务器端工作的活跃中心。比如Wasm 社区正在 W3C 中标准化 <a href=https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/>&ldquo;WebAssembly 系统接口 Interface&rdquo; (WASI)</a>,并通过一个示例实现,它为 Wasm “程序” 提供了一个类似 OS 的抽象。</p><h2 id=bringing-WebAssembly-to-Envoy>把 WebAssembly 引入 Envoy</h2><p><a href=https://github.com/envoyproxy/envoy/issues/4272>在过去的 18 个月中</a>,我们一直与 Envoy 社区合作把 Wasm 的扩展引入 Envoy并将其贡献到上游。我们很高兴地宣布此特性在 <a href=/v1.12/zh/news/releases/1.5.x/announcing-1.5/>Istio 1.5</a> 自带的 Envoy 中以 Alpha 版本可用了,其源代码在 <a href=https://github.com/envoyproxy/envoy-wasm/><code>envoy-wasm</code></a> 开发分支中,并且正在努力将其合并到 Envoy 主干上。该实现使用了 Google 高性能 <a href=https://v8.dev/>V8 引擎</a>中内置的 WebAssembly 运行时。</p><p>除了构建底层的运行时,我们还构建了:</p><ul><li>把 Wasm 嵌入代理的通用应用程序二进制接口ABI这意味着编译后的扩展将可以在不同版本的 Envoy 中工作,甚至其它代理也可以,当然当然,其它代理得实现 ABI。</li><li><a href=https://github.com/proxy-wasm/proxy-wasm-cpp-sdk>C++</a>,
<a href=https://github.com/proxy-wasm/proxy-wasm-rust-sdk>Rust</a><a href=https://github.com/solo-io/proxy-runtime>AssemblyScript</a> 可以方便进行扩展开发的 SDK后续还有很多语言支持</li><li>全面的<a href=https://docs.solo.io/web-assembly-hub/latest/tutorial_code/>示例和说明</a>介绍如何在 Istio 和独立的 Envoy 中部署</li><li>允许使用其它 Wasm 运行时的抽象,包括把本地把扩展直接编译进 Envoy 中 “null” 运行时,这对于测试和调试非常有用</li></ul><p>使用 Wasm 扩展 Envoy 带来了几个主要好处:</p><ul><li>敏捷性:可以用 Istio 控制平面在运行时下发和重载扩展。这就可以快速的进行扩展开发→ 测试→ 发布周期,而无需重启 Envoy。</li><li>发布库一旦完成合并到主树中之后Istio 和其它程序将能够使用 Envoy 的发布库,而不是自己构建。这也方便 Envoy 社区迁移某些内置扩展到这个模型,从而减少他们的工作。</li><li>可靠性和隔离性:扩展部署在具有资源限制的沙箱中,这意味着它们现在可以崩溃或泄漏内存,但不会让整个 Envoy 挂掉。CPU 和内存使用率也可以受到限制。</li><li>安全性:沙盒具有一个明确定义的 API用于和 Envoy 通信,因此扩展只能访问和修改链接或者请求中有限数量的属性。此外,由于 Envoy 协调整个交互因此它可以隐藏或清除扩展中的敏感信息例如HTTP 头中的 “Authorization”和“Cookie”或者客户端的 IP 地址)。</li><li>灵活性:<a href=https://github.com/appcypher/awesome-wasm-langs>可以将超过 30 种编程语言编译为 WebAssembly</a>,可以让各种技术背景的开发人员都可以用他们选择的语言来编写 Envoy 扩展比如C++GoRustJavaTypeScript 等。</li></ul><p>“看到 Envoy 上支持了 WASM我感到非常兴奋这是 Envoy 可扩展的未来。Envoy 的 WASM 支持与社区驱动的 hub 相结合,将在服务网格和 API 网关用例中开启出令人难以置信的网络创新。我迫不及待地想看到社区构建是如何向前发展的。” Envoy 创造者 Matt Klein。</p><p>有关实现的技术细节,请关注即将在 <a href=https://blog.envoyproxy.io/>Envoy 博客</a>上发的文章。</p><p>主机环境和扩展之间的 <a href=https://github.com/proxy-wasm>Proxy-Wasm</a> 接口有意设计为代理无感知的。我们已将其内置到了 Envoy 中,但它是为其它代理供应商设计的。我们希望看为 Istio 和 Envoy 编写的扩展也可以在其它基础设施中运行。很快就会有更多相关的设计和实现了。</p><h2 id=building-on-WebAssembly-in-Istio>Istio 中的 WebAssembly 构建</h2><p>为了显著提高性能Istio 在 1.5 的发布中,把它的几个扩展内置到了 Envoy 中。在执行此工作时,我们把这些同样的扩展可以作为 Proxy-Wasm 模块进行编译和运行,测试确保其行为没有异常。考虑到我们认为 Wasm 支持还是 Alpha 版本,我们还没有完全准备好将这个设置设为默认设置;然而,在我们的通用实现和主机环境还是给了我们不少信心,至少 ABI 和 SDK 已经开发完成了。</p><p>我们还是要小心地确保 Istio 控制平面及其 <a href=/v1.12/zh/docs/reference/config/networking/envoy-filter/>Envoy 配置 API</a> 已经可以支持 Wasm。我们有一些示例来展示几种常见的定制例如定制头解码或程序中路由这是用户的常见要求。当将这个支持发展到 Beta 版本时,将会看到 Istio 中使用 Wasm 最佳实践的文档。</p><p>最后,我们正在与许多编写了 <a href=/v1.12/zh/docs/reference/config/policy-and-telemetry/adapters/>Mixer 适配器</a>的供应商合作,帮助他们迁移到 Wasm — 如果这是前行的最佳方式。Mixer 将在未来的版本中转为社区项目,它将仍可用于老系统。</p><h2 id=developer-experience>开发者体验</h2><p>没有出色的开发者体验再强大的工具也毫无用处。Solo.io <a href=https://www.solo.io/blog/an-extended-and-improved-webassembly-hub-to-helps-bring-the-power-of-webassembly-to-envoy-and-istio/>最近宣布</a>发布 <a href=https://webassemblyhub.io/>WebAssembly Hub</a>,这是一套为 Envoy 和 Istio 做的,用于构建,部署,共享和发现 Envoy Proxy Wasm 扩展的工具和仓库。</p><p>WebAssembly Hub 把为开发和部署 Wasm 扩展所需的许多步骤都完全自动化了。使用 WebAssembly Hub 工具,用户可以轻松地把任何受支持语言开发的代码编译为 Wasm 扩展。可以将这些扩展上传到 Hub 仓库,并且用单个命令就将其在 Istio 中部署和删除。</p><p>在后台Hub 处理了很多细节问题例如引入正确的工具链、ABI 版本验证、权限控制等等。该工作流程还通过自动化扩展部署,消除了跨 Istio 服务代理的配置更改带来的麻烦。此工具帮助用户和操作员避免由于配置错误或版本不匹配而导致的意外行为。</p><p>WebAssembly Hub 工具提供了功能强大的 CLI 和优雅且易于使用的图形用户界面。WebAssembly Hub 的一个重要目标是简化围绕构建 Wasm 模块的体验,并为开发者提供共享和发现有用扩展的协作场所。</p><p>请查看<a href=https://docs.solo.io/web-assembly-hub/latest/tutorial_code/>入门指南</a>,以创建您的第一个 Proxy-Wasm 扩展。</p><h2 id=next-steps>下一步</h2><p>除了努力发布 Beta 版,我们还致力于确保围绕 Proxy-Wasm 有一个持久的社区。ABI 需要最终确定,而将其转变为标准的工作将会在适当的标准机构内获得更广泛的反馈后完成。完成向 Envoy 主干提供上游支持的工作仍在进行中。我们还在为工具和 WebAssembly Hub 寻找合适的社区。</p><h2 id=learn-more>了解更多</h2><ul><li>WebAssembly SF talk (视频) : <a href="https://www.youtube.com/watch?v=OIUPf8m7CGA">网络代理扩展</a>, by John Plevyak</li><li><a href=https://www.solo.io/blog/an-extended-and-improved-webassembly-hub-to-helps-bring-the-power-of-webassembly-to-envoy-and-istio/>Solo 博客</a></li><li><a href=https://github.com/proxy-wasm/spec>Proxy-Wasm ABI 说明</a></li><li><a href=https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/blob/master/docs/wasm_filter.md>Proxy-Wasm C++ SDK</a> 和其<a href=https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/blob/master/docs/wasm_filter.md>开发者文档</a></li><li><a href=https://github.com/proxy-wasm/proxy-wasm-rust-sdk>Proxy-Wasm Rust SDK</a></li><li><a href=https://github.com/solo-io/proxy-runtime>Proxy-Wasm AssemblyScript SDK</a></li><li><a href=https://docs.solo.io/web-assembly-hub/latest/tutorial_code/>指南</a></li><li><a href=https://www.youtube.com/channel/UCuketWAG3WqYjjxtQ9Q8ApQ>Solo.io Youtube 频道</a>上的视频</li></ul></div><nav class=pagenav><div class=left><a title="以声明方式为 Envoy 和 Istio 配置 Wasm 扩展。" href=/v1.12/zh/blog/2020/deploy-wasm-declarative/ class=next-link><svg class="icon left-arrow"><use xlink:href="/v1.12/img/icons.svg#left-arrow"/></svg>在 Istio 中进行 WebAssembly 声明式部署</a></div><div class=right><a title="Istio 在 2020 年的愿景声明及路线图。" href=/v1.12/zh/blog/2020/tradewinds-2020/ class=next-link>Istio 2020——为了商用<svg class="icon right-arrow"><use xlink:href="/v1.12/img/icons.svg#right-arrow"/></svg></a></div></nav></article><footer class=footer><div class="footer-wrapper container-l"><div class="user-links footer-links"><a class=channel title="Istio 的代码在 GitHub 上开发" href=https://github.com/istio/community aria-label=GitHub><svg class="icon github"><use xlink:href="/v1.12/img/icons.svg#github"/></svg></a><a class=channel title="如果您想深入了解 Istio 的技术细节,请查看我们日益完善的设计文档" href=https://groups.google.com/forum/#!forum/istio-team-drive-access aria-label="team drive"><svg class="icon drive"><use xlink:href="/v1.12/img/icons.svg#drive"/></svg></a><a class=channel title="在 Slack 上与 Istio 社区交互讨论开发问题(仅限邀请)" href=https://slack.istio.io aria-label=slack><svg class="icon slack"><use xlink:href="/v1.12/img/icons.svg#slack"/></svg></a><a class=channel title="Stack Overflow 中列举了针对实际问题以及部署、配置和使用 Istio 的各项回答" href=https://stackoverflow.com/questions/tagged/istio aria-label="Stack Overflow"><svg class="icon stackoverflow"><use xlink:href="/v1.12/img/icons.svg#stackoverflow"/></svg></a><a class=channel title="关注我们的 Twitter 来获取最新信息" href=https://twitter.com/IstioMesh aria-label=Twitter><svg class="icon twitter"><use xlink:href="/v1.12/img/icons.svg#twitter"/></svg></a></div><hr class=footer-separator role=separator><div class="info footer-info"><a class=logo href=/v1.12/zh/><svg xmlns="http://www.w3.org/2000/svg" width="128" height="60" viewBox="0 0 128 60"><path d="M58.434 48.823A.441.441.0 0158.3 48.497V22.583a.444.444.0 01.134-.326.446.446.0 01.327-.134h3.527a.447.447.0 01.325.134.447.447.0 01.134.326v25.914a.443.443.0 01-.134.326.444.444.0 01-.325.134h-3.527a.444.444.0 01-.327-.134z"/><path d="m70.969 48.477a6.556 6.556.0 01-2.818-1.955 4.338 4.338.0 01-1-2.78v-.345a.443.443.0 01.134-.326.444.444.0 01.326-.135h3.374a.444.444.0 01.326.135.445.445.0 01.134.326v.077a2.014 2.014.0 001.054 1.667 4.672 4.672.0 002.664.709 4.446 4.446.0 002.492-.633 1.862 1.862.0 00.958-1.591 1.426 1.426.0 00-.786-1.322 12.7 12.7.0 00-2.549-.939l-1.457-.46a21.526 21.526.0 01-3.3-1.227 6.57 6.57.0 01-2.262-1.783 4.435 4.435.0 01-.92-2.894 5.081 5.081.0 012.109-4.275 8.993 8.993.0 015.558-1.591 10.445 10.445.0 014.1.748 6.3 6.3.0 012.722 2.07 5 5 0 01.958 3.009.441.441.0 01-.134.326.441.441.0 01-.325.134h-3.258a.441.441.0 01-.326-.134.443.443.0 01-.134-.326 1.974 1.974.0 00-.978-1.667 4.647 4.647.0 00-2.665-.671 4.741 4.741.0 00-2.435.556 1.724 1.724.0 00-.938 1.553 1.512 1.512.0 00.9 1.4 15.875 15.875.0 003.01 1.055l.843.229a27.368 27.368.0 013.412 1.246 6.67 6.67.0 012.338 1.763 4.387 4.387.0 01.958 2.933 4.988 4.988.0 01-2.146 4.275 9.543 9.543.0 01-5.712 1.552 11.626 11.626.0 01-4.227-.709z"/><path d="m97.039 32.837a.443.443.0 01-.326.135h-3.911a.169.169.0 00-.191.192v9.239a2.951 2.951.0 00.632 2.108 2.7 2.7.0 002.013.652h1.15a.444.444.0 01.325.134.441.441.0 01.134.326v2.875a.471.471.0 01-.459.5l-1.994.039a8 8 0 01-4.524-1.035q-1.495-1.035-1.533-3.91V33.166A.17.17.0 0088.164 32.974H85.978A.441.441.0 0185.652 32.839.441.441.0 0185.518 32.513V29.83a.441.441.0 01.134-.326.444.444.0 01.326-.135h2.186a.169.169.0 00.191-.192v-4.485a.438.438.0 01.134-.326.44.44.0 01.325-.134h3.336a.443.443.0 01.325.134.442.442.0 01.135.326v4.485a.169.169.0 00.191.192h3.911a.446.446.0 01.326.135.446.446.0 01.134.326v2.683a.446.446.0 01-.133.324z"/><path d="m101.694 25.917a2.645 2.645.0 01-.767-1.955 2.65 2.65.0 01.767-1.955 2.65 2.65.0 011.955-.767 2.65 2.65.0 011.955.767 2.652 2.652.0 01.767 1.955 2.647 2.647.0 01-.767 1.955 2.646 2.646.0 01-1.955.767 2.645 2.645.0 01-1.955-.767zm-.211 22.906a.441.441.0 01-.134-.326V29.79a.444.444.0 01.134-.326.446.446.0 01.326-.134h3.527a.446.446.0 01.326.134.445.445.0 01.134.326v18.707a.443.443.0 01-.134.326.443.443.0 01-.326.134h-3.527a.443.443.0 01-.326-.134z"/><path d="m114.019 47.734a8.1 8.1.0 01-3.047-4.255 14.439 14.439.0 01-.652-4.37 14.3 14.3.0 01.614-4.371 7.869 7.869.0 013.066-4.178 9.072 9.072.0 015.252-1.5 8.543 8.543.0 015.041 1.5 7.985 7.985.0 013.009 4.14 12.439 12.439.0 01.69 4.37 13.793 13.793.0 01-.651 4.37 8.255 8.255.0 01-3.028 4.275 8.475 8.475.0 01-5.1 1.553 8.754 8.754.0 01-5.194-1.534zm7.629-3.1a4.536 4.536.0 001.476-2.262 11.335 11.335.0 00.383-3.221 10.618 10.618.0 00-.383-3.22 4.169 4.169.0 00-1.457-2.243 4.066 4.066.0 00-2.531-.785 3.942 3.942.0 00-2.453.785 4.376 4.376.0 00-1.5 2.243 11.839 11.839.0 00-.383 3.22 11.84 11.84.0 00.383 3.221 4.222 4.222.0 001.476 2.262 4.075 4.075.0 002.549.8 3.8 3.8.0 002.44-.809z"/><path d="m15.105 32.057v15.565a.059.059.0 01-.049.059L.069 50.25A.06.06.0 01.005 50.167l14.987-33.47a.06.06.0 01.114.025z"/><path d="m17.631 23.087v24.6a.06.06.0 00.053.059l22.449 2.507a.06.06.0 00.061-.084L17.745.032a.06.06.0 00-.114.024z"/><path d="m39.961 52.548-24.833 7.45a.062.062.0 01-.043.0L.079 52.548a.059.059.0 01.026-.113h39.839a.06.06.0 01.017.113z"/></svg></a><div class=footer-languages><a tabindex=-1 role=menuitem lang=en id=switch-lang-en class=footer-languages-item>English</a>
<a tabindex=-1 role=menuitem lang=zh id=switch-lang-zh class="footer-languages-item active"><svg class="icon tick"><use xlink:href="/v1.12/img/icons.svg#tick"/></svg>中文</a></div></div><ul class=footer-policies><li class=footer-policies-item><a class=footer-policies-link href=https://policies.google.com/privacy>隐私政策</a> |
<a class=footer-policies-link href=https://github.com/istio/istio.io/edit/release-1.12/content/zh/blog/2020/wasm-announce/index.md>在 GitHub 上编辑此页</a></li></ul><div class=footer-base><span class=footer-base-copyright>&copy; 2021 Istio Authors.</span>
<span class=footer-base-version>部分内容可能滞后于英文版本,同步工作正在进行中<br>Version
Istio 归档
1.12.3</span><ul class=footer-base-releases><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link role=menuitem onclick="navigateToUrlOrRoot('https://istio.io/blog\/2020\/wasm-announce\/');return false;">当前版本</a></li><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link role=menuitem onclick="navigateToUrlOrRoot('https://preliminary.istio.io/blog\/2020\/wasm-announce\/');return false;">下个版本</a></li><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link role=menuitem href=https://istio.io/archive>旧版本</a></li></ul></div></div></footer><div id=scroll-to-top-container aria-hidden=true><button id=scroll-to-top title=回到顶部><svg class="icon top"><use xlink:href="/v1.12/img/icons.svg#top"/></svg></button></div></body></html>