istio.io/archive/v1.23/zh/blog/2023/rust-based-ztunnel/index.html

151 lines
32 KiB
HTML
Raw 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="为 Istio 环境服务网格引入基于 Rust 的 Ztunnel"><meta name=description content="专门为 Istio Ambient 模式构建的每节点代理。"><meta name=author content="Lin Sun (Solo.io), John Howard (Google)"><meta name=keywords content="microservices,services,mesh,istio,ambient,ztunnel"><meta property="og:title" content="为 Istio 环境服务网格引入基于 Rust 的 Ztunnel"><meta property="og:type" content="website"><meta property="og:description" content="专门为 Istio Ambient 模式构建的每节点代理。"><meta property="og:url" content="/v1.23/zh/blog/2023/rust-based-ztunnel/"><meta property="og:image" content="https://raw.githubusercontent.com/istio/istio.io/master/static/img/istio-social.png"><meta property="og:image:alt" content="The Istio sailboat logo"><meta property="og:image:width" content="4096"><meta property="og:image:height" content="2048"><meta property="og:site_name" content="Istio"><meta name=twitter:card content="summary_large_image"><meta name=twitter:site content="@IstioMesh"><title>Istioldie 1.23 / 为 Istio 环境服务网格引入基于 Rust 的 Ztunnel</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5XBWY4YJ1E"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-5XBWY4YJ1E")</script><link rel=alternate type=application/rss+xml title="Istio Blog" href=/v1.23/blog/feed.xml><link rel=alternate type=application/rss+xml title="Istio News" href=/v1.23/news/feed.xml><link rel=alternate type=application/rss+xml title="Istio Blog and News" href=/v1.23/feed.xml><link rel="shortcut icon" href=/v1.23/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.23/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.23/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.23/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.23/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.23/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.23/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.23/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.23/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.23/favicons/android-192x192.png sizes=192x192><link rel=icon type=image/svg+xml href=/v1.23/favicons/favicon.svg><link rel=icon type=image/png href=/v1.23/favicons/favicon.png><link rel=mask-icon href=/v1.23/favicons/safari-pinned-tab.svg color=#466BB0><link rel=manifest href=/v1.23/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.23/css/all.css><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><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.23/js/themes_init.min.js></script></head><body class="language-unknown archive-site"><script>const branchName="release-1.23",docTitle="为 Istio 环境服务网格引入基于 Rust 的 Ztunnel",iconFile="/v1.23//img/icons.svg",buttonCopy="复制到剪切板",buttonPrint="打印",buttonDownload="下载"</script><script src="https://www.google.com/cse/brand?form=search-form" defer></script><script src=/v1.23/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.23/zh/ aria-label=logotype><span class=logo><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.23/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.23/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.23/img/icons.svg#dropdown-arrow"/></svg></a><ul class=main-navigation-links-dropdown><li class=main-navigation-links-dropdown-item><a href=/v1.23/zh/about/service-mesh class=main-navigation-links-link>服务网格</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.23/zh/about/solutions class=main-navigation-links-link>解决方案</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.23/zh/about/case-studies class=main-navigation-links-link>案例学习</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.23/zh/about/ecosystem class=main-navigation-links-link>生态系统</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.23/zh/about/deployment class=main-navigation-links-link>部署</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.23/zh/about/faq class=main-navigation-links-link>FAQ</a></li></ul></li><li class=main-navigation-links-item><a href=/v1.23/zh/blog/ class=main-navigation-links-link><span>博客</span></a></li><li class=main-navigation-links-item><a href=/v1.23/zh/news/ class=main-navigation-links-link><span>新闻</span></a></li><li class=main-navigation-links-item><a href=/v1.23/zh/get-involved/ class=main-navigation-links-link><span>加入我们</span></a></li><li class=main-navigation-links-item><a href=/v1.23/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.23/img/icons.svg#magnifier"/></svg></button>
<a href=/v1.23/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.23/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>为 Istio 环境服务网格引入基于 Rust 的 Ztunnel</h1><p>专门为 Istio Ambient 模式构建的每节点代理。</p></div><p class=post-author>Feb 28, 2023 <span>| </span>By Lin Sun - Solo.io, John Howard - Google</p><div><p>Ztunnel零信任隧道组件是专门为 Istio Ambient 模式的每个节点构建的代理。
Ztunnel 负责在 Ambient 模式中安全地连接和验证工作负载,
专门为 Ambient 模式中的工作负载处理 mTLS、身份验证、L4 授权和遥测等这部分功能,
这样就无需终止工作负载 HTTP 流量或解析工作负载 HTTP 标头。
Ztunnel 确保流量高效、安全地传输到 waypoint proxy从而实现 HTTP 遥测和负载均衡等 Istio 的全套功能
由于 Ztunnel 被设计为在所有 Kubernetes 工作节点上运行所以保持其资源占用小是至关重要的。Ztunnel 被设计为服务网格的一个无形的部分,对您的工作负载几乎没有影响。</p><h2 id=ztunnel-architecture>Ztunnel 架构</h2><p>与 Sidecar 类似Ztunnel 也充当 xDS 客户端和 CA 客户端:</p><ol><li>在启动期间,它使用服务账户令牌。一旦从 Ztunnel 到 Istiod 的连接使用 TLS 建立连接,它就开始作为一个 xDS 客户端获取 xDS 配置。
这种工作方式类似于 Sidecar 或 Gateway 或 waypoint proxy只是 Istiod 识别来自 Ztunnel 的请求,并为 Ztunnel 发送特制的 xDS 配置。
并发送专门为 Ztunnel 设计的 xDS 配置,您将很快了解到更多。</li><li>它还充当 CA 客户端,代表其管理的所有位于同一位置的工作负载管理和提供 mTLS 证书。</li><li>当流量输入或输出时它充当核心代理为其管理的所有位于同一位置的工作负载处理入站和出站流量网格外纯文本或网格内HBONE</li><li>它提供 L4 遥测(指标和日志)以及带有调试信息的管理服务器,以帮助您在需要时调试 Ztunnel。</li></ol><figure style=width:100%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:67.74193548387096%><a data-skipendnotes=true href=/v1.23/zh/blog/2023/rust-based-ztunnel/ztunnel-architecture.png title="ztunnel architecture"><img class=element-to-stretch src=/v1.23/zh/blog/2023/rust-based-ztunnel/ztunnel-architecture.png alt="ztunnel architecture"></a></div><figcaption>ztunnel architecture</figcaption></figure><h2 id=why-not-reuse-envoy>为什么不重用 Envoy?</h2><p>当 Istio 环境服务网格于 2022 年 9 月 7 日发布时Ztunnel 是使用 Envoy 代理实现的。
鉴于我们将 Envoy 用于 Istio 的其余部分Sidecar、Gateway 和 waypoint proxy
我们很自然地开始使用 Envoy 实现 Ztunnel。</p><p>然而,我们发现,虽然 Envoy 非常适合其他用例,但在 Envoy 中实现 Ztunnel 是一个挑战,
因为许多权衡、需求和用例与 Sidecar 代理或入口网关的情况有着显著的不同。
此外,使 Envoy 非常适合那些其他用例的大部分东西,如其丰富的 L7 特性集和可扩展性,
在不需要这些特性的 Ztunnel 中被浪费了。</p><h2 id=a-purpose-built-ztunnel>一个特制的 Ztunnel</h2><p>在 Envoy 难以满足我们的需求后,我们开始研究如何实现 Ztunnel。
我们的假设是,从一开始就着眼于单一的用例设计,这样可以开发一个更简单、更高性能的解决方案,
而不是根据我们定制的用例来塑造一个通用的项目。使 Ztunnel 变得简单的明确决定是这一假设的关键;
例如,类似的逻辑无法支持重写网关,因为重写时需要大量受支持的功能和集成。</p><p>这个专门特制的 Ztunnel 涉及两个关键领域:</p><ul><li><p>Ztunnel 及其 Istiod 之间的配置协议</p></li><li><p>Ztunnel 的运行时实现</p></li></ul><h3 id=configuration-protocol>配置协议</h3><p>Envoy 代理使用 <a href=https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol>xDS 协议进行配置</a>
这是 Istio 工作良好的关键部分,它提供了丰富的动态配置更新。然而,随着我们走出老路,配置变得越来越定制,
这意味着它的规模更大,生成成本也更高。在一个 Sidecar 中,一个带有 1 个 Pod 的服务生成大约 350 行 xDS在 YAML 中),
这在规模上已经具有挑战性。基于 Envoy 的 Ztunnel 要糟糕得多,在某些区域具有 N^2 级的扩缩属性。</p><p>为了使 Ztunnel 配置尽可能小,我们研究了使用专门构建的配置协议,该协议以有效的格式精确地包含我们所需的信息(仅此而已)。
例如,一个 Pod 可以被简洁地表示出来。</p><pre><code class=language-yaml data-expandlinks=true data-repo=istio>name: helloworld-v1-55446d46d8-ntdbk
namespace: default
serviceAccount: helloworld
node: ambient-worker2
protocol: TCP
status: Healthy
waypointAddresses: []
workloadIp: 10.244.2.8
canonicalName: helloworld
canonicalRevision: v1
workloadName: helloworld-v1
workloadType: deployment
</code></pre><p>它的信息通过 xDS 传输 API 传输,但使用自定义环境特定类型。
请参阅<a href=/v1.23/zh/blog/2023/rust-based-ztunnel/#workload-xds-configuration>工作负载 xDS 配置</a>一节,以了解有关配置详情。</p><p>通过使用专门构建的 API我们可以将逻辑推送到代理中而不是在 Envoy 配置中。
例如,要在 Envoy 中配置 mTLS我们需要添加一组相同的大型配置以调整每个服务的精确 TLS 设置;
使用 Ztunnel我们只需要一个枚举来声明是否应该使用 mTLS。其余的复杂逻辑直接嵌入 Ztunnel 代码中。</p><p>通过 Istiod 和 Ztunnel 之间的这个高效 API我们发现我们可以使用有关大型网格例如具有 100000 个 Pod 的网格)
的信息来配置 Ztunnel配置数量级更少这意味着更少的 CPU、内存和网络成本。</p><h3 id=runtime-implementation>运行时的实现</h3><p>顾名思义Ztunnel 使用 <a href=/v1.23/zh/blog/2022/introducing-ambient-mesh/#building-an-ambient-mesh>HTTPS 隧道</a>来承载用户请求。
虽然 Envoy 支持这种隧道,但我们发现其配置模式对我们的需求有限制。
粗略地说Envoy 的操作是通过一系列的"过滤器"来发送请求,从接受请求开始,到发送请求结束。
由于我们的需求有多层请求(隧道本身和用户的请求),以及需要在负载均衡后应用每个节点的策略,
我们发现在实现我们之前基于 Envoy 的 Ztunnel 时我们需要在每个连接中循环通过这些过滤器4次。
虽然 Envoy 有<a href=https://www.envoyproxy.io/docs/envoy/latest/configuration/other_features/internal_listener>一些优化</a>
基本上是在内存中 “向自己发送一个请求",但这仍然是非常复杂和昂贵。</p><p>通过建立我们自己的实现,我们可以从头开始围绕这些限制进行设计。
此外,我们在设计的各个方面都有更大的灵活性。例如,我们可以选择跨线程共享连接,或者围绕服务账户之间的隔离实现更多定制的要求。
在确定了一个特制的代理是可行的之后,我们开始选择实施细节。</p><h4 id=a-rust-based-ztunnel>基于 Rust 的 Ztunnel</h4><p>为了使 Ztunnel 快速、安全、轻便,<a href=https://www.rust-lang.org/>Rust</a> 是一个明显的选择。
然而,这不是我们的第一次。考虑到 Istio 目前广泛使用 Go 语言,我们希望能够使基于 Go 的实现满足这些目标。
在最初的原型中,我们构建了一些基于 Go 的实现和基于 Rust 的实现的简单版本。
从我们的测试中,我们发现基于 Go 的版本不符合我们的性能和占地面积要求。
虽然我们可能已经进一步优化了它,但我们觉得基于 Rust 的代理将为我们提供长期的最佳实现。</p><p>还考虑了 C++ 语言实现——可能重用 Envoy 的部分。然而,由于缺乏内存安全性、开发人员体验问题以及行业普遍倾向于 Rust因此没有采用此选项。</p><p>这个淘汰过程给我们留下了 Rust这是一个完美的选择。
Rust 在高性能、低资源利用率的应用程序,特别是在网络应用程序(包括服务网格)中有着悠久的历史。
我们选择在 <a href=https://tokio.rs/>Tokio</a><a href=https://hyper.rs/>Hyper</a> 库上构建,
这是生态系统中的两个事实上的标准,经过了广泛的实战测试,易于编写高性能异步代码。</p><h2 id=a-quick-tour-of-rust-based-ztunnel>快速浏览基于 Rust 的 Ztunnel</h2><h3 id=workload-xds-configuration>工作负载 xDS 配置</h3><p>工作负载 xDS 配置非常容易理解和调试。您可以通过从 Ztunnel Pod 之一向 <code>localhost:15000/config_dump</code> 发送请求来查看它们,
或者使用方便的 <code>istioctl pc workload</code> 命令。有两个关键的工作负载 xDS 配置:工作负载和策略。</p><p>在您的工作负载被纳入 Ambient 模式之前,您仍然能够在 Ztunnel 的配置转储中看到它们,
因为 Ztunnel 知道所有工作负载,无论它们是否启用环境。
例如,下面包含一个新部署的 helloworld v1 pod 的示例工作负载配置,该 Pod 脱离了 <code>protocol:TCP</code> 所指示的网格:</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
&#34;workloads&#34;: {
&#34;10.244.2.8&#34;: {
&#34;workloadIp&#34;: &#34;10.244.2.8&#34;,
&#34;protocol&#34;: &#34;TCP&#34;,
&#34;name&#34;: &#34;helloworld-v1-cross-node-55446d46d8-ntdbk&#34;,
&#34;namespace&#34;: &#34;default&#34;,
&#34;serviceAccount&#34;: &#34;helloworld&#34;,
&#34;workloadName&#34;: &#34;helloworld-v1-cross-node&#34;,
&#34;workloadType&#34;: &#34;deployment&#34;,
&#34;canonicalName&#34;: &#34;helloworld&#34;,
&#34;canonicalRevision&#34;: &#34;v1&#34;,
&#34;node&#34;: &#34;ambient-worker2&#34;,
&#34;authorizationPolicies&#34;: [],
&#34;status&#34;: &#34;Healthy&#34;
}
}
}
</code></pre><p>当 Pod 包含在环境中后(通过将命名空间默认值标记为 <code>istio.io/dataplane mode=ambient</code>
<code>protocol</code> 值替换为 <code>HBONE</code>,指示 Ztunnel 将 helloworld-v1 pod 中的所有传入和传出通信升级为 HBONE 。</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
&#34;workloads&#34;: {
&#34;10.244.2.8&#34;: {
&#34;workloadIp&#34;: &#34;10.244.2.8&#34;,
&#34;protocol&#34;: &#34;HBONE&#34;,
...
}
</code></pre><p>部署任何工作负载级别授权策略后,策略配置将作为 xDS 配置从 Istiod 推送到 Ztunnel ,并显示在 <code>policies</code> 下:</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
&#34;policies&#34;: {
&#34;default/hw-viewer&#34;: {
&#34;name&#34;: &#34;hw-viewer&#34;,
&#34;namespace&#34;: &#34;default&#34;,
&#34;scope&#34;: &#34;WorkloadSelector&#34;,
&#34;action&#34;: &#34;Allow&#34;,
&#34;groups&#34;: [[[{
&#34;principals&#34;: [{&#34;Exact&#34;: &#34;cluster.local/ns/default/sa/sleep&#34;}]
}]]]
}
}
...
}
</code></pre><p>您还将注意到工作负载的配置是参照授权策略更新的。</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
&#34;workloads&#34;: {
&#34;10.244.2.8&#34;: {
&#34;workloadIp&#34;: &#34;10.244.2.8&#34;,
...
&#34;authorizationPolicies&#34;: [
&#34;default/hw-viewer&#34;
],
}
...
}
</code></pre><h3 id=l4-telemetry-provided-by-ztunnel>由 Ztunnel 提供的 L4 遥测数据</h3><p>您可能会惊喜地发现 Ztunnel 的日志很容易理解。
例如,您会看到目的地 Ztunnel 上的 HTTP 连接请求,表明源 Pod IP<code>peer_ip</code>)和目的地 Pod IP。</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>2023-02-15T20:40:48.628251Z INFO inbound{id=4399fa68cf25b8ebccd472d320ba733f peer_ip=10.244.2.5 peer_id=spiffe://cluster.local/ns/default/sa/sleep}: Ztunnel::proxy::inbound: got CONNECT request to 10.244.2.8:5000
</code></pre><p>您可以通过访问 <code>localhost:1502/metrics</code> API 来查看工作负载的 L4 指标,
该 API 提供了一组完整的 TCP <a href=/v1.23/zh/docs/reference/config/metrics/>标准指标</a>,其标签与 Sidecar 公开的标签相同。例如:</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>istio_tcp_connections_opened_total{
reporter=&#34;source&#34;,
source_workload=&#34;sleep&#34;,
source_workload_namespace=&#34;default&#34;,
source_principal=&#34;spiffe://cluster.local/ns/default/sa/sleep&#34;,
destination_workload=&#34;helloworld-v1&#34;,
destination_workload_namespace=&#34;default&#34;,
destination_principal=&#34;spiffe://cluster.local/ns/default/sa/helloworld&#34;,
request_protocol=&#34;tcp&#34;,
connection_security_policy=&#34;mutual_tls&#34;
...
} 1
</code></pre><p>如果您安装 Prometheus 和 Kiali您可以从 Kiali 的 UI 轻松查看这些指标。</p><figure style=width:100%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:46.997690531177824%><a data-skipendnotes=true href=/v1.23/zh/blog/2023/rust-based-ztunnel/kiali-ambient.png title="Kiali dashboard - L4 telemetry provided by Ztunnel"><img class=element-to-stretch src=/v1.23/zh/blog/2023/rust-based-ztunnel/kiali-ambient.png alt="Kiali dashboard - L4 telemetry provided by Ztunnel"></a></div><figcaption>Kiali dashboard - L4 telemetry provided by Ztunnel</figcaption></figure><h2 id=wrapping-up>结束语</h2><p>我们超级兴奋的是新的<a href=https://github.com/istio/Ztunnel/>基于 Rust 的 Ztunnel</a> 比之前基于 Envoy 的 Ztunnel 大大简化,
更加轻巧,性能更强。通过为基于 Rust 的 Ztunnel 特意设计的工作负载 xDS您不仅能更容易地理解 xDS 的配置,而且还能大幅减少
Istiod 控制平面和 Ztunnel 之间的网络流量和成本。随着 Istio Ambient 模式现在合并到上游主站,
您可以按照我们的<a href=/v1.23/zh/docs/ambient/getting-started/>入门指南</a>尝试新的基于 Rust 的 Ztunnel。</p></div><div class=share-social><div class=heading>Share this post</div><div class=share-buttons><a href="https://www.linkedin.com/shareArticle?mini=true&url=%2fv1.23%2fzh%2fblog%2f2023%2frust-based-ztunnel%2f" target=_blank><img class=share-icon src=/v1.23/img/social/linkedin.svg alt="Share to LinkedIn">
</a><a href="https://twitter.com/intent/tweet?text=%e4%b8%ba%20Istio%20%e7%8e%af%e5%a2%83%e6%9c%8d%e5%8a%a1%e7%bd%91%e6%a0%bc%e5%bc%95%e5%85%a5%e5%9f%ba%e4%ba%8e%20Rust%20%e7%9a%84%20Ztunnel&url=%2fv1.23%2fzh%2fblog%2f2023%2frust-based-ztunnel%2f" target=_blank><img class=share-icon src=/v1.23/img/social/twitterx.svg alt="Share to X">
</a><a href="https://www.facebook.com/sharer/sharer.php?u=%2fv1.23%2fzh%2fblog%2f2023%2frust-based-ztunnel%2f" target=_blank><img class=share-icon src=/v1.23/img/social/facebook.svg alt="Share to Facebook"></a></div></div><nav class=pagenav><div class=left><a title="Ambient 网格的重要里程碑。" href=/v1.23/zh/blog/2023/ambient-merged-istio-main/ class=next-link><svg class="icon left-arrow"><use xlink:href="/v1.23/img/icons.svg#left-arrow"/></svg>Istio Ambient 服务网格已合并到 Istio 的主分支</a></div><div class=right><a title="Istio 指导委员会欢迎来自 Google、IBM、Huawei 和 Red Hat 的贡献者们。" href=/v1.23/zh/blog/2023/steering-contribution-seat-results/ class=next-link>宣布 2023 年技术指导委员会的贡献席位<svg class="icon right-arrow"><use xlink:href="/v1.23/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.23/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.23/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.23/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.23/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.23/img/icons.svg#twitter"/></svg></a></div><hr class=footer-separator role=separator><div class="info footer-info"><a class=logo href=/v1.23/zh/ aria-label=logotype><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>English
</a><a tabindex=-1 lang=zh id=switch-lang-zh class="footer-languages-item active"><svg class="icon tick"><use xlink:href="/v1.23/img/icons.svg#tick"/></svg>
中文</a></div></div><ul class=footer-policies><li class=footer-policies-item><a class=footer-policies-link href=https://www.linuxfoundation.org/legal/terms>条款
</a>|
<a class=footer-policies-link href=https://www.linuxfoundation.org/legal/privacy-policy>隐私政策
</a>|
<a class=footer-policies-link href=https://www.linuxfoundation.org/legal/trademark-usage>商标
</a>|
<a class=footer-policies-link href=https://github.com/istio/istio.io/edit/release-1.23/content/zh/blog/2023/rust-based-ztunnel/index.md>在 GitHub 上编辑此页</a></li></ul><div class=footer-base><span class=footer-base-copyright>&copy; 2024 the Istio Authors.</span>
<span class=footer-base-version>部分内容可能滞后于英文版本,同步工作正在进行中<br>版本
Istio 归档
1.23.3</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/2023/rust-based-ztunnel/"),!1'>当前版本</a></li><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link onclick='return navigateToUrlOrRoot("https://preliminary.istio.io/blog/2023/rust-based-ztunnel/"),!1'>下个版本</a></li><li class=footer-base-releases-item><a tabindex=-1 class=footer-base-releases-link 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=回到顶部 tabindex=-1><svg class="icon top"><use xlink:href="/v1.23/img/icons.svg#top"/></svg></button></div></body></html>