基于Istio构建微服务安全加固平台的探索

简介

An open platform to connect, secure, control and observe services.

Istio 是一个由谷歌、IBM 与Lyft共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。

Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。

云平台为使用它们的组织提供了丰富的优势。但是,不可否认,采用云会给 DevOps 团队带来压力。开发人员必须使用微服务来构建可移植性,同时运营商正在管理非常大的混合和多云部署。Istio 允许您连接、保护、控制和观察服务。

在高级别上,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,以透明方式层叠到现有的分布式应用程序上。它也是一个平台,包括 API,它能够集成到任何日志记录平台,或遥测或策略系统。Istio 的多种功能集使您能够成功、高效地运行分布式微服务体系结构,并提供一种统一的方式来保护、连接和监视微服务。

  • 连接(Connect):智能控制服务之间的调用流量,能够实现灰度升级、AB 测试和红黑部署等功能
  • 安全加固(Secure):自动为服务之间的调用提供认证、授权和加密。
  • 控制(Control):应用用户定义的 policy,保证资源在消费者中公平分配。
  • 观察(Observe):查看服务运行期间的各种数据,比如日志、监控和 tracing,了解服务的运行情况。

优势

Istio 使创建部署服务网络变得容易,包括负载平衡、服务到服务身份验证、监视等功能,服务代码很少或没有代码更改。通过将专用侧车代理部署到整个环境中以拦截微服务之间的所有网络通信,然后使用其控制平面功能配置和管理 Istio,从而向服务添加 Istio 支持,其中包括:

  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载平衡。
  • 通过丰富的路由规则、重则、故障转移和故障注入对流量行为进行细粒度控制。
  • 可插拔策略层和配置 API,支持访问控制、速率限制和配额。
  • 群集内所有流量的自动指标、日志和跟踪,包括群集入口和出口。
  • 通过强大的基于身份的身份验证和授权,在群集中保护服务到服务通信。

Istio 专为可扩展性而设计,可满足各种部署需求。它通过拦截和配置网格流量来消除这种情况,如下图所示:

重新理解分布式代理Service Mesh

Service Mesh可以看做是传统代理的升级版,用来解决现在微服务框架中出现的问题,可以把 Service Mesh 看做是分布式的微服务代理。

在传统模式下,代理一般是集中式的单独的服务器,所有的请求都要先通过代理,然后再流入转发到实际的后端。

而在Service Mesh中,代理变成了分布式的,它常驻在了应用的身边(最常见的就是 Kubernetes Sidecar 模式,每一个应用的 Pod 中都运行着一个代理,负责流量相关的事情)。

应用微服务之后,每个单独的微服务都会有很多副本,而且可能会有多个版本,这么多微服务之间的相互调用和管理非常复杂,但是有了 Service Mesh,我们可以把这块内容统一在代理层。

有了看起来四通八达的分布式代理,我们还需要对这些代理进行统一的管理。

手动更新每个代理的配置,对代理进行升级或者维护是个不可持续的事情,在前面的基础上,在加上一个控制中心,一个完整的 Service Mesh 就成了。

管理员只需要根据控制中心的 API 来配置整个集群的应用流量、安全规则即可,代理会自动和控制中心打交道根据用户的期望改变自己的行为。

分布式代理的实现Istio

Istio其实就是Service Mesh 架构的一种实现。

服务之间的通信(比如这里的 Service A 访问 Service B)会通过代理(默认是 Envoy)来进行。而且中间的网络协议支持 HTTP/1.1,HTTP/2,gRPC 或者 TCP,可以说覆盖了主流的通信协议。

控制中心做了进一步的细分,分成了PilotMixerCitadel,它们的各自功能如下:

  • Pilot:为Envoy提供了服务发现,流量管理和智能路由(AB 测试、金丝雀发布等),以及错误处理(超时、重试、熔断)功能。 用户通过 Pilot 的 API 管理网络相关的资源对象,Pilot 会根据用户的配置和服务的信息把网络流量管理变成 Envoy 能识别的格式分发到各个 Sidecar 代理中。
  • Mixer:为整个集群执行访问控制(哪些用户可以访问哪些服务)和 Policy 管理(Rate Limit,Quota 等),并且收集代理观察到的服务之间的流量统计数据。
  • Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS 协议。

基于以上核心架构,重新理解其功能特性:

  • 连接:控制中心可以从集群中获取所有服务的信息,并分发给代理,这样代理就能根据用户的期望来完成服务之间的通信(自动地服务发现、负载均衡、流量控制等)。
  • 安全加固:因为所有的流量都是通过代理的,那么代理接收到不加密的网络流量之后,可以自动做一次封装,把它升级成安全的加密流量。
  • 控制:用户可以配置各种规则(比如 RBAC 授权、白名单、Rate Limit 或者 Quota 等),当代理发现服务之间的访问不符合这些规则,就直接拒绝掉。
  • 观察:所有的流量都经过代理,因此代理对整个集群的访问情况知道得一清二楚,它把这些数据上报到控制中心,那么管理员就能观察到整个集群的流量情况了

引用

posted @ 2020-10-10 00:43  TaylorShi  阅读(322)  评论(0编辑  收藏  举报