在istio服务网格中扩展自定义功能
前提 #
本文假设你已经对 Kubernetes、istio 和 Envoy 有一定的了解,如果你还不了解,可以先阅读下面的文章:
- Kubernetes: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
- istio: https://istio.io/latest/docs/concepts/what-is-istio/
- Envoy: https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy
当然不仅限于知道这些,还需要对其有一定的实践经验,这样才能更好的理解本文的内容。当然本文也不会涉及太深,只是作为 istio 的一个入门扩展教程。
为什么要扩展功能?#背景 #
用通俗的话去理解 istio 的作用就是,对我们部署在 kubernetes 上的应用进行流量控制(代理),给我们提供了:流量控制、流量监控、流量安全等功能。但是在实际的使用中,我们还是会遇到一些特殊的场景,需要我们自己基于自己的业务场景去扩展一些功能,比如:ip 白名单、ip 黑名单、统一认证等。这些功能往往和具体公司的业务场景有关,因此 istio 无法直接提供这些功能,需要我们自己去扩展。
传统的扩展方式 #
在传统架构中,常常通过 API 网关这一组件来实现这一些扩展能力,常用的 API 网关有:kong、apisix、openresty,而扩展的原理就是插件,或者像 nginx/openresty 在请求链中的不同阶段提供了不同的 hook,我们可以基于这些 hook 来实现扩展功能。
就我个人的经历来说,网关要么自己定制开发,要么基于openresty来实现,又或者使用一些开源的网关,如:kong、apisix,在此基础上进行二次开发。不过这些方式都是在传统API网关中去实现的,随着 Service Mesh 的发展,API网关的某些功能也被 Sidecar 代理所取代,比如:流量控制、流量监控、流量安全等。目前 Mesh 发展的趋势也是进一步在 Sidecar 代理中实现更多的功能,而不是在 API 网关中实现。
Envoy 的扩展能力 #
envoy 提供了丰富的扩展能力,Access Logger, Access Log Filter, Clusters, Listen Filter, Network Filter, HTTP Filter 等等。这一块内容非常多,如果想要了解更多,请参考官方文档。
...