暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Istio | 服务网格,未来已来?

落风潭 2022-09-22
293


最近潭主复盘了一遍Linkerd,算是为Service Mesh的学习开了个头。

上期文章发布的前一天晚上,在朋友圈看到友商的聚会邀请,因为跟Service Mesh有关,就去凑了个热闹,没成想围观了Flomesh社区大咖们的酒会。

当然,也听到不少Service Mesh的新资讯。

今天就跟大家分享一下Service Mesh的另一个技术实现,Istio。


脱钩”的Ambient Mesh

本想先通过Linkerd做个技术铺垫,再过渡到Istio保持一定的先进性。

没想到蹦出来一个Solo,让潭主有点措手不及。

Solo和Google为Istio项目贡献一个重要的新架构,称为Istio Ambient Mesh。

在Istio中,Sidecar是Per-Pod模式,但是Istio Ambient Mesh却跟通过DaemonSet部署的Linkerd一样,采用了Per-Node模式

为此,有社区大咖说Ambient Mesh开倒车,又回到了Linkerd的老路上。

模式归模式,最终还是要综合评估技术和商业可行性,毕竟不是每个“领导”都需要配机要秘书,因地制宜,解决主要矛盾。

言归正传,还是回到Istio身上。

Istio的架构和核心功能

有了Linkerd的基础,再看Istio就觉得简单多了。

虽说Istio也是经典的控制平面数据平面架构,但真做到生产可用,除了自身版本迭代外,也少不了架构

在最架构,原来分散、独立部署的控制组件被整合成了一个多模块的Istiod进程:

  • Pilot:负责处理流程规则提供超时、重试和熔断等功能。

  • Citadel:负责身份认证和证书管理,结合SDS(Secret Discovery Service)可实现无需挂载Secret卷、动态更新证书,还能侦听多个证书的密钥对。

  • Galley:负责配置验证,通过网格配置协议完成组件交互,实现配置管理和分发。


K8S的本质是通过声明配置对应用进行生命周期管理,而Service Mesh的本质则是实现应用间的流量和安全管控,同时提供可观察性。

从流量上看,K8S的Kube-Proxy通过iptables实现了Node的流程管控,而附着在K8S之上的Istio,则通过Sidecar实现了进出Pod的流量管控。

Envoy和它的xDS

Istio的数据平面用的是Envoy,一款由Lyft开源,用C++编写的高性能服务代理软件。

如果说linker是Linkerd中的Sidecar,那么Envoy就是Istio的Sidecar。

每次学习新产品和技术,都难免遇到一些名词和术语,算是入门的黑话。

  • DownStream(下游):请求发送方

  • UpStream(上游):接收请求方


可以从Sidecar所处的位置来理解上下游关系,最终Envoy使用Filter(过滤)和Router(路由)将上下游串联起来

Filter像是Envoy的可插拔组件,提供流量编排,目前Istio社区提供了现成的Filter供用户直接使用。

流量从Ingress进来,在Istio的Envoy上打转,最后再从Egress出去,实现南北进出,东西互访。

而Envoy的服务发现功能对应的API被称为xDS,是整个Istio的基石。

重点是理解Listener、Router、Cluster和Endpoint四个核心的服务发现功,新版本里还有VHDS(VirtualHost)和SDS(Secret)等新的发现服务。

Istio与它的CRD

在核心的流量管理上,Istio则过一组CRD(Custom Resource Definition来具体实现的。

  • Gateway:网格边缘的负载控制器,控制进出网格的流量(Ingress & Egress)

  • VirtualService:定义路由的目标服务和流量策略

  • DestinationRule:设定路由规则和访问策略。

  • EnvoyFilter:描述针对代理服务的过滤器

  • ServiceEntry:在Istio内部添加外部服务条目,实现对网格外部的服务访问

  • WorkloadEntry:将虚拟机接入服务网格


这部分内容过于概念化,有机会动手实践一下相信会更有收获。


从Mixer到WASM

WASM是WebAssembly的简称,也是一个挺火的新东西。

之前的Istio版本中,Mixer作为中介,通过服务抽象层实现Envoy与Prometheus等平台进行交互,通过Adapter适配完成对接。

在新版本中,WebAssembly作为一种沙盒技术内嵌在Envoy中,用Proxy-WASM沙箱 API取代Mixer实现Istio的扩展。

背靠大树好乘凉

自打Google把Istio贡献给了开源社区,Service Mesh好像又出现了一边倒的情况。

跟当初容器编排领域的Swarm、Mesos和Kubernetes之争很像,还没等用户缓过神儿来,K8S就一统江湖了。

在国内企业技术转型的过程中,以SpringCloud和Dubbo为代表的微服务开发框架更受开发者欢迎。

潭主之前在跟和同事做调研交流时发现有个别项目团队已经进行了VM版的微服务改造。

这种微服务技术框架虽有优势之处,但来的问题也不少比如代码的侵入性强,升级成本高,也容易引发版本碎片化。

其实,即使没有微服务,在应用系统规模较大时本身就很容易出现版本基线的管理问题。实话,很难治理。

而Service Mesh将应用的业务逻辑和微服务治理进行了解耦,貌似可以解决些问题。

把方便留给用户

目前,Istio已经成了主流PaaS平台的标配,像时速云这样厂商也做了相应的产品化,最后就看用户需求。

开源软件跟产品是两个概念,但有个好的用户操作界面,体验会好很多。

比如原本繁琐难记的yaml被页面封装了,再集成一个DevOps,CI/CD这种事也能变得轻松。当然,如果有追求也可以实践GitOps。

反正对潭主这种空有思想,不求甚解的用户来说,有个界面更容易上手。

补充点细节,Service Mesh的核心功能是流量管理:

  • 流量管控:Istio引入了Version概念,可以对不同版本,用不同的权重进行流量调度,轻松实现灰度发布,同时也能通过Gateway实现边界流量控制。

  • 弹性功能:熔断、超时和重试,通过添加timeoutretry关键字实现,而熔断需要在DestinationRule的Traffic Policy进行设置。

  • 调试能力:故障注入和流量镜像,Istio支持延迟中断两种故障类型,这部分跟混沌工程有些相似,通过配置faultmirror关键字实现


Istio看上去复杂,用起来其实并不难。

做产品,把方便留给用户很关键。


Service Mesh,未来已来?

潭主早期玩OpenShift时,那会儿还没有Istio,但现在服务网格也不新鲜了。

最近跟时速云的人交流PaaS,听说大家保险已经部署了Service Mesh,不由想起了中国人寿和Rancher,潭主颇为感慨。

客观讲,保险行业的一些用户在新技术的应用上其实已经走在了前面,而且有了一定的规模,反观自身和OCP那点量,感觉只能用“可圈可点“来评价,没有规模,何来治理。

回首过去几年,从Dokcer到Kubernetes,再到Service Mesh,微服务和云原生演绎了波澜壮阔的三部曲。

未来已来,去IOE到云原生,潭主“”的终极目标就是实现这种端到端的服务。

新技术应用需要信仰和情怀,重要的在于参与!

- END -

感谢阅读。如果觉得写得还不错,就请点个赞或“在看”吧。


  • 公众号所有文章仅代表个人观点,与供职单位无关。


文章转载自落风潭,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论