Flomesh介绍

本文概要的介绍Flomesh是什么、功能清单、对比与差异,以及我们为什么构建了Flomesh。阅读大该需要5分钟。本文是系列文章中第一篇,全系列包括大概90篇文章,以功能为线索介绍了Flomesh如何在企业环境下从全局视角管理应用流量。

直接开始

如果在了解这些概念之前就想体验Flomesh,可以从这里开始

Flomesh是什么

Flomesh是一个Service Mesh的实现。到目前为止,并没有一个通用的说法定义什么是Service Mesh,虽然整个社区都约定俗成的使用着Service Mesh的叫法。我们把Flomesh叫做“Service Mesh的实现”,主要是基于这样的一个原因:

大概在2017年,在实践中客户要求我们协助部署istio,用于管理该客户内部超过100个微服务之间的流量。但是在实际工作过程中,我们发现虽然istio所描述的功能是客户所期 望的;但是在实现上,istio并不能充分的满足客户的需求,并且随着类似需求的客户的增多,需求的范围进一步扩大,istio的局限也更加明显,我们按照客户对istio的期 望,参考istio和linkerd自己实现了一系列的功能,并最终形成Flomesh这个产品。因为istio和linkerd被认为是Service Mesh的代表,所以我们称Flomesh是Service Mesh的一个实现。

我们对于Service Mesh的定义是:Service Mesh是软件定义的应用程序网络,是一种SDN;Service Mesh包括数据平面和控制平面;通过网关的编排,Service Mesh实现了应用流量的管理。

如果用一句话介绍Flomesh的话,我们会这样介绍:

Flomesh是一个ServiceMesh软件:随着分布式架构的普及,在传统的7层网络之上,应用间互相访问的流量形成一个新的网络,Flomesh是这一层网络流量的管理工具。

Flomesh的功能

让我们从功能角度展开理解Flomesh,Flomesh主要实现了如下四个方面的功能:流量管理,安全和访问控制,微服务与服务治理,API管理。

mindmap

背景与问题

过去十多年中,随着x86硬件的普及、云计算的推广、以及大型互联网在应用架构上的技术优势被广为认可和推崇,分布式架构从SOA演化到了目前流行的微服务。这种“大问题分解成小问题”的思路,以及各种配套软件框架的普及,在满足了社区对应用规模和灵活度增长的同时,衍生出了很多新的问题,主要体现在:

  • 组织内部的服务、微服务呈现加速增长的趋势,但是对于这些服务之间的关联、依赖,缺乏统一的视图。组织内到底有多少“服务”,之间的关系如何,是一个日益加深的问题
  • 传统的企业安全管理思路之一是“边界管理”,但是在分布式“服务”激增的背景下,确定边界变得非常困难;“边界模糊”进而带来的是信息安全管理难度变大
  • 传统以硬件为基础的网络流量管理,在云计算以及容器日益普及的背景下,已经无法满足软件交付快速迭代、配置频繁更新的要求
  • 越来越多的“服务”,缺乏统一的服务质量体系;进而导致缺乏有效的整体“服务质量为基础”的生产绩效体系

功能组一:流量管理

随着微服务和云的广为使用,现代组织的内部网络相比于传统的网络通常有如下的新增特征:

  • 软件定义网络(SDN)的采用。无论是云上,还是微服务集群内部,甚至是整个组织内部,SDN被广泛采用
  • 私有网络向公有网络和混合网络的演进。一个组织所涉及的网络,正在从单纯的“内部网络”演化到跨地域、跨数据中心,演化到跨云;链路混合了固定链路(比如专线)和动态链路(比如互联网链路)
  • 动态网络的产生。在某些给定范围内,IP地址的动态分配成为常态 -- 通常IP地址的动态分配常见于桌面系统和办公网络,但是随着微服务和容器的规模化使用,数据中心内容器、虚拟机的生命周期通常不确定,IP地址的变化变得频繁,相应的路由规则以及访问控制规则相应的也需要频繁的变更

在这个背景下,应用程序之间的流量需要面对如下一些常见的网络功能:

  • 代理。包括四层代理、七层代理;HTTP代理、Socks代理等
  • 负载均衡
  • 协议转换。通常对于组织外部的接口,都是REST(HTTP/HTTPS+JSON/XML)的,但是内部通常协议多样,包括SOAP、gRPC、Dubbo RPC、raw socket等,他们之间需要互相转换
  • 路由与分流。在应用程序网络里,数据的路由通常有这样几种:
    • 基于协议的。比如请求目标IP地址、端口等
    • 基于元数据的。比如基于HTTP头信息
    • 基于内容的,也叫CBR(Content Based Routing)。比如消息是用json表达order信息,那么根据order的数额不同把请求路由到不同的目标服务
  • 流量复制。流量复制通常用于把特定的请求转发到分析系统,或者转发到测试系统
  • 缓存与访问加速。主要可以分为两类:
    • 下行数据缓存。功能类似CDN,把特定请求的数据缓存下来,后续的请求就可以直接访问,提高访问速度
    • 上行数据缓存。功能类似消息队列,请求方把消息发到Flomesh后,Flomesh缓存这个请求,后续逐渐投递到目标地址。这种异步性质的操作,主要用于通知类消息

如上的网络功能需求,衍生了和推动了网络管理新的需求,比如:

  • 路由规则的动态设定。网络在局部范围内的频繁变动,带来了动态设定的需求。随着SDN在二层和三层的成熟,四层和七层网络的动态可编程设定,成为急迫的需求;路由是其中的核心诉求之一,主要解决“当新的节点加入时,流量如何到达新的节点”的问题
  • 网络监控。应用层的网络,相比传统网络的监控,多了很多监控的指标,不仅有网络特征的,也有应用特征的指标需要监控;同时这些指标需要从物理的指标,映射成应用层逻辑上的指标,实现应用逻辑上的网络质量监控。而随着网络动态变化,这种监控在传统网络监控基础之上,需要面向应用层扩展,实现应用网络质量的度量与管理
  • 可视化。从传统的网络拓扑可视化,扩展到应用间访问链路、服务依赖的可视化;流量的可视化也从传统的整体流量,演化成可以细分的应用间、服务间的流量可视化

所有如上这些,您都可以在Flomesh中找到明确的答案和解决办法。

功能组二:安全与访问控制

流量管理主要解决了应用网络的连通问题,在实现了连通之后,“安全”成为首要的需求。在Flomesh团队看来,“安全”是新的网络环境下的首要和最重要需求。Flomesh参考了Google的BeyondCorp的零信任网络模型,主要要实现如下几个方面的安全功能:

  • 身份验证。Flomesh可以用多种方式对网格上的流量进行身份验证。按照零信任网络的设计理念,“所有的流量都应该是已知流量”。Flomesh可以支持这种设计理念下的身份认证与验证

  • 访问控制。在传统的网络访问控制基础上,Flomesh针对微服务及云环境,侧重实现了如下几个方面的访问控制:

    • 动态访问控制规则。随着动态网络路由的添加,新增节点的访问控制如何实现,成为新的管理问题。传统的基于防火墙的访问控制,因为变更频繁变得只能针对网段做限制,而无法针对每个IP做访问规则的频繁变更。Flomesh访问控制主要解决“新增节点网络通了,谁可以访问这个节点”以及“节点删除了,原有的访问权限需要收回”这样的问题
    • 基于身份的访问控制。传统的网络流量管理,是基于二层和三层的网元信息(MAC地址和IP地址)的管理,但是随着SDN的规模使用,以及高度动态的容器网络的使用,原有的基于MAC和IP的管理,扩展到了对身份标识(Identity)比如Token的管理。无论是目前已有的网络访问控制体系,还是新生的“零信任”网络体系,都是基于Identity的,应用网络里的身份管理,是网络管理不可或缺的一部分,是应用网络安全的基础
    • 基于设备的访问控制。应用流量的消费者,在动态的网络环境里,除了显式声明的身份(Identity)外,还需要基于访问者特征的识别。这部分我们称为“设备指纹”,就是每个应用层网络的访问者,都有它独特的特征;这些特征可以被用来做访问控制、审计等
  • 边界防护与实时监控。Flomesh基于静态及动态的访问策略对应用流量实现实时监控,并根据设定的规则可以实现流量拦截或者告警。一种观点认为:网络安全是没有办法绝对防范和杜绝入侵的,因此能够在疑似入侵发生时最快的检测到并动态施加最严格的访问控制,成为有效网络安全防范的关键。Flomesh的实时监控能力,可以和其他入侵检测技术协同工作,有效在最短时间内识别出恶意流量

  • 流量过滤。类似WAF,可以分析流量,并且对于符合特征的流量(比如包含特定关键字的内容)进行拦截和过滤

  • 审计。Flomesh支持如下几个方面的审计:

    • Flomesh本身操作的审计。作为控制平面,Flomesh自身的安全尤为重要,所有Flomesh上的操作,无论是用户操作,还是API调用,都被记录到审计数据库,可以问题溯源和审计工作
    • Flomesh操作数据平面的审计。Flomesh通过API去操作数据平面,完成流量管理、规则配置等核心功能,所有对数据平面的操作,也都被记录到审计数据库中;同时,所有的配置及规则,都实现版本化管理,可以用于管理目的的回退和回溯
    • 应用流量的审计。Flomesh可以配置网关,对指定特征的应用流量进行监控和审计。比如:可以针对指定消费者,访问特定API进行记录;也可以对特定流量进行记录,比如对于订单服务所有订单数额超过1000元的请求进行记录。这些配置可以动态下发、动态生效、动态终止

功能组三:微服务与服务治理

服务网格是伴随微服务兴起的,服务治理是服务网格需要面对和解决的核心问题,主要包括:

  • 服务发现
  • 服务降级、服务保护及熔断
  • 灰度发布、蓝绿发布等DevOps相关问题

另外,微服务作为一个整体的时候,可观察性也是服务网格解决的核心问题,Flomesh对整个组织内的应用流量提供了可观察性的技术实现,包括:

  • 服务拓扑
  • 服务依赖
  • 调用链跟踪
  • 服务质量(QoS)管理以及可视化,包括访问请求速率统计、总量统计、服务延迟、错误率统计等

功能组四:APIM

服务网格在解决了内部应用之间流量管理问题的同时,也提供了对外数据开放的能力,体现就是API能力。Flomesh为API解决方案和管理平台(APIM)提供了最核心和基础的能力。主要是:

  • API定义(Interface)与实现(Implementation)的映射
  • API生命周期、版本化管理
  • API的权限体系与访问控制

基于这些基础能力,可以快速构建完整的APIM能力,主要包括:

  • API开发支持
  • API集市

Flomesh的特点与差异

首先,Flomesh是云原生的,主要体现在:

  • 可以部署在物理机、虚拟机、容器、Kubernetes等各种环境
  • 支持主流的公有云及私有云
  • 部署需要的资源门槛极低(最小化部署只要1C2G虚拟机既可)
  • 支持配置导入导出功能,可以方便的在不同的环境之间共享配置,具有良好的可迁移性
  • 组件之间采用松耦合设计,既可以运行在数据中心环境,也可以运行在非数据中心的低端硬件、低带宽、广域网的环境
  • 接口采用GraphQL设计,提升信息访问的效率,同时兼容REST

其次,相比于其他服务网格(Service Mesh)的实现,Flomesh主要的差异和特点在于:

  • Flomesh不绑定到任何的服务框架,不绑定到任何的编程框架
  • Flomesh可以支持多种常见的应用间协议,并且Flomesh基于可扩展的架构,可以快速开发支持更多协议
  • Flomesh可以跨地域、跨数据中心运行,除了适用于高速的数据中心网络,也适用于非数据中心的网络环境,包括边缘计算环境
  • Flomesh内置了多种微服务框架的支持,可以开箱即用的和kubernetes、SpringCloud/Eureka、Dubbo/Zookeeper集成。Flomesh的微服务集成采用可扩展的框架设计,可以快速适配到各种微服务框架,实现一键集成
  • Flomesh的指标监控系统结合了基于内存的实时统计引擎和Prometheus的历史数据统计能力,具备更好的实时流量管控能力
  • Flomesh包含基于规则的网络策略管理能力,可以用于流量过滤和访问控制
  • Flomesh面向企业用户设计,内置了工作流引擎,可以快速的定制基于角色的审批类型工作流
  • Flomesh内置了丰富灵活的权限体系,适合大型组织使用
  • Flomesh具有极小的起步安装、部署、运行要求,如当前例子所示,在一个1C2G的虚拟机使用一条安装命令就可以完整运行Flomesh单机环境

使用场景

Flomesh在实践中可以用在多种场景:

  • 微服务治理。Flomesh可以用来做单一微服务集群内的服务治理工作,类似Spring Cloud中Zuul的作用;也可以跨微服务集群做服务治理,实现异构微服务集群之上的统一服务治理
  • 开放平台及API平台。Flomesh的对外API能力,常被用来构建API平台。因为Flomesh可以无缝对接多种微服务平台,基于Flomesh的开放API平台使用上更加简洁:通过最简单的配置,就可以把已有的微服务作为API开放出去。同时因为Flomesh针对网络安全的设计,基于Flomesh的API平台具备更好的信息安全保障能力,可以帮助使用者在“开放”的同时,有效保证信息安全,实现“安全的开放”
  • 多云环境下的流量管理。Flomesh的网关具备标准负载均衡器的能力,同时Flomesh可以兼容部署在各种云平台,这些特性使得Flomesh常被用来管理跨云平台的应用流量
  • Serverless平台。Flomesh可以基于应用流量产生“事件”,进而触发预定义的“函数”
  • IoT网关。Flomesh对运行环境的低要求、对管理网络的低要求,以及对网络协议支持的可扩展架构,使得它被用于构建IoT网关

参考资料

  • https://istio.io/docs/concepts/what-is-istio/
  • https://ai.google/research/pubs/pub43231
  • https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45728.pdf
  • https://www.oreilly.com/library/view/zero-trust-networks/9781491962183/