@levinzhang
2018-09-06T06:28:50.000000Z
字数 4006
阅读 470
by
InfoQ联系到了IBM的高级技术成员Lin Sun,她同时还是Istio项目版本释放团队的参与者,讨论了Istio的总体情况以及1.0发布版本的具体情况。
Istio最近释放了1.0版本。很多重要的特性都在不断取得进展,有的从alpha到了beta阶段,有的从beta阶段到了stable阶段,AutoTrader、Ebay、IBM和Namely等公司已经将其部署到了不同的阶段之中。
InfoQ联系到了IBM的高级技术成员Lin Sun,她同时还是 Istio开源项目版本释放团队的参与者,讨论了Istio的总体情况以及1.0发布版本的具体情况。
Sun介绍了Istio相关的多个话题,包括微服务、1.0版本中的特性、服务网格(service mesh)、sidecar代理、Istio平台的路线图,以及它不仅能够与Kubernetes协作,还能与其他平台协作的能力。
InfoQ:Istio是围绕服务网格构建的,你能为开发人员和架构师介绍一下这到底意味着什么吗?
Lin Sun:关于服务网格该如何连接、保护、控制和观察微服务的问题,我们给出的观点就是Istio。微服务为新的云架构带来了巨大的收益,比如敏捷、速度以及灵活性。但是,它们的一个不足之处就是复杂性。
当用户从单体应用转移到容器和微服务架构时,它们要做的就是将这些大型的应用拆分为很多可移动的组成部分。同样的理念也可以用到基于微服务构建的新云应用上,唯一的区别在于这些不同的组成是完全从头开始构建的。但是,这种模型所面临的挑战依然是相同的。
同时管理这些不同的组成部分是很困难的,可能还会带来安全性方面的问题。Istio是一种将控制权交还给开发人员的方法,能够确保微服务在处理故障的时候能够以一种预先定义的方式来进行相互之间的连接。这样的话,就能更容易地观察整个网络的微服务发生了什么状况,同时能够保护服务之间的通信,并确保策略得到了执行。
这不仅仅是IBM的观点。Istio是一个开放的服务网格平台,目前贡献者超过了200人。Istio是由IBM、Google和Lyft创建的,围绕着它成长起来了一个蓬勃发展的社区,包含其他的合作伙伴,如Cisco、Redhat、Pivotal、Tigera等。Istio开放的架构和生态系统是它如此高效的原因之一,至于使用何种类型的服务,这里没有任何的厂商限制,它可以在任何云模型上运行,无论是公有云、私有云、内建云(on-premise)还是对它们进行组合均可以。
Istio另外的一个好处就是它几乎不需要对应用程序进行任何修改。它并不关心你的服务是使用Javscript、Go、Java、Python还是其他语言编写的。一旦实现了这种方式,唯一需要的代码变更就是恰当地转发请求头信息,以便于利用分布式跟踪的功能。通用的任务都抽象出来了,比如负载均衡、路由、重试和mTLS,并且它们会由Istio跨所有微服务以一致的方式进行解决,而不必关心它们是使用何种语言编写的。
InfoQ:你能简单描述Istio 0.8和Istio 1.0之间的差异吗,或者说Istio 1.0怎样在生产就绪方面做得更好?
Sun:从Istio 0.8到1.0版本,Istio的很多重要特性从Alpha提升到了Beta阶段,或者从Beta提升到了Stable阶段。这些功能组成了Istio迄今最新和最稳定的版本,这是社区密切协作的结果,社区测试并强化了Istio对越来越庞大和复杂的微服务进行扩展和管理的功能。
例如,流量管理中的HTTP1.1 / HTTP2 / gRPC / TCP协议进入了Stable阶段。WebSockets和MongoDB进入了Beta阶段,除此之外,还有流量控制、弹性、网关、TLS终止以及网关中对SNI的支持。1.0版本新增了对过滤器的支持,因此我们将该特性的状态设置为Alpha。在开发很多特性的时候,IBM将我们在为复杂企业迁移到云端所学习到的经验贡献了出来。与社区一道,我们为开发团队交付了将Istio用于生产环境时想要具备的功能,包括稳定性、安全性和控制。
你可能也注意到了,我们会首先将一个特性声明为Alpha状态,如果它在我们的测试、经验以及用户反馈中都相对稳定的话,我们会将其提升为Beta状态,然后会将其升级为Stable状态,该状态会包含多次的长期支持(Long Term Supported,LTS)版本发布。一旦某个特性达到Beta状态,我们就会建议用户使用它,但是需要当心一些。
随着Istio的很多特性达到Stable和Beta状态,Istio 1.0就已经生产环境就绪了。我们的很多用户已经按照这种方式使用Istio了,比如AutoTrader、Ebay和Namely等等。在IBM,我们内部在使用Istio,我们的一些客户正在预生产环境(pre-production)使用Istio。
Istio 1.0其他很强大的特性包括:
- 虚拟服务中对SNI路由的支持,这样的话就允许用户基于SNI主机的值配置流量路由;
- 进程外的mixer适配器,允许开发人员编写mixer适配器时无需向核心Istio mixer组件提交pull request (PR)。开发人员可以按照自己的进度构建和发布自己的mixer适配器;
- 在envoy sidecar代理中完成了很多的策略检查,提升了性能和可靠性。例如,在将RBAC规则用到你的微服务的时候,不再需要mixer了;
- 除了认证策略,还有一个新的“permissive”模型,能够更容易地转换为mutual TLS。在转换过程中,你将会处于“permissive”模式,一旦转换完全完成,就能强制执行安全性。
InfoQ:sidecar代理模式是Istio的核心理念。它主要是为了采集pods的遥测数据(telemetry)还是有更大的用途?
Sun:收集遥测数据仅仅是sidecar模式能够完成的众多任务之一。Envoy是我们默认的代理实现,它会处理通用的任务,比如跨所有语言的负载均衡、路由以及重试一致性。
Envoy基于目标端口捕获所有的传入流量以及所有的传出流量,并发送遥测数据给Istio,这是Mixer的一个子组件。它还能够执行策略检查,例如限速、RBAC或其他基于属性的策略检查,这些策略可以是本地的,也可以是使用Istio-policy的组件。最后,Envoy还能处理网格内微服务之间的安全通信,这是通过检查身份、认证以及mutual TLS启用时的key来实现的。
InfoQ:Istio并不仅仅适用于Kubernetes,对吧?它能够与其他的平台协作吗,如Cloud Foundry、OpenShift等?
Sun:Istio的创建和运行都是开放式的,这是Istio非常棒的一点。你几乎可以在任何地方运行Istio,不管是Kubernetes集群、虚拟机还是在Cloud Foundry环境中。Istio可以运行在任何通过了Kubernetes v1.9和CNCF一致性认证的环境中。我们可以在任何的Kubernetes 1.9集群中运行Istio,包括在IBM Cloud Kubernetes服务中,以及其他的云平台中。
如果你看一下安装文档的话,我们提供了跨不同环境搭建Istio的指南。来自虚拟机的服务也可以作为Istio网格的一部分参与进来。
Istio还嵌入到了Cloud Foundry中,Cloud Foundry团队也在为Istio积极地做着贡献。
InfoQ:除了bookinfo样例之外,你还能为开发人员和架构师提供一些Istio的学习资源吗?
Sun:Bookinfo是一个非常棒的样例,它是为云原生微服务编写的,在istio.io上,我们使用它来展现Istio的各种特性。另外,还有很多其他非常好的资源,包括:
- 在Istio.io上的各种Istio博客、任务和样例;
- Katacoda的Istio和Kubernetes起步教程;
- IBM扩展了Kubernetes的Guestbook样例,包含了如何将其与机器学习和其他服务进行集成;
- IBM Cloud同时还维护了一个Istio资源的页面。
其他的一些社区成员(比如Redhat和Google)也发布了各种博客、任务和样例,能够帮助你们开始学习Istio。
InfoQ:你能介绍一下Istio 1.0之后的路线图以及与Kubernetes、Knative和其他社区协作的计划吗?
Sun:从IBM的角度来说,我们一直关注让Istio在IBM Cloud中更易于搭建和使用。Istio是BM Cloud战略的核心组件。除此之外,我们专注于跨集群提供联邦Istio服务网格功能,跨越公有的IBM Cloud Kubernetes服务和内建的IBM Cloud私有环境,提供统一的微服务体验。
从更广的社区视角来看,IBM和Istio的贡献者会发布1.0和1.1的补丁,目标是让Istio更易于使用,从而扩大它的采用范围。 这包括按需采用Istio某些组成部分的能力、继续改进其性能和扩展性并积极构建关键的特性,如路由API的改进、每个节点运行mixer的能力以及Istio跨多个环境的能力。我们还关注于不断增长的非平面网络(non-flat)下多集群的支持,在这种网络中,pods不能跨多个Kubernetes集群进行路由。
Istio在与Kubernetes社区密切合作,社区会继续选择Kubernetes作为其首选平台。我们很高兴地看到其他的开放项目,如Knative和Fission也在使用Istio,它们具备让Istio未来更容易消费和使用的潜力。 .
Istio 1.0的技术细节可以通过其发布说明查阅。
查看英文原文:Q&A with IBM's Lin Sun on Istio 1.0 and Microservices