[zh] update ops/deployment/deployment-models/ (#15655)

This commit is contained in:
Michael 2024-09-06 10:35:28 +08:00 committed by GitHub
parent c3c211c93b
commit eb74c2c7ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 70 additions and 71 deletions

View File

@ -1,6 +1,6 @@
---
title: 部署模型
description: 描述 Istio 部署中的选择和建议
description: 描述 Istio 部署配置中的各种选项和注意事项
weight: 20
keywords:
- single-cluster
@ -31,22 +31,22 @@ test: n/a
所有这些问题,都代表了 Istio 部署的独立配置维度。
1. 单一或多个集群
1. 单一或多个网络
1. 单或多控制平面
1. 单一或多个网格
1. 单集群或多集群
1. 单网络或多网络
1. 单控制平面或多控制平面
1. 单网格或多网格
所有组合都是可能的,尽管某些组合比其他组合更常见,并且某些组合显然不是很有趣(例如,单集群中有多个网格)。
所有组合都是可能的,尽管某些组合比其他组合更常见,并且某些组合显然不是很有趣(例如,单集群中有多个网格)。
在涉及多个集群的生产环境部署中,部署可能使用多种模式。
例如,基于 3 个集群实现多控制平面的高可用部署,您可以通过使用单控制平面部署 2 个集群,
例如,基于 3 个集群实现多控制平面的高可用部署,您可以通过使用单控制平面部署 2 个集群,
然后再添加第 3 个集群和第 2 个控制平面来实现这一点,最后,
再将所有 3 个集群配置为共享 2 个控制平面,以确保所有集群都有 2 个控制源来确保 HA。
如何选择正确的部署模型,取决于您对隔离性、性能和 HA 的要求。
本指南介绍了配置 Istio 部署时的各种选择和注意事项。
## 集群模型{#cluster-models}
## 集群模型 {#cluster-models}
应用程序的工作负载实例运行在一个或多个{{< gloss "cluster" >}}集群{{< /gloss >}}中。
针对隔离性、性能和高可用的需求,您还可以将集群限制在可用区和地域中。
@ -59,29 +59,29 @@ test: n/a
在 Pod 变化时提供{{< gloss "service endpoint">}}服务端点{{< /gloss >}}信息。
Kubernetes 在每个集群都默认配置此行为,这有助于限制由错误配置引起的潜在风险。
在 Istio 中,您可以配置单一服务网格以跨越任意数量的集群
在 Istio 中,您可以在任意数量的集群之上配置单个服务网格
### 单集群{#single-cluster}
### 单集群 {#single-cluster}
在最简单的情况下,您可以将 Istio 网格限制为单{{< gloss "cluster" >}}集群{{< /gloss >}}。
集群通常在[单网络](#single-network)上运行,但是在不同的基础架构之间会有所不同。
集群和单网络模型包括一个控制平面,这是最简单的 Istio 部署。
在最简单的情况下,您可以将 Istio 网格限制为单{{< gloss "cluster" >}}集群{{< /gloss >}}。
集群通常在[单网络](#single-network)上运行,但是在不同的基础架构之间会有所不同。
单集群和单网络模型包括一个控制平面,这是最简单的 Istio 部署。
{{< image width="50%"
link="single-cluster.svg"
alt="单集群服务网格"
title="单集群"
caption="单集群服务网格"
alt="单集群服务网格"
title="单集群"
caption="单集群服务网格"
>}}
集群部署提供了简单性,但缺少更多的功能,例如,故障隔离和故障转移。
如果您需要高可用性,则应使用多集群。
单集群部署提供了简单性,但缺少更多的功能,例如,故障隔离和故障转移。
如果您需要提供高可用性,则应使用多集群。
### 多集群{#multiple-clusters}
### 多集群 {#multiple-clusters}
您可以将单网格配置为包括多{{< gloss "cluster" >}}集群{{< /gloss >}}。
在单网格中使用{{< gloss "multicluster">}}多集群{{< /gloss >}}部署,
与单一集群部署相比其具备以下更多能力:
您可以将单网格配置为包括多{{< gloss "cluster" >}}集群{{< /gloss >}}。
在单网格中使用{{< gloss "multicluster">}}多集群{{< /gloss >}}部署,
与单集群部署相比,多集群具备以下更多能力:
- 故障隔离和故障转移:当 `cluster-1` 下线,业务将转移至 `cluster-2`
- 位置感知路由和故障转移:将请求发送到最近的服务。
@ -153,37 +153,37 @@ Istio 本质上是多集群感知的,但 Kubernetes 不是(至少现在不
`MCS` 控制器一起工作,甚至充当整个网格的 `MCS` 控制器。
{{< /tip >}}
## 网络模型{#network-models}
## 网络模型 {#network-models}
Istio 使用网络的简化定义来指代具有直接可达性的工作负载实例。
例如,默认情况下,单集群中的所有工作负载实例都在同一网络上。
例如,默认情况下,单集群中的所有工作负载实例都在同一网络上。
许多生产系统需要多个网络或子网来实现隔离和高可用性。
Istio 支持跨多种网络拓扑扩展服务网格。
这使您可以选择适合您现有网络拓扑的网络模型。
### 单网络{#single-network}
### 单网络 {#single-network}
在最简单的情况下,服务网格在单个完全连接的网络上运行。
在单网络模型中,
在单网络模型中,
{{< gloss "workload instance" >}}工作负载实例{{< /gloss >}}都可以直接相互访问,
而无需 Istio 网关。
网络模型允许 Istio 以统一的方式在网格上配置服务使用者,
单网络模型允许 Istio 以统一的方式在网格上配置服务使用者,
从而能够直接处理工作负载实例。
{{< image width="50%"
link="single-net.svg"
alt="单网络服务网格"
title="单网络"
caption="单网络服务网格"
alt="单网络服务网格"
title="单网络"
caption="单网络服务网格"
>}}
### 多网络{#multiple-networks}
### 多网络 {#multiple-networks}
您可以配置单个服务网格跨多个网络,这样的配置称为**多网络**。
多网络模型提供了单一网络之外的以下功能:
相比单网络,多网络模型提供了以下更多功能:
- **服务端点**范围的 IP 或 VIP 重叠
- 跨越管理边界
@ -216,18 +216,18 @@ Istio 使用**分区服务发现**为消费者提供{{< gloss "service endpoint"
出于这个原因Istio 过滤了无代理服务的网络外端点。
{{< /tip >}}
## 控制平面模型{#control-plane-models}
## 控制平面模型 {#control-plane-models}
Istio 网格使用{{< gloss "control plane">}}控制平面{{< /gloss >}}来配置网格内工作负载实例之间的所有通信。
您可以复制控制平面,工作负载实例可以连接到任何一个控制平面实例以获取其配置。
在最简单的情况下,可以在单集群上使用控制平面运行网格。
在最简单的情况下,可以在单集群上使用控制平面运行网格。
{{< image width="50%"
link="single-cluster.svg"
alt="单控制平面服务网格"
title="单控制平面"
caption="单控制平面服务网格"
alt="单控制平面服务网格"
title="单控制平面"
caption="单控制平面服务网格"
>}}
像这样的集群,具有自己的本地控制平面,被称为{{< gloss "primary cluster" >}}主集群{{< /gloss >}}。
@ -268,7 +268,7 @@ Kubernetes API 服务器接收其配置(即 `Service` 和 `ServiceEntry`、
云供应商的托管控制平面是外部控制平面的典型示例。
为了获得高可用性,您应该在多个集群、区或地域之间部署控制平面。
为了获得高可用性,您应该跨集群、跨可用区或跨地域部署多个控制平面。
{{< image width="75%"
link="multi-control.svg"
@ -288,13 +288,13 @@ Kubernetes API 服务器接收其配置(即 `Service` 和 `ServiceEntry`、
以下列表按可用性对控制平面部署进行了排名:
- 每个地域一个集群(**最低可用性**
- 每个地域一个集群(**可用性最低**
- 每个地域多个集群
- 每个区域一个集群
- 每个区域多个集群
- 每个集群(**最高可用性**
- 所有集群(**可用性最高**
### 多控制平面的端点发现{#endpoint-discovery-with-multiple-control-planes}
### 多控制平面的端点发现 {#endpoint-discovery-with-multiple-control-planes}
Istio 控制平面通过为每个代理提供服务端点列表来管理网格内的流量。
为了使其在多集群场景中工作,每个控制平面都必须观察来自每个集群中 API 服务器的端点。
@ -306,7 +306,7 @@ Istio 控制平面通过为每个代理提供服务端点列表来管理网格
{{< image width="75%"
link="endpoint-discovery.svg"
caption="Primary clusters with endpoint discovery"
caption="具有端点发现特性的主集群"
>}}
默认情况下Istio 将在每个集群的端点之间均匀地负载均衡请求。
@ -324,19 +324,19 @@ Istio 控制平面通过为每个代理提供服务端点列表来管理网格
在任意情况下,都应阻止跨集群负载均衡。
可以使用外部负载均衡器将外部流量路由到一个集群或另一个集群。
## 身份和信任模型{#identity-and-trust-models}
## 身份和信任模型 {#identity-and-trust-models}
在服务网格中创建工作负载实例时Istio 会为工作负载分配一个{{< gloss "identity">}}身份标识{{< /gloss >}}。
证书颁发机构CA创建并签名身份标识的证书以用于验证网格中的使用者身份
您可以使用其公钥来验证消息发送者的身份。
**trust bundle** 是一组在 Istio 网格使用的所有 CA 公钥的集合。
使用 **trust bundle** 任何人都可以验证来自该网格的任何消息发送者。
**信任包(trust bundle** 是一组在 Istio 网格使用的所有 CA 公钥的集合。
使用**信任包**任何人都可以验证来自该网格的任何消息发送者。
### 网格内的信任{#trust-within-a-mesh}
### 网格内的信任 {#trust-within-a-mesh}
在单一 Istio 网格中Istio 确保每个工作负载实例都有一个表示自己身份的适当证书,
以及用于识别网格及网格联邦中所有身份信息的 **trust bundle**
以及用于识别网格及网格联邦中所有身份信息的**信任包**
CA 只为这些身份标识创建和签名证书。该模型允许网格中的工作负载实例通信时相互认证。
{{< image width="50%"
@ -346,13 +346,12 @@ CA 只为这些身份标识创建和签名证书。该模型允许网格中的
caption="具有证书颁发机构的服务网格"
>}}
### 网格之间的信任{#trust-between-meshes}
### 网格之间的信任 {#trust-between-meshes}
如果网格中的服务需要另一个网格中的服务,则必须在两个网格之间联合身份和信任。
要在不同网格之间联合身份和信任,必须交换网格的 **trust bundle**
要在不同网格之间联合身份和信任,必须交换网格的**信任包**
您可以使用像 [SPIFFE 信任域联邦](https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Federation.md)
之类的协议手动或自动交换 **trust bundle**,将 **trust bundle**
导入网格后,即可为这些身份配置本地策略。
之类的协议手动或自动交换**信任包**,将**信任包**导入网格后,即可为这些身份配置本地策略。
{{< image width="50%"
link="multi-trust.svg"
@ -361,26 +360,26 @@ CA 只为这些身份标识创建和签名证书。该模型允许网格中的
caption="具有证书颁发机构的多服务网格"
>}}
## 网格模型{#mesh-models}
## 网格模型 {#mesh-models}
Istio 支持将您的所有服务都放在一个{{< gloss "service mesh" >}}服务网格{{< /gloss >}}中,
或者将多个网格联合在一起,这也称为{{< gloss "multi-mesh">}}多网格{{< /gloss >}}。
### 单网格{#single-mesh}
### 单网格 {#single-mesh}
最简单的 Istio 部署是单网格。网格内,服务名称是唯一的。例如,
最简单的 Istio 部署是单网格。网格内,服务名称是唯一的。例如,
在命名空间 `foo` 中只能存在一个名为 `mysvc` 的服务。
此外,工作负载实例具有相同的标识,因为服务帐户名称在命名空间中也是唯一的,
就像服务名称一样。
网格可以跨越[一个或多个集群](#cluster-models)和[一个或多个网络](#network-models)。
网格内部,[命名空间](#namespace-tenancy)用于[多租户](#tenancy-models)。
单网格可以跨越[一个或多个集群](#cluster-models)和[一个或多个网络](#network-models)。
网格内部,[命名空间](#namespace-tenancy)用于[多租户](#tenancy-models)。
### 多网格{#multiple-meshes}
### 多网格 {#multiple-meshes}
通过{{< gloss "mesh federation">}}网格联邦{{< /gloss >}}可以实现多网格部署。
与单网格相比,多网格具备以下更多功能:
与单网格相比,多网格具备以下更多功能:
- 组织边界:业务范围
- 服务名称或命名空间复用:比如 `default` 的使用
@ -401,26 +400,26 @@ Istio 支持将您的所有服务都放在一个{{< gloss "service mesh" >}}服
联合两个不共享同一{{< gloss "trust domain">}}信任域{{< /gloss >}}的网格时,必须{{< gloss "mesh federation">}}
联合{{< /gloss >}}身份标识和它们之间的 **trust bundles**。有关概述请参考[多信任域](#trust-between-meshes)部分。
## 租户模型{#tenancy-models}
## 租户模型 {#tenancy-models}
在 Istio 中,**租户**是一组用户,它们共享对一组已部署工作负载的公共访问权限。
通常,您可以通过网络配置和策略将工作负载实例与多个租户彼此隔离。
您可以配置租户模型以满足以下组织隔离要求:
您可以配置多个租户模型以满足以下组织隔离要求:
- 安全
- 策略
- 容量(Capacity)
- 成本(Cost)
- 容量
- 成本
- 性能
Istio 支持种类型的租赁模型:
Istio 支持种类型的租赁模型:
- [命名空间租赁](#namespace-tenancy)
- [集群租赁](#cluster-tenancy)
- [网格租赁](#mesh-tenancy)
### 命名空间租赁{#namespace-tenancy}
### 命名空间租赁 {#namespace-tenancy}
集群可以在多个团队之间被共享,每个团队使用不同的命名空间。
您可以授予团队权限仅将其工作负载部署到给定命名空间或一组命名空间。
@ -436,9 +435,10 @@ Istio 支持两种类型的租赁模型:
caption="具有两个命名空间和一个公开服务的服务网格"
>}}
命名空间租赁可以扩展到单个集群之外。
在[多集群](#multiple-clusters)场景中,不同集群中名字相同的命名空间,被认为是相同的命名空间。
例如,集群 `cluster-1` 中命名空间 `foo` 下的服务 `Service B` 与集群 `cluster-2` 中命名空间 `foo` 下的服务 `Service B`
命名空间租赁可以扩展到单个集群之外。在[多集群](#multiple-clusters)场景中,
不同集群中名字相同的命名空间,被认为是相同的命名空间。
例如,集群 `cluster-1` 中命名空间 `foo` 下的服务 `Service B` 与集群
`cluster-2` 中命名空间 `foo` 下的服务 `Service B`
指向的是相同的服务Istio 会合并这些服务端点,用于服务发现和负载均衡。
{{< image width="50%"
@ -448,7 +448,7 @@ Istio 支持两种类型的租赁模型:
caption="具有相同命名空间的多集群服务网格"
>}}
### 集群租户模型{#cluster-tenancy}
### 集群租户模型 {#cluster-tenancy}
Istio 还支持使用集群作为租赁单位。在这种情况下,您可以为每个团队提供一个专用集群或一组集群来部署其工作负载。
集群的权限通常仅限于拥有它的团队和成员。您可以设置各种角色以实现更精细的控制,例如:
@ -458,12 +458,11 @@ Istio 还支持使用集群作为租赁单位。在这种情况下,您可以
要在 Istio 中使用集群租用,
您需要为每个团队的集群配置自己的{{< gloss "control plane" >}}控制平面{{< /gloss >}}
允许每个团队管理自己的配置。
或者,您可以使用 Istio 将一组集群实现为单个租户,
允许每个团队管理自己的配置。或者,您可以使用 Istio 将一组集群实现为单个租户,
使用{{< gloss "remote cluster" >}}从集群{{< /gloss >}}或多个同步的{{< gloss "primary cluster" >}}主集群{{< /gloss >}}。
有关详细信息,请参阅[控制平面模型](#control-plane-models)。
### 网格租赁{#mesh-tenancy}
### 网格租赁 {#mesh-tenancy}
在具有网格联邦的多网格部署中,每个网格都可以用作隔离单元。