伴随着微服务架构,容器编排技术和云原生(Cloud Native)应用的发展,William Morgan 两年前一篇《What's a service mesh? And why do I need one?》把服务网格(Service Mesh)带入到更多人的视野,近两年服务网格软件Linkerd,Istio等在越来越多的公司生产环境中有所应用。
在微服务架构里,服务网格是一个负责专门处理服务到服务之间通讯的基础设施层。服务网格有两个主要目标,一个是将原先不可见的服务间通讯可视化;另一个是对服务间的通讯进行一定控制(在路由/跟踪/安全等方面);实践中, 服务网格通常被设计成轻量的网络代理程序,通过无侵入式的方式与应用集成,接管服务所有入口和出口的网络流量,作为微服务之间网络拓扑中的通讯管道。
Kubernetes提供了服务抽象及服务发现机制,支持微服务之间的相互通讯,为什么我们还需要服务网格呢?我们先来看看Kubernetes的服务发现。
Kubernetes通过抽象出Service对象来支持微服务架构,运行应用的多个Pod实例通过定义Service对象对外提供服务。应用之间通过Service名来相互访问,通过Service名的DNS解析完成服务发现。
具体的,Pod实例运行时会将实例的地址端口等信息注册到kube-apiserver,与相关的Service建立关联(数据存储于背后的etcd存储),同时K