yuxinshuier 2020-06-21
服务网格(Service Mesh)并不是新概念,但将其作为运行容器平台在Kubernetes之上的微服务连接来实现,则是服务网格变得更为流行的原因。如果没有服务网格,则每个微服务都需要配置接受并发送与其通信的其他微服务的连接,而服务网格完全改变了这一点。
开发者现在可以创建一个网格,使微服务能够以可靠,安全和可控的方式相互通信,而不必处理手动配置,并且不必花费大量时间和精力来维护微服务之间的连接。Kubernetes和服务网格相辅相成,因为使用服务网格可以实现更复杂的容器化架构,而不会增加额外的工作量。还有很多方法可以将服务网格建立为Kubernetes上的一层,来看看时下流行的服务网格工具。
AWS App Mesh
目前,许多Kubernetes支持的应用和微服务都在AWS的环境中运行,因此谈到服务网格很难避开AWS App Mesh不谈。AWS App Mesh是亚马逊自己的服务网格,为AWS的服务创建服务网格层。
AWS App Mesh结合了Envoy的专有技术作为其服务代理,通过创建虚拟服务在相同名称空间内的连接服务。AWS环境中的每个微服务都可以找到该虚拟服务,并将其用于将通信引导至其他微服务。
AWS App Mesh与其他AWS服务,如EKS,Fargate和EC2的无缝集成是其最强的优势之一,但是在使用AWS App Mesh方面存在一些限制,不能迁移到App Mesh外部或在多云设置中使用这项服务。
此外,App Mesh还借助CloudWatch和AWS X-Ray来管理服务网格,但这意味着你无需离开主仪表板就可完全控制服务网格层。尽管App Mesh不支持授权规则,但也支持如mTLS、高级负载均衡之类的安全功能。
Istio
Istio是Kubernetes最受欢迎的服务网格工具。最初是由为Lyft开发,之后成为了Google和IBM联合的开发项目。背靠这样的巨头,Istio在许多部署类型中得到广泛使用就不足为奇了。
与App Mesh相似,Istio也使用Envoy作为其服务代理,但并不仅限于Envoy作为唯一的入口控制器。Istio的独特之处在于它提供了巨大的灵活性,而没有通常的复杂性。实际上可以将Istio用于其他容器化平台,但是它与Kubernetes的无缝集成才是最为关键的
例如,Istio支持网格扩展和多集群网格,这两个功能都是App Mesh和许多其他服务网格工具所没有的。Istio也像执行这些任务一样处理流量访问控制和负载均衡。它甚至支持故障注入和延迟注入。
而使用Istio的唯一不足就是可能会对它提供的功能感到不知如何下手。但如果有足够的资源使用Istio处理服务网格层,则它可以利用其功能简化最复杂的微服务体系架构。
Linkerd
Linkerd也是非常流行的服务网格工具。Kubernetes社区已经很好地接受了新的系列版本,到2020年4月中旬,其稳定的2.7.1版本已经发布。它完全是作为独立的服务网格工具构建的,因此它不依赖Envoy等第三方工具进行管理。它甚至包含linkerd-proxy作为服务代理。
最近的升级,还包括仪表板改进和金丝雀部署的流量拆分功能的可视化。这使其成为实时监控和编排金丝雀和蓝/绿部署的绝佳工具。
Linkerd在保持独立性的同时,还与入口控制器保持高度兼容性。实际上,Linkerd能够与你使用的任何入口控制器一起使用,从而使其在这方面具有很好的灵活性。要使服务网格与应用程序集成在一起,只需要一个简单的连接器注入命令即可。
Linkerd2也进行了高度优化,安装仅需60秒。如果你正在寻找一个可以使表格发挥最佳性能的服务网格工具,那么可以尝试一下。Linkerd一旦部署,并不需要太多的优化。开箱即用的配置能够支持复杂的微服务阵列,并且能够防止重大攻击。Linkerd通过mTLS加密来增强应用程序安全性。
它也是专门为Kubernetes开发的工具,不支持多云和多集群网格创建,但是当用作Kubernetes实例的服务网格层时,它的功能也不会因此降低。此外,它还可以与OpenCensus配合使用,使跟踪和管理变得非常容易。
Kuma
Kuma提供了Envoy作为服务代理和对任何入口控制器支持的独特组合。它与Consul Connect非常相似,但有些新功能令人耳目一新,Kuma也是与其他工具相比,还很年轻。
Kuma不仅可以投入生产,而且还具有功能强大的服务网格功能。它支持与OpenTracing兼容的所有后端,并在需要时允许使用外部CA证书。但它还存在许多功能的不足。
目前,在Kuma中无法进行基于路径或基于标头的流量拆分,还不支持流量访问控制和指标等功能。这些功能可能会在以后的更新中引入,但是就目前而言,必须手动进行代理模板处理才能解决这些工具的不足。
尽管如此,Kuma看起来还不错。它当前为0.4.0的版本,它的开发团队正在不断听取社区用户的意见,尽快追上与其他服务网格工具的差距。
Consul Connect
HashiCorp的Consul Connect,它可以与Envoy和其他各种服务代理替代产品一起使用。它还可以与任何入口控制器一起使用,使其成为最容易集成到现有Kubernetes集群中的一种工具。
Consul Connect可在任何Consul环境中无缝运行。该服务网格工具虽然提供了许多方便的功能,但只能满足与其他HashiCorp产品一起使用。
它支持从TCP到gRPC的所有内容,也可与Kubernetes,VM和Nomads一起使用。完全支持网格扩展,因此可以拥有跨多个云服务和集群的环境,并且具有支持微服务的功能强大的服务网格层。
Consul Connect需要改进的一方面是监控。目前它可以集成其他监控工具来访问日志和按路由度量。如可以集成Prometheus和Grafana之类的工具来进行可视化数据监控。只需要从服务代理中提取数据即可,而不是直接从Consul Connect中提取数据。
Envoy Proxy
以上服务网格工具主要设计为与Envoy一起用作服务代理。与其他边缘代理工具相比,Envoy确实具有一些优势,高级负载均衡是所有这些工具中最突出的优势。