为什么要学习Istio

Istio是运行在kubernetes之上的一种服务网格,极大的扩展了kubernetes的功能,可以轻松实现比kubernetes更细颗粒度的流量管理。

当我们直接在kubernetes部署应用时,有时要实现一些特殊需求是比较困难的,比如金丝雀发布(也称为灰度发布)。

金丝雀发布是这样工作的,我们已经有了一个旧版本的应用这里称之为v1,然后要发布一个新版本的应用这里称之为v2。但是现在并不想让所有的客户端都访问v2,只是想在小范围内对部分客户端开放进行测试。

所以我们可以设置90%的流量转发到v1,10%的流量转发到v2。如果这10%的用户反馈v2还不错,那么我们我们可以扩大访问v2的流量,缩小访问v1的流量。
file
以此类推,直到把所有的流量逐步转移到v2上面。

如果没有istio的话实现的方式是这个样子的,创建两个deployment,一个是v1一个v2。他们创建的pod具备相同的标签供service关联。首先v1设置3个副本,v2设置一个副本,这样75%的流量都转发到v1上了,往25%的流量转发到v2上。

然后我们可以缩小v1的副本数,增加v2的副本数来修改流量的走向,如下图。
file
但是这种流量的管控显得过于粗糙,且维护起来也过于麻烦。

但是我们在istio里是非常方便实现的。下面是取自一个VirtualService(简称为vs)里的部分代码,我们通过修改weight即可修改流量的走向。

    - destination:
        host: svc1
        subset: v1
      weight: 65
    - destination:
        host: svc1
        subset: v2
      weight: 35

这里指定往pod1的流量占65%,往pod2的流量占35%,然后通过下图看流量走向。
file
然后我们再次修改weight。

    - destination:
        host: svc1
        subset: v1
      weight: 35
    - destination:
        host: svc1
        subset: v2
      weight: 65

这里设置往pod1走35%的流量,往pod2走65%的流量,然后看下图。
file

我们只要改变这里的weight就可以轻松按照百分比改变转发到pod的流量。除了上述金丝雀发布之外,我们要实现蓝绿部署、A/B测试、会话保持、流量镜像等功能都可以轻松实现,所以istio的强大之处在于它的流量管理。

如果我们想让不同的客户端(Android、windows、firefox、chrome等)访问到不同的pod上,istio亦可以轻松实现。另外istio也提供了强大的可观测性,上面因为我们安装了kiali,也可以非常便捷的看到流量走向。

istio也为我们提供了更强大的安全管理,包括通过AuthorizationPolicy做更细致的授权管理、pod之间的mTLS认证等,极大提高了pod的安全性。

随着开源和云计算的推进,云原生微服务作为核心的技术保持着高速增长;随着微服务技术的成熟,开始渗透到各行各业。一方面人力成本不断上涨,采用微服务提高研发效率势在必行。

所以在学习CKA之后,如果能够在系统的学习一下istio势必为大家的职业发展带来极大的益处。

相关新闻

                                                                                                                                    RHCE9学习指南连载,点击阅读