authors | reviewers | ||
---|---|---|---|
|
|
适配器(adapter)是 Istio 策略和遥测组件 Mixer 的插件, 可使其与一组开放式基础架构后端交互,这些后端可提供核心功能,例如日志记录、监控、配额、ACL 检查等等。运行时所使用的精确的适配器集合是通过配置确定的,并可以针对新的或定制的基础架构后端轻松扩展。
注释是指附加到 Kubernetes annotation 的资源,例如 pod。有关 Istio 特定注释的有效列表,请参见 Resource Annotations。
属性控制着网格中服务运行时的行为,是一堆有名字的、有类型的元数据,它们描述了 ingress 和 egress 流量,以及这些流量所在的环境。 一个 Istio 属性包含了一段特定的信息,例如 API 请求的错误代码、API 请求的延迟或 TCP 请求的原始 IP 地址。例如:
request.path: xyz/abc
request.size: 234
request.time: 12:34:56.789 04/17/2017
source.ip: 192.168.0.1
destination.workload.name: example
属性被 Istio 的策略和遥测功能所使用。
在实现分布式追踪时,需要采用一种传输机制(wire protocol)来在上下游服务(进程)之间传递跟踪的上下文信息(SpanContext),以将上下游服务中生成的 Span 关联到同一个 Trace 上。需要传递的上下文内容包括 TraceId、Span Id 等内容。 B3 HTTP Header是分布式追踪系统 Zipkin 采用 HTTP header 来传递SpanContext 的传输机制,其内容采用16进制字符进行编码,上游服务在对下游服务进行 HTTP 方法调用时,会将相应的 B3 HTTP Header 加入到 HTTP 请求头部中,以将 SpanContext 传递到下游服务。
集群是运行容器化应用程序的一组计算节点。 通常,组成集群的计算节点彼此可以直接连接。 集群通过规则或策略限制外部访问。
控制平面是一组系统服务,这些服务配置网格或者网格的子网来管理工作负载实例之间的通信。 单个网格中控制平面的所有实例共享相同的配置资源。
自定义资源定义 (CRD) 是默认的 Kubernetes API 扩展。Istio 使用 Kubernetes CRD API 来配置,即使是非 Kubernetes 环境下部署的 Istio。
数据平面是网格的一部分,直接控制工作负载实例之间的通信。Istio 的数据平面使用 Sidecar 代理去调节和控制服务网格中发送和接受的流量。
目标服务(destination)是 sidecar 代表一个源服务 工作负载与之打交道的远程上游服务。这些上游服务可以有多个服务版本,sidecar 根据路由选择对应的版本。
分布式追踪是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
Envoy 是在 Istio 里使用的高性能代理,用于为所有服务网格里的服务调度进出的流量。了解更多关于 Envoy。
故障域是计算环境中物理或者逻辑的一部分,当关键设备或服务遇到问题时,它也会受到负面影响。 对于 Istio 部署而言,故障域可能包含平台中的多个可用性区域。
为连接、安全加固、控制和观察服务的开放平台。开放平台就是指它本身是开源的,服务对应的是微服务,也可以粗略地理解为单个应用。
身份是基本的安全基础结构概念。Istio 的身份模型是基于第一阶级的工作负载身份。在服务之间的通信开始时,双方使用身份信息交换证书来实现相互认证的目的。
客户端根据其安全的命名信息检查服务器的身份,以便确定服务器是否被授权运行服务。
服务器检查客户端的身份,以确定客户端可以访问的信息。服务器基于客户端的身份,来确定配置的策略。
通过使用身份,服务器可以审核访问信息的时间和特定客户端访问的信息内容。还可以根据客户使用的服务向他们收费,并拒绝任何未付款的客户访问服务。
Istio 身份模型非常灵活,粒度足以代表单个用户、单个服务,或者一组服务。在没有第一阶级服务身份的平台,Istio 可以使用其他的身份为服务实例进行分组,例如服务名称。
Istio 在不同的平台上支持以下服务身份:
- Kubernetes: Kubernetes 服务账户
- GKE/GCE: GCP 服务账户
- GCP: GCP 服务账户
- AWS: AWS IAM 用户/角色 账户
- 本地 (非 Kubernetes):用户账户、客户服务账户、服务名称、Istio 服务账户,或者 GCP 服务账户。 客户服务账户指现有的服务账户,就像客户身份目录中管理的身份。
通常,信任域指定身份所属的网格。
MOSN 是一款使用 Go 语言开发的网络代理软件。 MOSN 作为云原生的网络数据平面,旨在为服务提供多协议、模块化、智能化、安全的代理能力。MOSN 可以与任何支持 xDS API 的 Service Mesh 集成,亦可以作为独立的四、七层负载均衡,API Gateway、云原生 Ingress 等使用。
托管控制平面是一个为客户提供管理的控制平面。托管控制平面降低了用户部署的复杂性,并通常保证一定水平的性能和可用性。
网格联邦是在网格之间公开服务的一种行为,并且能跨越网格边界进行通信。每一个网格或许会公开其一部分的服务,使一个或多个其他网格使用此公开的服务。您可以使用网格联邦来启用网格之间的通信,可参阅多个网格部署。
Micro-segmentation 是一种安全技术,可在云部署中创建安全区域,使组织能够将工作负载彼此隔离,并分别保证它们的安全。
Mixer 是 Istio 里的一个组件,它负责增强服务网格里的访问控制和使用策略。它还负责收集来自 sidecar 和其他服务的遥测数据。
Handler 相当于配置完备的 Mixer 适配器。一个适配器二进制文件可以被不同配置使用,这些配置也可以称为 handler。在 Mixer 运行时,Mixer 将 instances 路由到一个或多个 handlers。
Mixer Instance 表示通过检查一组请求属性 ,并结合使用者提供的配置而生成的数据块。Mixer Instance 在随请求到达各种基础后端设施的途中,会被传递给各个处理程序。
Multi-mesh 是由两个或多个服务网格组成的部署模型。每个网格都有独立的命名管理和身份管理,但是您可以通过网格联邦来暴露网格之间的服务, 最终构成一个多网格部署。
Multicluster 是一种部署模型,由具有多个集群的网格组成。
双向 TLS 通过内置身份和凭证管理,提供强大的服务到服务身份验证。 了解更多关于双向 TLS 身份验证。
OpenTracing 是一个分布式追踪标准规范,它定义了一套通用的数据上报接口,提供平台无关、厂商无关的 API,要求各个分布式追踪系统都来实现这套接口,使得开发人员能够方便的添加(或更换)追踪系统的实现。
Operator 是打包、部署和管理 Kubernetes 应用程序的一种方法。有关更多信息,请参见 operator pattern。
Pilot 是 Istio 里的一个组件,它控制 sidecar 代理,负责服务发现、负载均衡和路由分发。
Pod 中包含了一个或多个共享存储和网络的容器 (例如 Docker 容器), 以及如何运行容器的规范。Pod 是 Istio 的 Kubernetes 部署中的一个工作负载实例。
您在虚拟服务中配置的路由规则,遵循服务网格定义了请求的路径。 使用路由规则,您可以定义将寻址到虚拟服务主机的流量路由到指定目标的工作负载。 路由规则使您可以控制流量,以实现如 A/B 测试、金丝雀发布以及按百分比分配流量的分阶段发布等任务。
服务网格 (简称 网格 )是一个可管理、可观测以及支持工作负载实例之间进行安全通信的基础设施层。
在一个网格中,服务名称与命名空间组合具有唯一性。例如,在一个多集群的网格中,cluster-1
集群的 foo
命名空间中的 bar
服务和 cluster-2
集群的 foo
命名空间中的 bar
服务被认为是同一个服务。
由于服务网格会共享这种标识,因此同一服务网格内的工作负载实例可以相互认证通信。
Service Endpoint 是一个 service 的网络可达表现形式。Service endpoint 由工作负载实例暴露,但并不是所有的服务都有 service endpoint。
Service Name 是 service 唯一的名字,是 service 在 service mesh 里的唯一标识。一个服务不应该被重命名,或者维护它的标识,每一个服务名都是唯一的。一个服务有多个 versions,但是服务名是与版本独立的。
Secure Naming 提供一个 service name 到 workload instance principals 的映射,这个工作负载实例被授权运行一个 workload instances,实现一个 service。
Service Operator 是在 service mesh 里管理 service 的代理,它们通过操纵配置状态并通过各种仪表板监视服务的运行状况来管理这些服务。
创建服务的 pilot-agent。
Istio 维护了一个内部服务注册表 (service registry),它包含在服务网格中运行的一组服务及其相应的服务 endpoints。Istio 使用服务注册表生成 sidecar 配置。
Istio 不提供服务发现,尽管大多数服务都是通过 Pilot adapter 自动加入到服务注册表里的,而且这反映了底层平台(Kubernetes、Consul、plain DNS)的已发现的服务。还有就是,可以使用 ServiceEntry
配置手动进行注册。
区分一系列服务,通常通过工作负载二进制文件的不同版本来帮助确定。在一些场景多服务版本是需要的,比如 A/B 测试和金丝雀发布。
使用服务名称标识一组具有关联行为的服务服务网格,并使用这些名称应用 Istio 策略(例如负载均衡和路由)。服务通常由一个或多个服务 Endpoint 实现,并且或许包含多个服务版本。
Sidecar proxy 简称 sidecar。Sidecar 为在应用程序旁运行的单独的进程,它可以为应用程序添加许多功能,而无需在应用程序中添加额外的第三方组件,或修改应用程序的代码或配置。
Source 是 sidecar 代理的下游客户端。在服务网格里,source 通常是一个工作负载,但是入口流量的 source 有可能包含其他客户端,例如浏览器,或者一个移动应用。
用于记录请求范围内的信息。例如,一次远程方法调用的执行过程和耗时。它是我们排查系统性能问题的利器。维基百科中对 Tracing 的定义是,在软件工程中,Tracing 指使用特定的日志记录程序的执行信息;区别于 Logging 和 Metrics,Tracing 记录单个请求的处理流程,其中包括服务调用和处理时长等信息。
TLS 源(TLS Origination)发生于一个被配置为接收内部未加密 HTTP 连接的 Istio 代理(sidecar 或 egress gateway)加密请求并使用简单或双向 TLS 将其转发至安全的 HTTPS 服务器时。这与 TLS 终止相反,后者发生于一个接受 TLS 连接的 ingress 代理解密 TLS 并将未加密的请求传递到网格内部的服务时。
信任域对应于系统的信任根,并且是工作负载标识的一部分。
Istio 使用信任域在网格中创建所有身份。每个网格都有一个专用的信任域。
例如在 spiffe://mytrustdomain.com/ns/default/sa/myname
中标示网格的子字符串是:mytrustdomain.com
。此子字符串是此网格的信任域。
更改 Istio 网格的信任域的过程。
Operators 部署的二进制文件,用于提供服务网格应用的一些功能。工作负载有自己的名称,命名空间,和唯一的 id。这些属性可以通过下面的属性被策略配置和遥测配置使用:
source.workload.name
,source.workload.namespace
,source.workload.uid
destination.workload.name
,destination.workload.namespace
,destination.workload.uid
在 Kubernetes 环境中,一个工作负载通常对应一个 Kubernetes deployment, 并且一个工作负载实例对应一个独立的被 deployment 管理的 pod。
工作负载实例是工作负载的一个二进制实例化对象。 一个工作负载实例可以开放零个或多个服务 endpoint,也可以消费零个或多个服务。
工作负载实例具有许多属性:
- 名称和命名空间
- 唯一的 ID
- IP 地址
- 标签
- 主体
通过访问 source.*
和 destination.*
下面的属性,在 Istio 的策略和遥测配置功能中,可以用到这些属性。
工作负载实例主体是工作负载实例的可验证权限。Istio 的服务到服务身份验证用于生成工作负载实例主体。默认情况下,工作负载实例主体与 SPIFFE ID 格式兼容。
在 policy
和 telemetry
配置中用到了工作负载实例主体,对应的属性是 source.principal
和 destination.principal
。