Service Mesh 的一些基础概念#

说好了,这书名叫《xyz内幕》,为何还要说基础概念? 好吧,为了:

  • 内容体系完整性

  • 统一后面用到的术语

服务调用关系概念#

Upstream & Downstream#

从 Envoy 的角度看:

  • upstream: 流量方向中的角色:[downstream] –> envoy –> [upstream]。这里我避免用中文词 上游/下游,因为概念上没有统一,也容易和英文误解。

  • downstream: 流量方向中的角色:[downstream] –> envoy –> [upstream]

警告

需要注意的是,upstream 与 downstream 是个相对于观察者的概念。

如场景: service A ⤜调用➙ service B ⤜调用➙ service C :

  • 如果站在 service C 上,我们在把 service B 叫 downstream;

  • 如果站在 service A 上,我们把 service B 叫 upstream。

Upstream Cluster & Downstream Cluster#

Upstream Cluster / Downstream Cluster 主要是 Envoy 中的概念。

一般来说,一个 Upstream / Downstream 指代一个具体的主机(Host)。而 Upstream Cluster / Downstream Cluster 是指运行同一服务的,同构的的一群主机。在 k8s 环境下,一般就是对应同一 k8s Deployment 的所有 POD 了。

Inbound & Outbound#

从 K8s 的 pod 的角度看:

Inbound与Outbound概念

图:Inbound与Outbound概念 用 Draw.io 打开#

有3个服务,自下而上地调用。

  1. client

  2. fortio-server:8080

  3. fortio-server-l2:8080

其实调用关系就是:

client ➔ fortio-server:8080 ➔ fortio-server-l2:8080

上图这样排版也是想直接反映 upstream 和 downstream 字面义。图中需要解释的,或者只有 inbound / outbound 这两个术语。首先,什么是 bound

  • bound: 字面意为边界。有人译为站(名词)。而在现实的 k8s + istio 环境中,可以理解为 pod / service

  • inbound: 有人译为入站。而在现实的 k8s + istio 环境中,可以理解为流量从 pod 外部进入 pod。即服务的被调用流量

  • outbound: 有人译为出站。而在现实的 k8s + istio 环境中,可以理解为流量从 pod 内部输出到 pod 外部。

需要注意的是,对于同一个调用请求。他可以是调用者 service 的 outbound,同时也是被调用者的 inbound。如上图。