{"id":317361,"date":"2021-02-02T15:02:15","date_gmt":"2021-02-02T15:02:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=317361"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=317361","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM \u0434\u043b\u044f Envoy \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u0438\u0445 \u0441 Istio"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ap\/yl\/uc\/apyluccrwvfa9uxhmu3btdetos4.jpeg\"><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/www.envoyproxy.io\/\">Envoy<\/a> \u2014 \u044d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 L3\/L4 \u0438 L7, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 service mesh, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/istio.io\/\">Istio<\/a>. Envoy \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0443\u0434\u0438\u0442\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Envoy, \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Envoy \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Envoy. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u044e Envoy \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u043c. \u0424\u0438\u043b\u044c\u0442\u0440, \u043a\u0441\u0442\u0430\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 C++, \u043a\u0430\u043a \u0438 \u0441\u0430\u043c Envoy.<\/li>\n<li>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432 Envoy Proxy \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435.<a name=\"habracut\"><\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0438 \u043f\u0440\u043e\u0449\u0435 \u2014 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c WebAssembly (WASM), \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0438 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0438 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0445 WASM.<\/p>\n<p>  <\/p>\n<h2 id=\"pochemu-filtry-wasm-\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM? \ufe0e<\/h2>\n<p>  <\/p>\n<p>\u041f\u043b\u044e\u0441\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u2014 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Envoy \u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043c\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Envoy, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443.<\/li>\n<li>\u0420\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u2014 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 C\/C++, Rust \u0438\u043b\u0438 golang, \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 WASM.<\/li>\n<li>\u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u2014 \u043c\u044b \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (\u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435) \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 Envoy (\u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442).<\/li>\n<li>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u2014 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0441 \u0445\u043e\u0441\u0442\u043e\u043c (Envoy Proxy) \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 API, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 70% \u043e\u0442 C++.<\/li>\n<li>\u041d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0434\u043b\u044f WASM.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"envoy-proxy-wasm-sdk-\">Envoy Proxy WASM SDK \ufe0e<\/h2>\n<p>  <\/p>\n<p>Envoy Proxy \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0442\u0435\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043e\u0442 \u0445\u043e\u0441\u0442-\u0441\u0440\u0435\u0434\u044b. \u0412\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0445\u043e\u0441\u0442\u043e\u043c (Envoy Proxy) \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c WASM \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 Envoy Proxy WASM SDK. \u0421 Envoy Proxy WASM SDK \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/proxy-wasm\/proxy-wasm-cpp-sdk\">C++<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/proxy-wasm\/proxy-wasm-rust-sdk\">Rust<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/solo-io\/proxy-runtime\">AssemblyScript<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mathetake\/proxy-wasm-go\">Go <\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM \u0434\u043b\u044f Envoy \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e C++ Envoy Proxy WASM SDK. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 API \u0434\u043b\u044f Envoy Proxy WASM SDK, \u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u0430\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM \u0434\u043b\u044f Envoy.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">class RootContext; class Context;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d WASM (\u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 WASM \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c), \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f <strong>root context<\/strong>. Root context \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440. \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0434\u043e\u043c \u0438 Envoy Proxy \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435;<\/li>\n<li>\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><code>onConfigure(size_t)<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Envoy Proxy \u0432 <code>RootContext<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0438 \u043f\u043b\u0430\u0433\u0438\u043d. \u0415\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043e\u0442 Envoy Proxy \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>getBufferBytes<\/code> \u0447\u0435\u0440\u0435\u0437 <code>WasmBufferType::VmConfiguration<\/code> \u0438 <code>WasmBufferType::PluginConfiguration<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Envoy Proxy, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 <a href=\"https:\/\/www.envoyproxy.io\/docs\/envoy\/latest\/intro\/arch_overview\/listeners\/listeners#arch-overview-listeners\">listener<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0442\u0440\u0430\u0444\u0438\u043a. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 Envoy Proxy \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 <strong>\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>Context<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0445\u0443\u043a\u0438 (\u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b) \u0432 \u0432\u0438\u0434\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>onXXXX(...)<\/code> \u0434\u043b\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 HTTP \u0438 TCP, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 Envoy Proxy \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0432 <code>Context<\/code> \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0445\u043e\u0434\u0438\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 (HTTP \u0438\u043b\u0438 TCP). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>FilterHeadersStatus onRequestHeaders(uint32_t)<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 HTTP, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f TCP.<\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <code>Context<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Envoy Proxy \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430. \u0412 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c. SDK \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 (<code>getRequestHeader<\/code>, <code>addRequestHeader<\/code> \u0438 \u0442. \u0434.), \u0442\u0435\u043b\u043e\u043c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430, TCP-\u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>getBufferBytes<\/code>, <code>setBufferBytes<\/code>) \u0438 \u0442. \u0434. \u041a\u0430\u0436\u0434\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 Envoy Proxy \u0443\u0437\u043d\u0430\u0435\u0442, \u043d\u0430\u0434\u043e \u0438\u043b\u0438 \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435.<\/p>\n<p>  <\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u2014 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b <code>factory<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>RootContext<\/code> \u0438 <code>Context<\/code> \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043f\u0430<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">class RegisterContextFactory;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c root context factory \u0438 context factory \u0432 \u0432\u0438\u0434\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<h3 id=\"primer-filtra-\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \ufe0e<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043a\u0435\u043b\u0435\u0442\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 WASM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441 C++ Envoy Proxy WASM SDK:<strong> example-filter.cc:<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">#include &quot;proxy_wasm_intrinsics.h&quot;  class ExampleRootContext: public RootContext { public:   explicit ExampleRootContext(uint32_t id, StringView root_id): RootContext(id, root_id) {}    bool onStart(size_t) override; };  class ExampleContext: public Context { public:   explicit ExampleContext(uint32_t id, RootContext* root) : Context(id, root) {}    FilterHeadersStatus onResponseHeaders(uint32_t) override;    FilterStatus onDownstreamData(size_t, bool) override; };  \/\/ register factories for ExampleContext and ExampleRootContext static RegisterContextFactory register_FilterContext(CONTEXT_FACTORY(ExampleContext),                                                       ROOT_FACTORY(ExampleRootContext),                                                       &quot;my_root_id&quot;);  \/\/ invoked when the plugin initialised and is ready to process streams bool ExampleRootContext::onStart(size_t n) {   LOG_DEBUG(&quot;ready to process streams&quot;);    return true; }  \/\/ invoked when HTTP response header is decoded FilterHeadersStatus ExampleContext::onResponseHeaders(uint32_t) {   addResponseHeader(&quot;resp-header-demo&quot;, &quot;added by our filter&quot;);    return FilterHeadersStatus::Continue; }  \/\/ invoked when downstream TCP data chunk is received FilterStatus ExampleContext::onDownstreamData(size_t, bool) {   auto res = setBuffer(WasmBufferType::NetworkDownstreamData, 0, 0, &quot;prepend payload to downstream data&quot;);     if (res != WasmResult::Ok) {      LOG_ERROR(&quot;Modifying downstream data failed: &quot; + toString(res));       return FilterStatus::StopIteration;    }     return FilterStatus::Continue; }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"sborka-filtra\">\u0421\u0431\u043e\u0440\u043a\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/h2>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Docker, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 docker \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e C++ Envoy Proxy WASM SDK, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e <a href=\"https:\/\/github.com\/proxy-wasm\/proxy-wasm-cpp-sdk#docker\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c Makefile \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430 WASM. <strong>Makefile:<\/strong><\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">.PHONY = all clean  PROXY_WASM_CPP_SDK=\/sdk  all: example-filter.wasm  include ${PROXY_WASM_CPP_SDK}\/Makefile.base_lite<\/code><\/pre>\n<p>  <\/p>\n<ol>\n<li>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 WASM:<br \/> \n<pre><code class=\"cpp\">docker run -v $PWD:\/work -w \/work  wasmsdk:v2 \/build_wasm.sh<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>  <\/p>\n<h2 id=\"deploim-filtr-wasm-s-istio-\">\u0414\u0435\u043f\u043b\u043e\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440 WASM \u0441 Istio \ufe0e<\/h2>\n<p>  <\/p>\n<blockquote><p>\u0423\u0437\u043d\u0430\u0442\u044c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Istio \u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438 service mesh \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/slurm.io\/intensive-service-mesh?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=service-mesh-intensive&amp;utm_content=post_02-02-2021&amp;utm_term=bartov\">\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u0435 19\u201421 \u043c\u0430\u0440\u0442\u0430<\/a>.<\/p><\/blockquote>\n<p>\u0414\u0435\u043f\u043b\u043e\u0438\u043c \u043d\u0430\u0448 \u0444\u0438\u043b\u044c\u0442\u0440 Envoy WASM \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0432 Istio service mesh \u0432 Kubernetes. \u041c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Istio mesh \u0441 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432 Kubernetes \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/banzaicloud.com\/docs\/backyards\/overview\/\">Backyards<\/a>, \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Istio \u043e\u0442 Banzai Cloud. <em>(<strong>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430:<\/strong> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/istio.io\/latest\/docs\/setup\/getting-started\/\">\u044d\u0442\u043e\u0439 getting started \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 <\/a> \u0434\u043e \u0448\u0430\u0433\u0430 Deploy the sample application \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c bookinfo \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445).<br \/>  <\/em><\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">backyards install -a --run-demo<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u2014 \u0438 \u043a \u043d\u0430\u0448\u0438\u043c \u0443\u0441\u043b\u0443\u0433\u0430\u043c production-ready \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0430\u044f Istio service mesh \u0441 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q9\/a0\/hi\/q9a0hi3ydmvlhvhhc1okv9dze1o.png\"><\/p>\n<p>  <\/p>\n<h4 id=\"sozdaem-config-map-dlya-koda-wasm\">\u0421\u043e\u0437\u0434\u0430\u0435\u043c config map \u0434\u043b\u044f \u043a\u043e\u0434\u0430 wasm<\/h4>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c config map, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434 <code>WASM<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0432 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 <code>backyards-demo<\/code>, \u0433\u0434\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0434\u0435\u043c\u043e<em> (<strong>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430:<\/strong>\u043b\u0438\u0431\u043e bookinfo \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u0442\u043e\u0433\u043e Istio)<\/em>.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl create cm -n backyards-demo example-filter --from-file=example-filter.wasm<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"vnedryaem-kod-wasm-v-demo-s-pomoschyu-istio-\">\u0412\u043d\u0435\u0434\u0440\u044f\u0435\u043c \u043a\u043e\u0434 wasm \u0432 \u0434\u0435\u043c\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Istio \ufe0e<\/h4>\n<p>  <\/p>\n<ol>\n<li>\u0412\u043d\u0435\u0434\u0440\u044f\u0435\u043c \u043a\u043e\u0434 wasm \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 <code>frontpage<\/code> \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0443\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439:<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">sidecar.istio.io\/userVolume: '[{&quot;name&quot;:&quot;wasmfilters-dir&quot;,&quot;configMap&quot;: {&quot;name&quot;: &quot;example-filter&quot;}}]'  sidecar.istio.io\/userVolumeMount: '[{&quot;mountPath&quot;:&quot;\/var\/local\/lib\/wasm-filters&quot;,&quot;name&quot;:&quot;wasmfilters-dir&quot;}]'<\/code><\/pre>\n<p>  <\/p>\n<ol>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl scale deployment -n backyards-demo frontpage-v1 --replicas=1  kubectl patch deployment -n backyards-demo frontpage-v1 -p '{&quot;spec&quot;:{&quot;template&quot;:{&quot;metadata&quot;:{&quot;annotations&quot;:{&quot;sidecar.istio.io\/userVolume&quot;:&quot;[{\\&quot;name\\&quot;:\\&quot;wasmfilters-dir\\&quot;,\\&quot;configMap\\&quot;: {\\&quot;name\\&quot;: \\&quot;example-filter\\&quot;}}]&quot;,&quot;sidecar.istio.io\/userVolumeMount&quot;:&quot;[{\\&quot;mountPath\\&quot;:\\&quot;\/var\/local\/lib\/wasm-filters\\&quot;,\\&quot;name\\&quot;:\\&quot;wasmfilters-dir\\&quot;}]&quot;}}}}}'<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0434 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 WASM \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <code>\/var\/local\/lib\/wasm-filters<\/code> \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 istio-proxy:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl exec -n backyards-demo -it deployment\/frontpage-v1 -c istio-proxy -- ls \/var\/local\/lib\/wasm-filters\/  example-filter.wasm<\/code><\/pre>\n<p>  <\/p>\n<ol>\n<li>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 DEBUG \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 <code>frontpage<\/code>:<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl port-forward -n backyards-demo deployment\/frontpage-v1 15000  curl -XPOST &quot;localhost:15000\/logging?wasm=debug&quot;<\/code><\/pre>\n<p>  <\/p>\n<ol>\n<li>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 WASM \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 HTTP, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u043a \u043f\u043e\u0440\u0442\u0443 HTTP 8080:<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl apply -f-&lt;&lt;EOF apiVersion: networking.istio.io\/v1alpha3 kind: EnvoyFilter metadata:   name: frontpage-v1-examplefilter   namespace: backyards-demo spec:   configPatches:   - applyTo: HTTP_FILTER     match:       context: SIDECAR_INBOUND       proxy:         proxyVersion: '^1\\.5.*'       listener:         portNumber: 8080         filterChain:           filter:             name: envoy.http_connection_manager             subFilter:               name: envoy.router     patch:       operation: INSERT_BEFORE       value:         config:           config:             name: example-filter             rootId: my_root_id             vmConfig:               code:                 local:                   filename: \/var\/local\/lib\/wasm-filters\/example-filter.wasm               runtime: envoy.wasm.runtime.v8               vmId: example-filter               allow_precompiled: true         name: envoy.filters.http.wasm   workloadSelector:     labels:       app: frontpage       version: v1 EOF<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/strong> \u041f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 <code>portNumber<\/code>, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f listener match \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0435 <code>EnvoyFilter<\/code>, \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0432 Istio, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u0443\u043a\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c. \u041c\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 \u043d\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 Istio \u2014 <a href=\"https:\/\/banzaicloud.com\/products\/backyards\/\">Backyards<\/a>.<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442 HTTP 8080 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 <code>frontpage<\/code>:<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl run curl --image=yauritux\/busybox-curl --restart=Never -it --rm sh  \/home # curl -L -v http:\/\/frontpage.backyards-demo:8080 <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443 \u043e\u0442\u0432\u0435\u0442\u0430:<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">* About to connect() to frontpage.backyards-demo port 8080 (#0)     *   Trying 10.10.178.38...     * Adding handle: conn: 0x10eadbd8     * Adding handle: send: 0     * Adding handle: recv: 0     * Curl_addHandleToPipeline: length: 1     * - Conn 0 (0x10eadbd8) send_pipe: 1, recv_pipe: 0     * Connected to frontpage.backyards-demo (10.10.178.38) port 8080 (#0)     &gt; GET \/ HTTP\/1.1     &gt; User-Agent: curl\/7.30.0     &gt; Host: frontpage.backyards-demo:8080     &gt; Accept: *\/*     &gt;     &lt; HTTP\/1.1 200 OK     &lt; content-type: text\/plain     &lt; date: Thu, 16 Apr 2020 16:32:20 GMT     &lt; content-length: 9     &lt; x-envoy-upstream-service-time: 10     &lt; resp-header-demo: added by our filter     &lt; x-envoy-peer-metadata: CjYKDElOU1RBTkNFX0lQUxImGiQxMC4yMC4xLjU3LGZlODA6OmQwNDM6NDdmZjpmZWYwOmVkMjkK2QEKBkxBQkVMUxLOASrLAQoSCgNhcHASCxoJZnJvbnRwYWdlCiEKEXBvZC10ZW1wbGF0ZS1oYXNoEgwaCjU3OGM2NTU0ZDQKJAoZc2VjdXJpdHkuaXN0aW8uaW8vdGxzTW9k     ZRIHGgVpc3RpbwouCh9zZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1uYW1lEgsaCWZyb250cGFnZQorCiNzZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1yZXZpc2lvbhIEGgJ2MQoPCgd2ZXJzaW9uEgQaAnYxChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAonCgROQU1FEh8aHWZyb250cGFnZS12MS01N     zhjNjU1NGQ0LWxidnFrCh0KCU5BTUVTUEFDRRIQGg5iYWNreWFyZHMtZGVtbwpXCgVPV05FUhJOGkxrdWJlcm5ldGVzOi8vYXBpcy9hcHBzL3YxL25hbWVzcGFjZXMvYmFja3lhcmRzLWRlbW8vZGVwbG95bWVudHMvZnJvbnRwYWdlLXYxCi8KEVBMQVRGT1JNX01FVEFEQVRBEhoqGAoWCgpjbHVzdGVyX2lkEg     gaBm1hc3RlcgocCg9TRVJWSUNFX0FDQ09VTlQSCRoHZGVmYXVsdAofCg1XT1JLTE9BRF9OQU1FEg4aDGZyb250cGFnZS12MQ==     &lt; x-envoy-peer-metadata-id: sidecar~10.20.1.57~frontpage-v1-578c6554d4-lbvqk.backyards-demo~backyards-demo.svc.cluster.local     &lt; x-by-metadata: CjYKDElOU1RBTkNFX0lQUxImGiQxMC4yMC4xLjU3LGZlODA6OmQwNDM6NDdmZjpmZWYwOmVkMjkK2QEKBkxBQkVMUxLOASrLAQoSCgNhcHASCxoJZnJvbnRwYWdlCiEKEXBvZC10ZW1wbGF0ZS1oYXNoEgwaCjU3OGM2NTU0ZDQKJAoZc2VjdXJpdHkuaXN0aW8uaW8vdGxzTW9kZRIHGgVp     c3RpbwouCh9zZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1uYW1lEgsaCWZyb250cGFnZQorCiNzZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1yZXZpc2lvbhIEGgJ2MQoPCgd2ZXJzaW9uEgQaAnYxChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAonCgROQU1FEh8aHWZyb250cGFnZS12MS01NzhjNjU1N     GQ0LWxidnFrCh0KCU5BTUVTUEFDRRIQGg5iYWNreWFyZHMtZGVtbwpXCgVPV05FUhJOGkxrdWJlcm5ldGVzOi8vYXBpcy9hcHBzL3YxL25hbWVzcGFjZXMvYmFja3lhcmRzLWRlbW8vZGVwbG95bWVudHMvZnJvbnRwYWdlLXYxCi8KEVBMQVRGT1JNX01FVEFEQVRBEhoqGAoWCgpjbHVzdGVyX2lkEggaBm1hc3     RlcgocCg9TRVJWSUNFX0FDQ09VTlQSCRoHZGVmYXVsdAofCg1XT1JLTE9BRF9OQU1FEg4aDGZyb250cGFnZS12MQ==     * Server istio-envoy is not blacklisted     &lt; server: istio-envoy     &lt; x-envoy-decorator-operation: frontpage.backyards-demo.svc.cluster.local:8080\/*     &lt;     * Connection #0 to host frontpage.backyards-demo left intact     frontpage<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<ol>\n<li>\u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 WASM \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 TCP \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 <code>frontpage<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 TCP \u043d\u0430 \u043f\u043e\u0440\u0442\u0435 8083, \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 <code>EnvoyFilter<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">kubectl apply -f-&lt;&lt;EOF apiVersion: networking.istio.io\/v1alpha3 kind: EnvoyFilter metadata:   name: frontpage-v1-examplefilter   namespace: backyards-demo spec:   configPatches:   - applyTo: NETWORK_FILTER     match:       context: SIDECAR_INBOUND       proxy:         proxyVersion: '^1\\.5.*'       listener:         portNumber: 8083         filterChain:           filter:             name: &quot;envoy.tcp_proxy&quot;     patch:       operation: INSERT_BEFORE       value:         config:           config:             name: example-filter             rootId: my_root_id             vmConfig:               code:                 local:                   filename: \/var\/local\/lib\/wasm-filters\/example-filter.wasm               runtime: envoy.wasm.runtime.v8               vmId: example-filter               allow_precompiled: true         name: envoy.filters.network.wasm   workloadSelector:     labels:       app: frontpage       version: v1 EOF<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 TCP, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0443\u043a\u0438 \u0434\u043b\u044f TCP-\u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 Istio:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/go\/wp\/jm\/gowpjmzcn_cprsiu2gvuxkpfjpo.png\"><\/p>\n<p>  <\/p>\n<h2 id=\"pishem-filtry-wasm-dlya-envoy-s-wasme-\">\u041f\u0438\u0448\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM \u0434\u043b\u044f Envoy \u0441 WASME \ufe0e<\/h2>\n<p>  <\/p>\n<p><a href=\"https:\/\/docs.solo.io\/web-assembly-hub\/latest\">Solo.io<\/a> \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM \u0434\u043b\u044f Envoy \u2014 WebAssembly Hub, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043e\u0434\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 <a href=\"https:\/\/github.com\/solo-io\/wasme\">WASME<\/a> \u0434\u043b\u044f \u0441\u043a\u0430\u0444\u0444\u043e\u043b\u0434\u0438\u043d\u0433\u0430, \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 WASM \u0432 <a href=\"https:\/\/webassemblyhub.io\/\">WebAssembly Hub<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 WASM <code>wasme<\/code> \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430 WASM \u0438\u0437 WebAssembly Hub, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 daemonset, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043a\u043e\u0434 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 WASM \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430, \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u043b\u044f Envoy Proxy \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0434\u0435 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u043c\u0430 <code>hostPath<\/code>.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/strong> \u041e\u0431\u0440\u0430\u0437\u044b \u0438\u0437 WebAssembly Hub \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b Docker.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0430\u0432\u0434\u0430, \u0442\u0443\u0442 \u043c\u044b \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0438 \u0445\u0440\u0430\u043d\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (WebAssembly Hub), \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0438\u0437-\u0437\u0430 \u0441\u0442\u0440\u043e\u0433\u0438\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u0430\u0440\u043e\u0434\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u043a\u043e\u0434, \u0434\u0430\u0436\u0435 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.<\/p>\n<p>  <\/p>\n<h4 id=\"zaklyuchenie-\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \ufe0e<\/h4>\n<p>  <\/p>\n<p>\u0421 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 WASM \u0434\u043b\u044f Envoy \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u044b WASM \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Envoy \u0434\u043b\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0439 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445. \u0422\u0430\u043a \u0447\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u044b WASM \u0434\u043b\u044f Envoy Proxy \u2014 \u044d\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/539484\/\"> https:\/\/habr.com\/ru\/company\/southbridge\/blog\/539484\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ap\/yl\/uc\/apyluccrwvfa9uxhmu3btdetos4.jpeg\"><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/www.envoyproxy.io\/\">Envoy<\/a> \u2014 \u044d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 L3\/L4 \u0438 L7, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 service mesh, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/istio.io\/\">Istio<\/a>. Envoy \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0443\u0434\u0438\u0442\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Envoy, \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Envoy \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Envoy. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u044e Envoy \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u043c. \u0424\u0438\u043b\u044c\u0442\u0440, \u043a\u0441\u0442\u0430\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 C++, \u043a\u0430\u043a \u0438 \u0441\u0430\u043c Envoy.<\/li>\n<li>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432 Envoy Proxy \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435.<br \/>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-317361","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=317361"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317361\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}