2.2 服务网格架构

在看了基于微服务的应用所需的各种应用服务后,考虑一下提供这些服务的服务网格的架构。服务网格由两个主要部分组成:控制平面和数据平面。

2.2.1 控制平面

控制平面有几个组件。虽然服务网格的数据面主要由作为容器运行在与应用容器相同的 Pod 中的代理组成,但控制面组件在它们自己的 Pod、节点和相关集群中运行。以下是控制平面的 各种功能

  1. Envoy sidecar 代理的服务发现和配置
  2. 自动化的密钥和证书管理
  3. 用于策略定义和收集遥测数据的 API
  4. 服务网格组件的配置摄取
  5. 管理一个到服务网格的入站连接(入站网关)
  6. 管理来自服务网格的出站连接(出口网关)
  7. 将 sidecar 代理注入那些托管应用程序微服务容器的 Pod、节点或命名空间中

总的来说,控制平面帮助管理员用配置数据填充数据平面组件,这些数据是由控制平面的策略产生的。上述功能 3 的策略可能包括网络路由策略、负载均衡策略、蓝绿部署的策略、金丝雀部署、超时、重试和断路能力。这后三项被统称为网络基础设施服务的弹性能力的特殊名称。最后要说的是与安全相关的策略(例如,认证和授权策略、TLS 建立策略等)。这些策略规则由一个模块解析,该模块将其转换为配置参数,供执行这些策略的数据平面代理中的可执行程序使用。

2.2.2 数据平面

数据平面组件执行三种不同的功能:

  1. 安全的网络功能
  2. 策略执行功能
  3. 可观察性功能

执行上述三种功能的数据平面的主要组件被称为 sidecar 代理。这个七层代理运行在与它执行代理功能的微服务相同的网络命名空间(在这个平台上,就是同一个 Pod)。每个微服务都有一个代理,以确保来自微服务的请求不会绕过其相关的代理,每个代理都作为容器运行在与应用微服务相同的 Pod 中。两个容器都有相同的 IP 地址,并共享相同的 IP 表规则。这使得代理完全控制了 Pod,并 处理所有通过它的流量

第一类功能(安全网络)包括与微服务之间的实际路由或消息通信有关的所有功能。属于这一类的功能是服务发现、建立安全(TLS)会话、为每个微服务及其相关请求建立网络路径和路由规则、验证每个请求(来自服务或用户)以及授权请求。

以建立双向 TLS 会话为例,发起通信会话的代理将与服务网格的控制平面中的模块进行交互,以检查是否需要通过链加密流量并与后端或目标 Pod 建立双向 TLS。使用双向 TLS 启用这个功能需要每个 Pod 有一个证书(即有效的凭证)。由于一个规模较大的微服务应用程序(由许多微服务组成)可能需要数百个 Pod(即使没有通过多个实例对单个微服务进行横向扩展),这可能涉及到管理数百个生命周期短暂的证书。这反过来又要求每个微服务有一个强大的身份,服务网格要有一个访问管理器、一个证书存储和一个证书验证能力。此外,为了支持认证策略,还需要识别和认证两个通信的 Pod 的机制。

其他类型的代理包括拦截客户端调用到应用程序的第一个入口点(第一个被调用的微服务)的 入口代理 和处理微服务对驻扎在平台集群外的应用模块的请求的出口代理。

数据平面执行的第二类功能是通过代理中的配置参数执行控制平面中定义的策略(策略执行服务)。一个例子是使用作为微服务请求一部分的 JWT 令牌中的信息来验证调用服务。另一个例子是使用驻留在代理本身的代码或通过连接到外部授权服务,为每个请求执行访问控制策略。

服务代理与应用服务容器联合执行的第三类功能是收集遥测数据,这有助于监测服务的健康和状态,将与服务相关的日志传输到控制平面中的日志聚合模块,并将必要的数据附加到应用请求头,以方便追踪与特定应用事务相关的所有请求。应用响应由代理机构以返回代码、响应描述或检索数据的形式传达给其相关的调用服务。

服务网格是容器编排平台感知的,与 API 服务器互动,该服务器为安装在各种平台工件(如 Pod、节点、命名空间)中的应用服务提供一个窗口,监测它是否有新的微服务,并自动将 sidecar 容器注入包含这些新微服务的 Pod。一旦服务网格插入 sidecar 代理容器,运维和安全团队就可以对流量执行策略,并帮助保护和运维应用程序。这些团队还可以配置对微服务应用的监控,而不干扰应用的运作。

基础设施、策略执行和可观察性服务的配置可以使用作为 DevSecOps 管道一部分的声明性代码来自动化。虽然开发团队应该全面了解其代码部署的安全和管理细节,但上述服务的自动化为他们提供了更多的时间来集中精力进行高效的开发范式,如代码模块化和结构化。

Copyright © 2017-2022 | 基于 CC 4.0 协议 | jimmysong.io all right reserved. Updated at 2022-03-15 03:24:20

results matching ""

    No results matching ""