mirror of https://github.com/istio/istio.io.git
122 lines
32 KiB
HTML
122 lines
32 KiB
HTML
<!doctype html><html lang=en 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="Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio"><meta name=description content="The future of Istio extensibility using 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="Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio"><meta property="og:type" content="website"><meta property="og:description" content="The future of Istio extensibility using WASM."><meta property="og:url" content="/v1.13/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.13 / Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio</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.13/blog/feed.xml><link rel=alternate type=application/rss+xml title="Istio News" href=/v1.13/news/feed.xml><link rel=alternate type=application/rss+xml title="Istio Blog and News" href=/v1.13/feed.xml><link rel="shortcut icon" href=/v1.13/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.13/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.13/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.13/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.13/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.13/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.13/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.13/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.13/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.13/favicons/android-192x192.png sizes=192x192><link rel=mask-icon href=/v1.13/favicons/safari-pinned-tab.svg color=#466bb0><link rel=manifest href=/v1.13/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.13/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.13/js/themes_init.min.js></script></head><body class="language-unknown archive-site"><script>const branchName="release-1.13",docTitle="Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio",iconFile="/v1.13/img/icons.svg",buttonCopy="Copy to clipboard",buttonPrint="Print",buttonDownload="Download"</script><script src="https://www.google.com/cse/brand?form=search-form" defer></script>
|
|
<script src=/v1.13/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.13/ aria-label=logotype><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.371A7.869 7.869.0 01114 30.56a9.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.13/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.13/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>About</span><svg class="icon dropdown-arrow"><use xlink:href="/v1.13/img/icons.svg#dropdown-arrow"/></svg></a><ul class=main-navigation-links-dropdown><li class=main-navigation-links-dropdown-item><a href=/v1.13/about/service-mesh class=main-navigation-links-link>Service mesh</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.13/about/solutions class=main-navigation-links-link>Solutions</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.13/about/case-studies class=main-navigation-links-link>Case studies</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.13/about/ecosystem class=main-navigation-links-link>Ecosystem</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.13/about/deployment class=main-navigation-links-link>Deployment</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.13/about/faq class=main-navigation-links-link>FAQ</a></li></ul></li><li class=main-navigation-links-item><a href=/v1.13/blog/ class=main-navigation-links-link><span>Blog</span></a></li><li class=main-navigation-links-item><a href=/v1.13/news/ class=main-navigation-links-link><span>News</span></a></li><li class=main-navigation-links-item><a href=/v1.13/get-involved/ class=main-navigation-links-link><span>Get involved</span></a></li><li class=main-navigation-links-item><a href=/v1.13/docs/ class=main-navigation-links-link><span>Documentation</span></a></li></ul><div class=main-navigation-footer><button id=search-show class=search-show title="Search this site" aria-label=Search><svg class="icon magnifier"><use xlink:href="/v1.13/img/icons.svg#magnifier"/></svg></button>
|
|
<a href=/v1.13/docs/setup/getting-started class="btn btn--primary" id=try-istio>Try 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=en>
|
|
<input type=hidden id=search-page-url value=/search>
|
|
<input id=search-textbox class="search-textbox form-control" name=q type=search aria-label="Search this site" placeholder=Search>
|
|
<button id=search-close title="Cancel search" type=reset aria-label="Cancel search"><svg class="icon menu-close"><use xlink:href="/v1.13/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>Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio</h1><p>The future of Istio extensibility using 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>Since adopting <a href=https://www.envoyproxy.io/>Envoy</a> in 2016, the Istio project has always wanted to
|
|
provide a platform on top of which a rich set of extensions could be built, to meet the diverse
|
|
needs of our users. There are many reasons to add capability to the data plane of a service
|
|
mesh — to support newer protocols, integrate with proprietary security controls, or enhance
|
|
observability with custom metrics, to name a few.</p><p>Over the last year and a half our team here at Google has been working on adding dynamic
|
|
extensibility to the Envoy proxy using <a href=https://webassembly.org/>WebAssembly</a>. We are delighted to
|
|
share that work with the world today, as well as
|
|
unveiling <a href=https://github.com/proxy-wasm/spec>WebAssembly (Wasm) for Proxies</a> (Proxy-Wasm): an ABI,
|
|
which we intend to standardize; SDKs; and its first major implementation, the new,
|
|
lower-latency <a href=/v1.13/docs/reference/config/proxy_extensions/wasm_telemetry/>Istio telemetry system</a>.</p><p>We have also worked closely with the community to ensure that there is a great developer experience
|
|
for users to get started quickly. The Google team has been working closely with the team
|
|
at <a href=https://solo.io>Solo.io</a> who have built the <a href=https://webassemblyhub.io/>WebAssembly Hub,</a>
|
|
a service for building, sharing, discovering and deploying Wasm extensions.
|
|
With the WebAssembly Hub, Wasm extensions are as easy to manage, install and and run as containers.</p><p>This work is being released today in Alpha and there is still lots
|
|
of <a href=#next-steps>work to be done</a>, but we are excited to get this into the hands of developers
|
|
so they can start experimenting with the tremendous possibilities this opens up.</p><h2 id=background>Background</h2><p>The need for extensibility has been a founding tenet of both the Istio and Envoy projects,
|
|
but the two projects took different approaches. Istio project focused on enabling a generic
|
|
out-of-process extension model called <a href=https://istio.io/v1.6/docs/reference/config/policy-and-telemetry/mixer-overview/>Mixer</a>
|
|
with a lightweight developer experience, while Envoy focused on in-proxy <a href=https://www.envoyproxy.io/docs/envoy/latest/extending/extending>extensions</a>.</p><p>Each approach has its share of pros and cons. The Istio model led to significant resource
|
|
inefficiencies that impacted tail latencies and resource utilization. This model was also
|
|
intrinsically limited - for example, it was never going to provide support for
|
|
implementing <a href=https://blog.envoyproxy.io/how-to-write-envoy-filters-like-a-ninja-part-1-d166e5abec09>custom protocol handling</a>.</p><p>The Envoy model imposed a monolithic build process, and required extensions to be written in C++,
|
|
limiting the developer ecosystem. Rolling out a new extension to the fleet required pushing new
|
|
binaries and rolling restarts, which can be difficult to coordinate, and risk downtime. This also
|
|
incentivized developers to upstream extensions into Envoy that were used by only a small
|
|
percentage of deployments, just to piggyback on its release mechanisms.</p><p>Over time some of the most performance-sensitive features of Istio have been upstreamed
|
|
into Envoy - <a href=https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/security/rbac_filter>policy checks on traffic</a>, and
|
|
<a href=https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/security/jwt_authn_filter>JWT authentication</a>, for example.
|
|
Still, we have always wanted to converge on a single stack for extensibility that imposes fewer
|
|
tradeoffs: something that decouples Envoy releases from its extension ecosystem, enables
|
|
developers to work in their languages of choice, and enables Istio to reliably roll out new
|
|
capability without downtime risk. Enter WebAssembly.</p><h2 id=what-is-webassembly>What is WebAssembly?</h2><p><a href=https://webassembly.org/>WebAssembly</a> (Wasm) is a portable bytecode format for executing code
|
|
written in <a href=https://github.com/appcypher/awesome-wasm-langs>multiple languages</a> at
|
|
near-native speed. Its initial <a href=https://webassembly.org/docs/high-level-goals/>design goals</a> align
|
|
well with the challenges outlined above, and it has sizable industry support behind it. Wasm
|
|
is the fourth standard language (following HTML, CSS and JavaScript) to run natively in all
|
|
the major browsers, having become a <a href=https://www.w3.org/TR/wasm-core-1/>W3C Recommendation</a> in
|
|
December 2019. That gives us confidence in making a strategic bet on it.</p><p>While WebAssembly started life as a client-side technology, there are a number of advantages
|
|
to using it on the server. The runtime is memory-safe and sandboxed for security. There is a
|
|
large tooling ecosystem for compiling and debugging Wasm in its textual or binary format.
|
|
The <a href=https://www.w3.org/>W3C</a> and <a href=https://bytecodealliance.org/>BytecodeAlliance</a> have become
|
|
active hubs for other server-side efforts. For example, the Wasm community is standardizing
|
|
a <a href=https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/>“WebAssembly System Interface” (WASI)</a>
|
|
at the W3C, with a sample implementation, which provides an OS-like abstraction to Wasm ‘programs’.</p><h2 id=bringing-webassembly-to-envoy>Bringing WebAssembly to Envoy</h2><p><a href=https://github.com/envoyproxy/envoy/issues/4272>Over the past 18 months</a>, we have been working
|
|
with the Envoy community to build Wasm extensibility into Envoy and contribute it upstream.
|
|
We’re pleased to announce it is available as Alpha in the Envoy build shipped
|
|
with <a href=/v1.13/news/releases/1.5.x/announcing-1.5/>Istio 1.5</a>, with source in
|
|
the <a href=https://github.com/envoyproxy/envoy-wasm/><code>envoy-wasm</code></a> development fork and work ongoing to
|
|
merge it into the main Envoy tree. The implementation uses the WebAssembly runtime built into
|
|
Google’s high performance <a href=https://v8.dev/>V8 engine</a>.</p><p>In addition to the underlying runtime, we have also built:</p><ul><li><p>A generic Application Binary Interface (ABI) for embedding Wasm in proxies, which means compiled
|
|
extensions will work across different versions of Envoy - or even other proxies, should they choose
|
|
to implement the ABI</p></li><li><p>SDKs for easy extension development in <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>
|
|
and <a href=https://github.com/solo-io/proxy-runtime>AssemblyScript</a>, with more to follow</p></li><li><p>Comprehensive <a href=https://docs.solo.io/web-assembly-hub/latest/tutorial_code/>samples and instructions</a>
|
|
on how to deploy in Istio and standalone Envoy</p></li><li><p>Abstractions to allow for other Wasm runtimes to be used, including a ‘null’ runtime which
|
|
simply compiles the extension natively into Envoy — very useful for testing and debugging</p></li></ul><p>Using Wasm for extending Envoy brings us several key benefits:</p><ul><li><p>Agility: Extensions can be delivered and reloaded at runtime using the Istio control plane.
|
|
This enables a fast develop → test → release cycle for extensions without
|
|
requiring Envoy rollouts.</p></li><li><p>Stock releases: Once merging into the main tree is complete, Istio and others will be able to
|
|
use stock releases of Envoy, instead of custom builds. This will also free the Envoy community
|
|
to move some of the built-in extensions to this model, thereby reducing their
|
|
supported footprint.</p></li><li><p>Reliability and isolation: Extensions are deployed inside a sandbox with resource constraints,
|
|
which means they can now crash, or leak memory, without bringing the whole Envoy process down.
|
|
CPU and memory usage can also be constrained.</p></li><li><p>Security: The sandbox has a clearly defined API for communicating with Envoy, so extensions
|
|
only have access to, and can modify, a limited number of properties of a connection or request.
|
|
Furthermore, because Envoy mediates this interaction, it can hide or sanitize sensitive
|
|
information from the extension (e.g. “Authorization” and “Cookie” HTTP headers, or
|
|
the client’s IP address).</p></li><li><p>Flexibility: <a href=https://github.com/appcypher/awesome-wasm-langs>over 30 programming languages can be compiled to WebAssembly</a>,
|
|
allowing developers from all backgrounds - C++, Go, Rust, Java, TypeScript, etc. - to write
|
|
Envoy extensions in their language of choice.</p></li></ul><p>“I am extremely excited to see WASM support land in Envoy; this is the future of Envoy
|
|
extensibility, full stop. Envoy’s WASM support coupled with a community driven hub will unlock an
|
|
incredible amount of innovation in the networking space across both service mesh and API gateway
|
|
use cases. I can’t wait to see what the community builds moving forward.”
|
|
– Matt Klein, Envoy creator.</p><p>For technical details of the implementation, look out for an upcoming post
|
|
to <a href=https://blog.envoyproxy.io/>the Envoy blog</a>.</p><p>The <a href=https://github.com/proxy-wasm>Proxy-Wasm</a> interface between host environment and extensions
|
|
is deliberately proxy agnostic. We’ve built it into Envoy, but it was designed to be adopted by
|
|
other proxy vendors. We want to see a world where you can take an extension written for Istio and
|
|
Envoy and run it in other infrastructure; you’ll hear more about that soon.</p><h2 id=building-on-webassembly-in-istio>Building on WebAssembly in Istio</h2><p>Istio moved several of its extensions into its build of Envoy as part of the 1.5 release, in order
|
|
to significantly improve performance. While doing that work we have been testing to ensure those
|
|
same extensions can compile and run as Proxy-Wasm modules with no variation in behavior. We’re not
|
|
quite ready to make this setup the default, given that we consider Wasm support to be Alpha;
|
|
however, this has given us a lot of confidence in our general approach and in the host
|
|
environment, ABI and SDKs that have been developed.</p><p>We have also been careful to ensure that the Istio control plane and
|
|
its <a href=/v1.13/docs/reference/config/networking/envoy-filter/>Envoy configuration APIs</a> are Wasm-ready.
|
|
We have samples to show how several common customizations such as custom header decoding or
|
|
programmatic routing can be performed which are common asks from users. As we move this support to
|
|
Beta, you will see documentation showing best practices for using Wasm with Istio.</p><p>Finally, we are working with the many vendors who have
|
|
written <a href=https://istio.io/v1.6/docs/reference/config/policy-and-telemetry/adapters/>Mixer adapters</a>,
|
|
to help them with a migration to Wasm — if that is the best path forward. Mixer will move to a
|
|
community project in a future release, where it will remain available for legacy use cases.</p><h2 id=developer-experience>Developer Experience</h2><p>Powerful tooling is nothing without a great developer experience. 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/>recently announced</a>
|
|
the release of <a href=https://webassemblyhub.io/>WebAssembly Hub</a>, a set of tools and repository for
|
|
building, deploying, sharing and discovering Envoy Proxy Wasm extensions for Envoy and Istio.</p><p>The WebAssembly Hub fully automates many of the steps required for developing and deploying Wasm
|
|
extensions. Using WebAssembly Hub tooling, users can easily compile their code - in any supported
|
|
language - into Wasm extensions. The extensions can then be uploaded to the Hub registry, and be
|
|
deployed and undeployed to Istio with a single command.</p><p>Behind the scenes the Hub takes care of much of the nitty-gritty, such as pulling in the correct
|
|
toolchain, ABI version verification, permission control, and more. The workflow also eliminates
|
|
toil with configuration changes across Istio service proxies by automating the deployment of your
|
|
extensions. This tooling helps users and operators avoid unexpected behaviors due to
|
|
misconfiguration or version mismatches.</p><p>The WebAssembly Hub tools provide a powerful CLI as well as an elegant and easy-to-use graphical
|
|
user interface. An important goal of the WebAssembly Hub is to simplify the experience around
|
|
building Wasm modules and provide a place of collaboration for developers to share and discover
|
|
useful extensions.</p><p>Check out the <a href=https://docs.solo.io/web-assembly-hub/latest/tutorial_code/>getting started guide</a>
|
|
to create your first Proxy-Wasm extension.</p><h2 id=next-steps>Next Steps</h2><p>In addition to working towards a beta release, we are committed to making sure that there is a
|
|
durable community around Proxy-Wasm. The ABI needs to be finalized, and turning it into a standard
|
|
will be done with broader feedback within the appropriate standards body. Completing upstreaming
|
|
support into the Envoy mainline is still in progress. We are also seeking an appropriate
|
|
community home for the tooling and the WebAssembly Hub</p><h2 id=learn-more>Learn more</h2><ul><li><p>WebAssembly SF talk (video): <a href="https://www.youtube.com/watch?v=OIUPf8m7CGA">Extensions for network proxies</a>, by John Plevyak</p></li><li><p><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 blog</a></p></li><li><p><a href=https://github.com/proxy-wasm/spec>Proxy-Wasm ABI specification</a></p></li><li><p><a href=https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/blob/master/docs/wasm_filter.md>Proxy-Wasm C++ SDK</a> and
|
|
its <a href=https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/blob/master/docs/wasm_filter.md>developer documentation</a></p></li><li><p><a href=https://github.com/proxy-wasm/proxy-wasm-rust-sdk>Proxy-Wasm Rust SDK</a></p></li><li><p><a href=https://github.com/solo-io/proxy-runtime>Proxy-Wasm AssemblyScript SDK</a></p></li><li><p><a href=https://docs.solo.io/web-assembly-hub/latest/tutorial_code/>Tutorials</a></p></li><li><p>Videos on the <a href=https://www.youtube.com/channel/UCuketWAG3WqYjjxtQ9Q8ApQ>Solo.io Youtube Channel</a></p></li></ul></div><nav class=pagenav><div class=left><a title="Configuring Wasm extensions for Envoy and Istio declaratively." href=/v1.13/blog/2020/deploy-wasm-declarative/ class=next-link><svg class="icon left-arrow"><use xlink:href="/v1.13/img/icons.svg#left-arrow"/></svg>Declarative WebAssembly deployment for Istio</a></div><div class=right><a title="A vision statement and roadmap for Istio in 2020." href=/v1.13/blog/2020/tradewinds-2020/ class=next-link>Istio in 2020 - Following the Trade Winds<svg class="icon right-arrow"><use xlink:href="/v1.13/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="GitHub is where development takes place on Istio code" href=https://github.com/istio/community aria-label=GitHub><svg class="icon github"><use xlink:href="/v1.13/img/icons.svg#github"/></svg></a><a class=channel title="Access our team drive if you'd like to take a look at the Istio technical design documents" href=https://groups.google.com/forum/#!forum/istio-team-drive-access aria-label="team drive"><svg class="icon drive"><use xlink:href="/v1.13/img/icons.svg#drive"/></svg></a><a class=channel title="Interactively discuss issues with the Istio community on Slack" href=https://slack.istio.io aria-label=slack><svg class="icon slack"><use xlink:href="/v1.13/img/icons.svg#slack"/></svg></a><a class=channel title="Stack Overflow is where you can ask questions and find curated answers on deploying, configuring, and using Istio" href=https://stackoverflow.com/questions/tagged/istio aria-label="Stack Overflow"><svg class="icon stackoverflow"><use xlink:href="/v1.13/img/icons.svg#stackoverflow"/></svg></a><a class=channel title="Follow us on Twitter to get the latest news" href=https://twitter.com/IstioMesh aria-label=Twitter><svg class="icon twitter"><use xlink:href="/v1.13/img/icons.svg#twitter"/></svg></a></div><hr class=footer-separator role=separator><div class="info footer-info"><a class=logo href=/v1.13/ aria-label=logotype><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.371A7.869 7.869.0 01114 30.56a9.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 lang=en id=switch-lang-en class="footer-languages-item active"><svg class="icon tick"><use xlink:href="/v1.13/img/icons.svg#tick"/></svg>English</a>
|
|
<a tabindex=-1 lang=zh id=switch-lang-zh class=footer-languages-item>中文</a></div></div><ul class=footer-policies><li class=footer-policies-item><a class=footer-policies-link href=https://policies.google.com/privacy>Privacy policy</a> |
|
|
<a class=footer-policies-link href=https://github.com/istio/istio.io/edit/release-1.13/content/en/blog/2020/wasm-announce/index.md>Edit this Page on GitHub</a></li></ul><div class=footer-base><span class=footer-base-copyright>© 2022 Istio Authors.</span>
|
|
<span class=footer-base-version>Version
|
|
Archive
|
|
1.13.4</span><ul class=footer-base-releases><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link onclick='return navigateToUrlOrRoot("https://istio.io/blog/2020/wasm-announce/"),!1'>current release</a></li><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link onclick='return navigateToUrlOrRoot("https://preliminary.istio.io/blog/2020/wasm-announce/"),!1'>next release</a></li><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link href=https://istio.io/archive>older releases</a></li></ul></div></div></footer><div id=scroll-to-top-container aria-hidden=true><button id=scroll-to-top title="Back to top" tabindex=-1><svg class="icon top"><use xlink:href="/v1.13/img/icons.svg#top"/></svg></button></div></body></html> |