mirror of https://github.com/istio/istio.io.git
138 lines
32 KiB
HTML
138 lines
32 KiB
HTML
<!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 Mesh 构建的每节点代理。"><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 Mesh 构建的每节点代理。"><meta property="og:url" content="/v1.18/zh/blog/2023/rust-based-ztunnel/"><meta property="og:image" content="https://raw.githubusercontent.com/istio/istio.io/master/static/img/istio-social.svg"><meta property="og:image:alt" content="Istio Logo"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="600"><meta property="og:site_name" content="Istio"><meta name=twitter:card content="summary"><meta name=twitter:site content="@IstioMesh"><title>Istioldie 1.18 / “为 Istio 环境服务网格引入基于 Rust 的 Ztunnel"</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.18/blog/feed.xml><link rel=alternate type=application/rss+xml title="Istio News" href=/v1.18/news/feed.xml><link rel=alternate type=application/rss+xml title="Istio Blog and News" href=/v1.18/feed.xml><link rel="shortcut icon" href=/v1.18/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.18/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.18/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.18/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.18/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.18/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.18/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.18/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.18/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.18/favicons/android-192x192.png sizes=192x192><link rel=icon type=image/svg+xml href=/v1.18/favicons/favicon.svg><link rel=icon type=image/png href=/v1.18/favicons/favicon.png><link rel=mask-icon href=/v1.18/favicons/safari-pinned-tab.svg color=#466bb0><link rel=manifest href=/v1.18/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.18/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.18/js/themes_init.min.js></script></head><body class="language-unknown archive-site"><script>const branchName="release-1.18",docTitle="“为 Istio 环境服务网格引入基于 Rust 的 Ztunnel\"",iconFile="/v1.18/img/icons.svg",buttonCopy="复制到剪切板",buttonPrint="打印",buttonDownload="下载"</script><script src="https://www.google.com/cse/brand?form=search-form" defer></script>
|
||
<script src=/v1.18/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.18/zh/ 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.18/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.18/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.18/img/icons.svg#dropdown-arrow"/></svg></a><ul class=main-navigation-links-dropdown><li class=main-navigation-links-dropdown-item><a href=/v1.18/zh/about/service-mesh class=main-navigation-links-link>服务网格</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.18/zh/about/solutions class=main-navigation-links-link>解决方案</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.18/zh/about/case-studies class=main-navigation-links-link>案例学习</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.18/zh/about/ecosystem class=main-navigation-links-link>生态系统</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.18/zh/about/deployment class=main-navigation-links-link>部署</a></li><li class=main-navigation-links-dropdown-item><a href=/v1.18/zh/about/faq class=main-navigation-links-link>FAQ</a></li></ul></li><li class=main-navigation-links-item><a href=/v1.18/zh/blog/ class=main-navigation-links-link><span>博客</span></a></li><li class=main-navigation-links-item><a href=/v1.18/zh/news/ class=main-navigation-links-link><span>新闻</span></a></li><li class=main-navigation-links-item><a href=/v1.18/zh/get-involved/ class=main-navigation-links-link><span>加入我们</span></a></li><li class=main-navigation-links-item><a href=/v1.18/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.18/img/icons.svg#magnifier"/></svg></button>
|
||
<a href=/v1.18/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.18/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 Mesh 构建的每节点代理。</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 Mesh 的每个节点构建的代理。
|
||
Ztunnel 负责在 Ambient Mesh 中安全地连接和验证工作负载,
|
||
专门为 Ambient Mesh 中的工作负载处理 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.18/zh/blog/2023/rust-based-ztunnel/ztunnel-architecture.png title="ztunnel architecture"><img class=element-to-stretch src=/v1.18/zh/blog/2023/rust-based-ztunnel/ztunnel-architecture.png alt="ztunnel architecture"></a></div><figcaption>ztunnel architecture</figcaption></figure><h2 id=为什么不重用-envoywhy-not-reuse-envoy>为什么不重用 Envoy?{#why-not-reuse-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=#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.18/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 Mesh 之前,您仍然能够在 Ztunnel 的配置转储中看到它们,
|
||
因为 Ztunnel 知道所有工作负载,无论它们是否启用环境。
|
||
例如,下面包含一个新部署的 helloworld v1 pod 的示例工作负载配置,该 Pod 脱离了 <code>protocol:TCP</code> 所指示的网格:</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
|
||
"workloads": {
|
||
"10.244.2.8": {
|
||
"workloadIp": "10.244.2.8",
|
||
"protocol": "TCP",
|
||
"name": "helloworld-v1-cross-node-55446d46d8-ntdbk",
|
||
"namespace": "default",
|
||
"serviceAccount": "helloworld",
|
||
"workloadName": "helloworld-v1-cross-node",
|
||
"workloadType": "deployment",
|
||
"canonicalName": "helloworld",
|
||
"canonicalRevision": "v1",
|
||
"node": "ambient-worker2",
|
||
"authorizationPolicies": [],
|
||
"status": "Healthy"
|
||
}
|
||
}
|
||
}
|
||
</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>{
|
||
"workloads": {
|
||
"10.244.2.8": {
|
||
"workloadIp": "10.244.2.8",
|
||
"protocol": "HBONE",
|
||
...
|
||
}
|
||
</code></pre><p>部署任何工作负载级别授权策略后,策略配置将作为 xDS 配置从 Istiod 推送到 Ztunnel ,并显示在 <code>policies</code> 下:</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
|
||
"policies": {
|
||
"default/hw-viewer": {
|
||
"name": "hw-viewer",
|
||
"namespace": "default",
|
||
"scope": "WorkloadSelector",
|
||
"action": "Allow",
|
||
"groups": [[[{
|
||
"principals": [{"Exact": "cluster.local/ns/default/sa/sleep"}]
|
||
}]]]
|
||
}
|
||
}
|
||
...
|
||
}
|
||
</code></pre><p>您还将注意到工作负载的配置是参照授权策略更新的。</p><pre><code class=language-plaintext data-expandlinks=true data-repo=istio>{
|
||
"workloads": {
|
||
"10.244.2.8": {
|
||
"workloadIp": "10.244.2.8",
|
||
...
|
||
"authorizationPolicies": [
|
||
"default/hw-viewer"
|
||
],
|
||
}
|
||
...
|
||
}
|
||
</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.18/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="source",
|
||
source_workload="sleep",
|
||
source_workload_namespace="default",
|
||
source_principal="spiffe://cluster.local/ns/default/sa/sleep",
|
||
destination_workload="helloworld-v1",
|
||
destination_workload_namespace="default",
|
||
destination_principal="spiffe://cluster.local/ns/default/sa/helloworld",
|
||
request_protocol="tcp",
|
||
connection_security_policy="mutual_tls"
|
||
...
|
||
} 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.18/zh/blog/2023/rust-based-ztunnel/kiali-ambient.png title="Kiali dashboard - L4 telemetry provided by Ztunnel"><img class=element-to-stretch src=/v1.18/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.18/zh/docs/ops/ambient/getting-started/>入门指南</a>尝试新的基于 Rust 的 Ztunnel。</p></div><nav class=pagenav><div class=left><a title="Ambient 网格的重要里程碑。" href=/v1.18/zh/blog/2023/ambient-merged-istio-main/ class=next-link><svg class="icon left-arrow"><use xlink:href="/v1.18/img/icons.svg#left-arrow"/></svg>“Istio Ambient 服务网格已合并到 Istio 的主分支”</a></div><div class=right><a title="Istio 指导委员会欢迎来自 Google、IBM、Huawei 和 Red Hat 的贡献者们。" href=/v1.18/zh/blog/2023/steering-contribution-seat-results/ class=next-link>宣布 2023 年技术指导委员会的贡献席位<svg class="icon right-arrow"><use xlink:href="/v1.18/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.18/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.18/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.18/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.18/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.18/img/icons.svg#twitter"/></svg></a></div><hr class=footer-separator role=separator><div class="info footer-info"><a class=logo href=/v1.18/zh/ 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>English</a>
|
||
<a tabindex=-1 lang=zh id=switch-lang-zh class="footer-languages-item active"><svg class="icon tick"><use xlink:href="/v1.18/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://github.com/istio/istio.io/edit/release-1.18/content/zh/blog/2023/rust-based-ztunnel/index.md>在 GitHub 上编辑此页</a></li></ul><div class=footer-base><span class=footer-base-copyright>© 2023 the Istio Authors.</span>
|
||
<span class=footer-base-version>部分内容可能滞后于英文版本,同步工作正在进行中<br>版本
|
||
Istio 归档
|
||
1.18.2</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.18/img/icons.svg#top"/></svg></button></div></body></html> |