Skip to content

Commit

Permalink
update content
Browse files Browse the repository at this point in the history
  • Loading branch information
rootsongjc committed Jan 13, 2021
1 parent 525d4c3 commit e3be95f
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 17 deletions.
2 changes: 1 addition & 1 deletion concepts/envoy.md
Expand Up @@ -5,7 +5,7 @@ reviewers: ["rootsongjc"]

# Envoy

Envoy 是一款由 Lyft 开源的高性能数据和服务代理软件,使用现代 C++ 语言(C++11 以及 C++14)开发,提供四层和七层网络代理能力。2017 年 Envoy 被捐赠给 CNCF 基金会,最终成为 CNCF 继 Kubernetes 和 Prometheus 之后第三个毕业项目。尽管在设计之初 Envoy 没有将性能作为最终的目标,而是更加强调模块化、易测试、易开发等特性,可它仍旧拥有足可媲美 Nginx 等经典代理软件的超高性能。在保证性能的同时,Envoy 也提供了强大的流量治理能力和可观察性。其独创的 xDS 协议则成为了构建 Service Mesh 通用数据面 API(UPDA)的基石。具体来说,Envoy 具有以下的优点:
Envoy 是一款由 Lyft 开源的高性能数据和服务代理软件,使用现代 C++ 语言(C++11 以及 C++14)开发,提供四层和七层网络代理能力。2017 年 Envoy 被捐赠给 CNCF 基金会,最终成为 CNCF 继 Kubernetes 和 Prometheus 之后第三个毕业项目。尽管在设计之初 Envoy 没有将性能作为最终的目标,而是更加强调模块化、易测试、易开发等特性,可它仍旧拥有足可媲美 Nginx 等经典代理软件的超高性能。在保证性能的同时,Envoy 也提供了强大的流量治理能力和可观察性。其独创的 xDS 协议则成为了构建 Service Mesh 通用数据面 API(UDPA)的基石。具体来说,Envoy 具有以下的优点:

* 高性能:C++ 语言实现,基于 Libevent 事件机制以及非阻塞异步 IO,保障性能;
* 易扩展:利用其 L3/L4/L7 筛选器机制,Envoy 可以在各个层次进行功能扩展。包括但不限于:额外代理协议支持、HTTP 流量治理功能扩展等等。且由于其良好的封装和现代 C++ 对各种操作的简化,其开发过程非常友好;此外,Envoy 也提供了基于 WASM 的扩展支持以及基于 Lua 脚本的简单功能扩展;
Expand Down
6 changes: 3 additions & 3 deletions concepts/route.md
Expand Up @@ -176,9 +176,9 @@ spec:
name: http
protocol: HTTP
resolution: DNS
```
```
## 小结
本节主要讲解路由的概念,通过对 VirtualService,DestinationRule 以及 ServiceEntry 三个 CRD 的配置及示例讲解,带读者认识了 Istio 中的路由。

## 参考
- [istio.io/Configuration/Traffic Management](https://istio.io/latest/docs/reference/config/networking/)
- [Traffic Management](https://istio.io/latest/docs/reference/config/networking/)
19 changes: 9 additions & 10 deletions practice/route.md
Expand Up @@ -173,21 +173,21 @@ spec:

## DestinationRule

Destination rule 是 Istio 流量路由功能的重要组成部分。一个 Virtual service 可以看作是如何将流量分发到给定的目标地址,然后调用 Destination rule 来配置分发到该目标地址的流量。Destination rule 在 Virtual service 的路由规则之后起作用(即在 Virtual service `match` -> `route` -> `destination` 之后起作用,此时流量已经分发到真实的 service 上),应用于真实的目标地址。
DestinationRule 是 Istio 流量路由功能的重要组成部分。一个 VirtualService 可以看作是如何将流量分发到给定的目标地址,然后调用 DestinationRule 来配置分发到该目标地址的流量。DestinationRule 在 VirtualService 的路由规则之后起作用即在 VirtualService `match` -> `route` -> `destination` 之后起作用,此时流量已经分发到真实的 service 上,应用于真实的目标地址。

特别地,可以使用 Destination rule 来指定命名的服务子集,例如根据版本对服务的实例进行分组,然后通过 Virtual service 的路由规则中的服务子集将控制流量分发到不同服务的实例中。
特别地,可以使用 DestinationRule 来指定命名的服务子集,例如根据版本对服务的实例进行分组,然后通过 VirtualService 的路由规则中的服务子集将控制流量分发到不同服务的实例中。

Destination rule 允许在调用完整的目标服务或特定的服务子集(如倾向使用的负载均衡模型,TLS 安全模型或断路器)时自定义 Envoy 流量策略。
DestinationRule 允许在调用完整的目标服务或特定的服务子集如倾向使用的负载均衡模型,TLS 安全模型或断路器时自定义 Envoy 流量策略。

Istio 默认会使用轮询策略,此外 Istio 也支持如下负载均衡模型,可以在 Destination rule 中使用这些模型,将请求分发到特定的服务或服务子集。
Istio 默认会使用轮询策略,此外 Istio 也支持如下负载均衡模型,可以在 DestinationRule 中使用这些模型,将请求分发到特定的服务或服务子集。

- Random:将请求转发到一个随机的实例上
- Weighted:按照指定的百分比将请求转发到实例上
- Least requests:将请求转发到具有最少请求数目的实例上

# DestinationRule 示例

下面的 Destination rule 使用不同的负载均衡策略为 my-svc 目的服务配置了3个不同的子集(subset)
下面的 DestinationRule 使用不同的负载均衡策略为 my-svc 目的服务配置了3个不同的子集subset

```yaml
apiVersion: networking.istio.io/v1alpha3
Expand All @@ -203,7 +203,7 @@ spec:
- name: v1 #subset1,将流量转发到具有标签 version:v1 的 deployment 对应的服务上
labels:
version: v1
- name: v2 #subset2,将流量转发到具有标签 version:v2 的 deployment 对应的服务上,指定负载均衡为轮询
- name: v2 #subset2,将流量转发到具有标签 version:v2 的 deployment 对应的服务上指定负载均衡为轮询
labels:
version: v2
trafficPolicy:
Expand All @@ -214,9 +214,9 @@ spec:
version: v3
```

每个子集由一个或多个 `labels` 定义,对应 Kubernetes 中的对象(如 pod )的 key/value 对。这些标签定义在 Kubernetes 服务的 deployment 的 metadata 中,用于标识不同的版本。
每个子集由一个或多个 `labels` 定义,对应 Kubernetes 中的对象如 pod的 key/value 对。这些标签定义在 Kubernetes 服务的 deployment 的 metadata 中,用于标识不同的版本。

除了定义子集外,Destination rule 还定义了该目的地中所有子集的默认流量策略,以及仅覆盖该子集的特定策略。默认的策略定义在 `subset` 字段之上,为 `v1``v3` 子集设置了随机负载均衡策略,在 `v2` 策略中使用了轮询负载均衡。
除了定义子集外,DestinationRule 还定义了该目的地中所有子集的默认流量策略,以及仅覆盖该子集的特定策略。默认的策略定义在 `subset` 字段之上,为 `v1``v3` 子集设置了随机负载均衡策略,在 `v2` 策略中使用了轮询负载均衡。

## Gateway

Expand Down Expand Up @@ -311,7 +311,6 @@ spec:

对于在网格内部但不属于平台服务注册表的服务,使用下面的示例可以将一组在非托管 VM 上运行的 MongoDB 实例添加到 Istio 的注册中心,以便可以将这些服务视为网格中的任何其他服务。
```yaml

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
Expand All @@ -335,7 +334,7 @@ spec:
结合上面给出的示例,这里对 ServiceEntry 涉及的关键属性解释如下:

* `hosts`: 表示与该 ServiceEntry 相关的主机名,可以是带有通配符前缀的 DNS 名称。
* `address`: 与服务相关的虚拟 IP 地址,可以是 CIDR 前缀的形式。
* `addresses`: 与服务相关的虚拟 IP 地址,可以是 CIDR 前缀的形式。
* `ports`: 和外部服务相关的端口,如果外部服务的 endpoints 是 Unix socket 地址,这里必须只有一个端口。
* `location`: 用于指定该服务属于网格内部(MESH_INTERNAL)还是外部(MESH_EXTERNAL)。
* `resolution`: 主机的服务发现模式,可以是 NONE、STATIC、DNS。
Expand Down
6 changes: 3 additions & 3 deletions wg/editorial-board.md
Expand Up @@ -11,11 +11,11 @@ Istio Handbook 编委会成立于 2020 年 2 月 27 日,以下是编委会成
| [GuangmingLuo](https://github.com/GuangmingLuo) | 罗广明 | 百度 |
| [ikingye ](https://github.com/ikingye ) | 叶王 | 百度 |
| [malphi](https://github.com/malphi) | 马若飞 | FreeWheel |
| [rootsongjc](https://github.com/rootsongjc) | 宋净超 | 蚂蚁金服 |
| [rootsongjc](https://github.com/rootsongjc) | 宋净超 | Tetrate |
| [stormgbs](https://github.com/stormgbs) | 高步双 | 阿里云 |
| [sunny0826](https://github.com/sunny0826) | 郭旭东 | 爱乐奇 |
| [wangfakang](https://github.com/wangfakang) | 王发康 | 蚂蚁金服 |
| [zhaohuabing](https://github.com/zhaohuabing) | 赵化冰 | 中兴通讯 |
| [wangfakang](https://github.com/wangfakang) | 王发康 | 蚂蚁集团 |
| [zhaohuabing](https://github.com/zhaohuabing) | 赵化冰 | 腾讯云 |

关于本书任何问题请与编委会联系。

Expand Down

0 comments on commit e3be95f

Please sign in to comment.