[zh] Update overview/dataplane-modes/index.md (#16005)

This commit is contained in:
Michael Yao 2024-12-21 22:34:16 +08:00 committed by GitHub
parent c17f3c192a
commit 924e683f01
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 49 deletions

View File

@ -10,36 +10,39 @@ test: n/a
Istio 服务网格在逻辑上分为数据平面和控制平面。
{{< gloss "data plane" >}}数据平面{{< /gloss >}}是一组代理,用于调解和控制微服务之间的所有网络通信。
它们还收集和报告所有网格流量的可观测数据。
这些代理还可以收集和报告所有网格流量的可观测数据。
{{< gloss "control plane" >}}控制平面{{< /gloss >}}管理和配置数据平面中的代理。
{{< gloss "control plane" >}}控制平面{{< /gloss >}}管理和配置数据平面中的这些代理。
Istio 支持两种主要的{{< gloss "data plane mode">}}数据平面模式{{< /gloss >}}
* **Sidecar 模式**,它会与您在集群中启动的每个 Pod 一起部署一个 Envoy 代理,或者与在虚拟机上运行的服务一同运行。
* **Ambient 模式**,使用每个节点的四层代理,并且可选地使用每个命名空间的 Envoy 代理来实现七层功能。
* **Sidecar 模式**,此模式会为集群中启动的每个 Pod 都部署一个 Envoy 代理,
或者与在虚拟机上运行的服务并行运行一个 Envoy 代理。
* **Ambient 模式**,此模式在每个节点上使用四层代理,
另外可以选择为每个命名空间使用一个 Envoy 代理来实现七层功能。
您可以选择将某些命名空间或工作负载纳入任意模式。
您可以选择将某些命名空间或工作负载纳入任模式。
## Sidecar 模式 {#sidecar=mode}
Istio 自 2017 年首次发布以来就基于 Sidecar 模式构建。
Sidecar 模式易于理解且经过彻底的实战测试,但需要花费资源成本和运营开销。
* 您部署的每个应用程序都有一个 Envoy 代理{{< gloss "injection" >}}被注入{{< /gloss >}}作为 Sidecar
* 您部署的每个应用都有一个 Envoy 代理{{< gloss "injection" >}}被注入{{< /gloss >}}作为 Sidecar
* 所有代理都可以处理四层和七层流量
## Ambient 模式 {#ambient-mode}
Ambient 模式于 2022 年推出,旨在解决 Sidecar 模式用户报告的缺点。从 Istio 1.22 开始,它已准备好用于单集群用例的生产环境。
Ambient 模式于 2022 年推出,旨在解决 Sidecar 模式用户报告的缺点。
从 Istio 1.22 开始,它在单集群使用场景就达到生产就绪状态。
* 所有流量都通过仅支持四层的节点代理进行代理
* 应用程序可以选择通过 Envoy 代理进行路由,以获得七层功能
* 应用可以选择通过 Envoy 代理进行路由,以获得七层功能
## 在 Sidecar 和 Ambient 之间进行选择 {#choosing-between-sidecar-and-ambient}
## 在 Sidecar 和 Ambient 之间做出选择 {#choosing-between-sidecar-and-ambient}
用户通常首先部署网格以实现零信任安全态势,然后根据需要选择性地启用 L7 功能。
Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本。
Ambient 网格允许这些用户在不需要 L7 功能时完全绕过 L7 处理的成本。
<table>
<thead>
@ -63,7 +66,7 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<tr>
<th>可观测性</th>
<td>完整的 Istio 功能集</td>
<td>完整的 Istio 功能集Ambient 模式下具备 L4 可观测;使用 waypoint 实现 L7 可观察</td>
<td>完整的 Istio 功能集Ambient 模式下具备 L4 遥测;使用 waypoint 实现 L7 可观测</td>
</tr>
<tr>
<th>可扩展性</th>
@ -72,23 +75,23 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
</tr>
<tr>
<th>向网格添加工作负载</th>
<td>标记命名空间并重新启动所有 Pod 以添加 Sidecar</td>
<td>标记命名空间 - 无需重启 Pod</td>
<td>为命名空间添加标签并重启所有 Pod 以添加 Sidecar</td>
<td>为命名空间添加标签 - 无需重启 Pod</td>
</tr>
<tr>
<th>增量部署</th>
<th>递增式部署</th>
<td>二进制Sidecar 是否已被注入</td>
<td>渐进式L4 始终开启L7 可通过配置添加</td>
</tr>
<tr>
<th>生命周期管理</th>
<td>代理由应用程序开发人员管理</td>
<td>代理由应用开发人员管理</td>
<td>平台管理员</td>
</tr>
<tr>
<th>资源利用</th>
<td>浪费;必须为每个单独的 Pod 的最坏情况配置 CPU 和内存资源</td>
<td>waypoint 代理可以像任何其他 Kubernetes 部署一样自动扩展。<br>具有多个副本的工作负载可以使用同一个 waypoint而不是每个副本都有自己的边车</td>
<th>资源利用</th>
<td>浪费;必须考虑到每个单独 Pod 的最糟情况并配置最大的 CPU 和内存资源</td>
<td>waypoint 代理可以像任何其他 Kubernetes Deployment 一样自动扩缩容。<br>有多个副本的工作负载可以使用同一个 waypoint而不是每个副本都有自己的 Sidecar</td>
</tr>
<tr>
<th>平均资源成本</th>
@ -126,7 +129,7 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<td>强:每个节点代理仅具有该节点上工作负载的密钥</td>
</tr>
<tr>
<th>被入侵的应用程序 Pod<br>可访问网格密钥</th>
<th>被入侵的应用 Pod<br>可访问网格密钥</th>
<td>可以</td>
<td>不可以</td>
</tr>
@ -146,7 +149,7 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
## 四层与七层功能 {#layer-4-vs-layer-7-features}
在七层处理协议的开销远远高于在四层处理网络数据包的开销。
对于给定的服务,如果您的要求可以在 L4 满足,则可以以更低的成本提供服务网格。
对于给定的服务,如果您的要求可以在 L4 被满足,则可以以明显更低的成本交付服务网格。
### 安全 {#security}
@ -161,25 +164,25 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<tbody>
<tr>
<th>加密</th>
<td>所有 Pod 之间的流量都使用 {{< gloss "mutual tls authentication" >}}mTLS{{< /gloss >}} 加密.</td>
<td>所有 Pod 之间的流量都使用 {{< gloss "mutual tls authentication" >}}mTLS{{< /gloss >}} 加密</td>
<td>不适用Istio 中的服务身份基于 TLS。</td>
</tr>
<tr>
<th>服务到服务的身份验证</th>
<td>{{< gloss >}}SPIFFE{{< /gloss >}},通过 mTLS 证书。Istio 颁发一个短期 X.509 证书,该证书对 Pod 的服务帐户身份进行编码。</td>
<td>通过 mTLS 证书执行 {{< gloss >}}SPIFFE{{< /gloss >}}。Istio 颁发一个短期 X.509 证书,对 Pod 的服务帐户身份进行编码。</td>
<td>不适用Istio 中的服务身份基于 TLS。</td>
</tr>
<tr>
<th>服务到服务的鉴权</th>
<td>基于网络的鉴权,加上基于身份的策略,例如:
<ul>
<li>A 只能接受来自“10.2.0.0/16”的入站呼叫</li>
<li>A 只能接受来自“10.2.0.0/16”的入站调用</li>
<li>A 可以调用 B。</li>
</ul>
</td>
<td>完整政策,例如:
<ul>
<li>只有使用包含 READ 范围的有效最终用户凭A 才能在 B 上执行 GET /foo 操作。</li>
<li>只有使用包含 READ 范围的有效最终用户凭A 才能在 B 上执行 GET /foo 操作。</li>
</ul>
</td>
</tr>
@ -191,7 +194,7 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<tr>
<th>最终用户鉴权</th>
<td>不适用;同上</td>
<td>可以扩展服务到服务的策略,以要求<a href="/zh/docs/reference/config/security/conditions/">具有特定范围、发行者、主体、受众等的最终用户凭证</a><br />可以使用外部鉴权实现完整的用户到资源访问,允许根据外部服务的决策制定每个请求的策略,例如 OPA。</td>
<td>可以扩展服务到服务的策略,以要求<a href="/zh/docs/reference/config/security/conditions/">具有特定范围、发行者、主体、受众等的最终用户凭证</a><br />可以使用外部鉴权实现完整的用户到资源访问,允许根据外部服务的决策制定每个请求的策略,例如 OPA。</td>
</tr>
</tbody>
</table>
@ -220,7 +223,7 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<tr>
<th>指标</th>
<td>仅 TCP发送/接收的字节数、数据包数量等)。</td>
<td>L7 RED 指标:请求率、错误率、请求持续时间(延迟)。</td>
<td>L7 RED 指标:请求率、错误率、请求时间(延迟)。</td>
</tr>
</tbody>
</table>
@ -247,19 +250,19 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<td>除了 TCP 之外,<a href="/zh/docs/reference/config/networking/destination-rule/#ConnectionPoolSettings-HTTPSettings">还有 HTTP 设置</a></td>
</tr>
<tr>
<th>异常值检测</th>
<th>离群值检测</th>
<td>当连接建立/失败时。</td>
<td>请求成功/失败。</td>
</tr>
<tr>
<th>限流</th>
<td><a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/rate_limit_filter#config-network-filters-rate-limit">仅在建立连接时对 L4 连接数据进行限流</a>,具有全局和本地限流选项</td>
<td>使用全局限流选项和本地限流选项,<a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/rate_limit_filter#config-network-filters-rate-limit">仅在建立连接时对 L4 连接数据进行限流</a></td>
<td>根据每个请求,<a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/rate_limit_filter#config-http-filters-rate-limit">L7 请求元数据的限流</a></td>
</tr>
<tr>
<th>超时</th>
<td>仅建立连接(通过断设置来配置连接保持)。</td>
<td>根据要求。</td>
<td>仅建立连接(通过断设置来配置保持活跃的连接)。</td>
<td>按请求。</td>
</tr>
<tr>
<th>重试</th>
@ -269,7 +272,7 @@ Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本
<tr>
<th>故障注入</th>
<td>不适用;无法在 TCP 连接上配置故障注入。</td>
<td>完整的应用程序和连接级故障(<a href="/zh/docs/tasks/traffic-management/fault-injection/">超时、延迟、特定响应码</a>)。</td>
<td>完整的应用和连接级故障(<a href="/zh/docs/tasks/traffic-management/fault-injection/">超时、延迟、特定响应码</a>)。</td>
</tr>
<tr>
<th>流量镜像</th>

View File

@ -9,28 +9,29 @@ test: n/a
Istio 在 2017 年推出时率先提出了基于 Sidecar 的服务网格概念。
该项目从一开始就包含了定义服务网格的功能,包括用于零信任网络的基于标准的双向 TLS、
智能流量路由以及通过指标、日志和链路追踪实现的可观性。
智能流量路由以及通过指标、日志和链路追踪实现的可观性。
从那时起,该项目推动了网格领域的进步,
包括[多集群和多网络拓扑](/zh/docs/ops/deployment/deployment-models/)、
[通过 WebAssembly 实现可扩展性](/zh/docs/concepts/wasm/)、
[Kubernetes Gateway API 的开发](/zh/blog/2022/gateway-api-beta/)
以及使用 [Ambient 模式](/zh/docs/ambient/overview/)将网格基础设施从应用程序开发人员手中移开
以及使用 [Ambient 模式](/zh/docs/ambient/overview/)让应用开发者无需过多关注网格基础设施
以下是我们认为您应该使用 Istio 作为服务网格的几个原因。
## 简单而强大 {#simple-and-powerful}
Kubernetes 有数百种功能和数十种 API但您只需一个命令即可开始使用它
Kubernetes 有数百种功能和数十种 API但您只需一条命令即可开始使用这些
我们构建 Istio 的方式也一样。渐进式公开意味着您可以使用一小部分 API
并且仅在需要时才使用更强大的功能。其他“简单”服务网格花了数年时间才赶上 Istio 在第一天就拥有的功能集。
并且仅在需要时才使用更强大的功能。
其他“简单”服务网格花了数年时间才赶上 Istio 在第一天就拥有的这些功能集。
拥有一个功能而不需要它比需要而没有这项功能更加美好!
所谓有备无患,说的是有一个暂时不需要的功能,总好过需要时却没有。
## Envoy 代理 {#envoy}
从一开始Istio 就由 {{< gloss >}}Envoy{{< /gloss >}} 代理提供支持,
是一个最初由 Lyft 构建的高性能服务代理。Istio 是第一个采用 Envoy 的项目,
Envoy 是一个最初由 Lyft 构建的高性能服务代理。Istio 是第一个采用 Envoy 的项目,
[Istio 团队是第一批外部提交者](https://eng.lyft.com/envoy-7-months-later-41986c2fd443)。
Envoy 后来成为[为 Google Cloud 提供支持的负载均衡器](https://cloud.google.com/load-balancing/docs/https?hl=zh-cn)以及几乎所有其他服务网格平台的代理。
@ -40,16 +41,16 @@ Istio 继承了 Envoy 的所有功能和灵活性,包括使用
## 社区 {#community}
Istio 是一个真正的社区项目。2023 年,
有 10 家公司为 Istio 做出了超过 1,000 项贡献,没有一家公司的贡献超过 25%。
[在此处查看数字](https://istio.devstats.cncf.io/d/5/companies-table?var-period_name=Last%20year&var-metric=contributions&orgId=1))。
有 10 家公司为 Istio 做出了超过 1,000 项贡献,没有一家公司的贡献超过 25%。
[在此处查看统计数据](https://istio.devstats.cncf.io/d/5/companies-table?var-period_name=Last%20year&var-metric=contributions&orgId=1))。
没有其他服务网格项目像 Istio 一样获得业界如此广泛的支持。
## 软件包 {#packages}
我们每次发布时都会向所有人提供稳定的二进制版本,并承诺继续这样做。
我们为[我们的最新版本和许多先前版本](/zh/docs/releases/supported-releases/)发布免费且定期的安全补丁。
我们的许多供应商会支持旧版本,但我们认为,在稳定的开源项目中,
我们为[最新版本和部分旧版本](/zh/docs/releases/supported-releases/)定期发布免费的安全补丁。
我们的许多供应商会支持版本,但我们认为,在稳定的开源项目中,
与供应商合作不应该成为确保安全的必要条件。
## 曾被考虑的替代方案 {#alternatives-considered}
@ -62,12 +63,12 @@ Istio 是一个真正的社区项目。2023 年,
[将流量从 Pod 路由到代理](/zh/blog/2022/merbridge/)。
与使用 `iptables` 相比,这显示出了轻微的性能提升。
为什么不把它用在一切事情上呢?没有人这么做,因为没有人真正能做到。
为什么不把 eBPF 用在所有功能上呢?没有人这么做,因为没有人真正能做到。
eBPF 是一个在 Linux 内核中运行的虚拟机。它专为保证在有限的计算范围内完成的功能而设计,
以避免破坏内核行为,例如执行简单的 L3 流量路由或应用程序可观察性的功能。
以避免破坏内核行为,例如执行简单的 L3 流量路由或应用可观测性的功能。
它不是为像 Envoy 中那样的长期运行或复杂功能而设计的:
这就是为什么操作系统有[用户空间](https://en.wikipedia.org/wiki/User_space_and_kernel_space)
这就是为什么操作系统有[用户空间](https://zh.wikipedia.org/wiki/%E4%BD%BF%E7%94%A8%E8%80%85%E7%A9%BA%E9%96%93)
eBPF 维护者认为它最终可以扩展以支持运行像 Envoy 一样复杂的程序,
但这是一个科学项目,不太可能具有现实世界的实用性。
@ -79,7 +80,8 @@ Envoy 本身并不是多租户的。因此,我们在共享实例中混合来
存在严重的安全性和稳定性问题。由于 Kubernetes 默认可以将任何命名空间中的 Pod 调度到任何节点上,
因此该节点不是合适的租户边界。预算和成本归因也是主要问题,因为 L7 处理的成本比 L4 高得多。
在 Ambient 模式下,我们严格限制 ztunnel 代理进行 L4 处理 - [就像 Linux 内核一样](https://blog.howardjohn.info/posts/ambient-spof/)。
在 Ambient 模式下,我们严格限制 ztunnel 代理进行 L4 处理 -
[就像 Linux 内核一样](https://blog.howardjohn.info/posts/ambient-spof/)。
这大大减少了漏洞的暴露面,并允许我们安全地操作共享组件。
然后,流量被转发到按命名空间运行的 Envoy 代理,这样 Envoy 代理就永远不会是多租户的。
@ -95,7 +97,8 @@ Envoy 本身并不是多租户的。因此,我们在共享实例中混合来
为此Istio 实现了零信任隧道ztunnel组件该组件使用成熟的行业标准加密协议透明高效地提供此功能。
[了解有关 ztunnel 的更多信息](/zh/docs/ambient/overview)。
Istio 旨在成为一个服务网格,它提供一致、高度安全、高效且符合标准的服务网格实现,
提供[一组强大的 L7 策略](/zh/docs/concepts/security/#authorization)、
[与平台无关的工作负载身份](/zh/docs/concepts/security/#istio-identity)
使用[业界验证的 mTLS 协议](/zh/docs/concepts/security/#mutual-tls-authentication) - 在任何环境、任何 CNI甚至跨具有不同 CNI 的集群。
Istio 设计为一个服务网格Istio 可以在任何环境、任何 CNI、甚至跨不同 CNI 的多个集群,
使用[业界验证的 mTLS 协议](/zh/docs/concepts/security/#mutual-tls-authetication)
提供一致、高度安全、高效且合规的服务网格实现,
提供了[一组强大的 L7 策略](/zh/docs/concepts/security/#authorization)、
[与平台无关的工作负载身份](/zh/docs/concepts/security/#istio-identity)。