写点什么

Istio 在 Rainbond Service Mesh 体系下的落地实践

  • 2021 年 12 月 15 日
  • 本文字数:3115 字

    阅读完需:约 10 分钟

两年前 Service Mesh(服务网格)一出来就受到追捧,很多人认为它是微服务架构的最终形态,因为它可以让业务代码和微服务架构解耦,也就是说业务代码不需要修改就能实现微服务架构,但解耦还不够彻底,使用还是不方便,虽然架构解耦了,但部署还没有解耦。

  • 无法根据不同环境或客户需要选择合适的 Service Mesh 框架。

  • 无法做到在开发环境不用学习和使用 Service Mesh,生产环境按需开启。

插件式 Service Mesh 架构实现思路

目前成熟的 ServiceMesh 框架也有许多,但是对于用户而言。并不存在万能的 ServiceMesh 框架,可以解决各种场景的问题。因此我们希望对于用户而言,他只需要关心自己的业务代码。而应用的治理能力,则可以通过不同的 ServiceMesh 框架进行拓展。用户的业务代码与 ServiceMesh 框架完全解耦。如下图所示。用户可以随时替换某个应用所使用的 ServiceMesh 架构。选择与业务最匹配的解决方案。


基于以上思路,我们可以将 istio、linkerd、dapr 等微服务架构做成插件,开发过程中完全不需要知道 Service Mesh 框架的存在,只需要处理好业务的依赖关系,当交付到生产环境或客户环境,有些需要性能高、有些需要功能全、有些客户已经指定等各种差异化需求,根据环境和客户需要按需开启不同类型的插件即可,当 Service Mesh 框架有问题,随时切换。这样 Service Mesh 框架就变成赋能的工具,老的业务系统重新部署马上就能开启服务治理能力。

Rainbond 就是基于上述思路实现的,当前版本已经实现了三个服务治理插件。

  • kubernetes 原生 Service 模式

  • 基于 envoy 的 Service Mesh 模式

  • Istio 服务治理模式

后面我们详细讲解 Istio 服务治理模式的使用过程。

使用 Istio 治理模式的实践

有了以上概念,我们可以来看看 Rainbond 如何与 Istio 结合。在 Rainbond 中,用户可以对不同的应用设置不同的治理模式,即用户可以通过切换应用的治理模式,来按需治理应用。这样带来的好处便是用户可以不被某一个 ServiceMesh 框架所绑定,且可以快速试错,能快速找到最适合当前业务的 ServiceMesh 框架。

安装 Istio 控制面(control plane)

首先在切换到 Istio 治理模式时,如果未安装 Istio 的控制面,则会提示需要安装对应的控制面。因此我们需要安装 Istio 的控制面,控制面在一个集群中只需安装一次,它提供了统一的管理入口,用来管理工作在 Istio 治理模式下的服务。完成配置下发等功能。结合 Rainbond 现有的 helm 安装方式,我们可以便捷的安装好对应的组件。

1. 创建团队

在 5.5.0 版本中,我们支持了用户在创建团队时指定命名空间。由于默认 helm 安装的命名空间为 istio-system ,所以为了减少用户配置。我们首先需要创建出对应的团队。如下图所示。团队英文名对应的则是该团队在集群中的命名空间。此处填写 istio-system 。


2. 对接商店

Rainbond 支持基于 helm 直接部署应用,所以接下来对接 Rainbond 官方 helm 仓库,后续基于 Helm 商店部署 Istio 即可, 在应用市场页面,点击添加商店,选择 helm 商店,输入相关信息即可完成对接。

商店地址:https://openchart.goodrain.com/goodrain/rainbond


3. 安装 Istio 控制面

商店创建完成后,即可看到对应的 helm 应用,目前 Rainbond 提供了 istio 1.11.4 版本的 helm 包,根据 Istio官方文档,该版本对 Kubernetes 集群的版本支持为 1.19, 1.20, 1.21, 1.22。

  • 安装 base 应用

    选择 helm 商店中的 base 应用进行部署,团队选择之前创建的命名空间为 istio-system 的团队。该应用包主要部署了 Istio 相关的集群资源和 CRD 资源。


  • 安装 istio-discovery 应用

    同上述 base 应用一样,选择正确的团队。安装 istio-discovery 应用。有了这两个应用,就可以拥有 Istio 基础的治理能力了。

示例应用开启 Istio 治理模式

1. 切换治理模式

我们以 SpringBoot 后台管理系统 若依 为例,如下图所示,用户可以先从开源应用商店安装一个 若依SpringBoot 应用,版本选择 3.6.0,点击治理模式切换,选择 Istio 治理模式。


在点击切换为 Istio 治理模式后,会需要用户手动设置内部域名,此处的内部域名将会是该组件在 Kubernetes 集群中的 service 名称,在同一个团队下唯一。这里我们修改为可读性较高的内部域名。


2. 修改配置文件

在这一步完成后,我们还需要进入 ruoyi-ui 挂载一个新的配置文件。这主要是因为默认情况下,ruoyi-ui 的配置文件 web.conf 中后端服务地址为 127.0.0.1,在之前使用 Rainbond 内置 ServiceMesh 模式时,由于 Rainbond 会获取到后端服务的地址,注入到 ruoyi-ui 内部, 赋予 ruoyi-ui 一个本地访问地址(127.0.0.1)访问后端服务。所以无需修改就能使用。

但使用 Istio 治理模式时,组件间通过内部域名进行通信,因此需要通过挂载配置文件的方式修改对应的代理地址,ruoyi-ui 的配置文件可以通过右上方的 Web终端 访问到容器中,复制 /app/nginx/conf.d/web.conf 这个文件的内容。修改代理地址后保存,如下图所示。之前我们设置了控制台的内部域名为 ruoyi-admin,所以这里替换为 ruoyi-admin


3. 重启应用

在完成以上两步后,我们需要重启整个应用。在启动应用后,进入组件页面查看,应该可以看到每个组件都有一个类似的 Sidecar 容器,这就是 Istio 的数据面 (data plane),在应用切换为 Istio 治理模式以后,该应用下的所有组件都会自动注入对应的 Sidecar 容器,不需要用户额外设置。

至此,该应用已纳入 Istio 治理范围。用户如果需要对该应用有更多的配置,则可以参考 Istio官方文档 进行扩展。


通过 Kiali 监控和管理 Istio

在之前的步骤中,我们使用 Istio 治理模式纳管了 若依 。接下来则带大家一起看看如何使用 Kiali 观测应用间的通信链路。在这一步中,用户需要有 kubectl 命令

1. 安装 prometheus

在 Istio 中,各个组件通过暴露 HTTP 接口的方式让 Prometheus 定时抓取数据(采用了 Exporters 的方式)。所以 Istio 控制平面安装完成后,需要在 istio-system 的命名空间中部署 Prometheus,将 Istio 组件的各相关指标的数据源默认配置在 Prometheus 中。

同上述 base 应用一样,选择正确的团队,安装 Prometheus应用。


2. 安装 kiali

kiali提供可视化界面监控和管理 Istio,能够展示服务拓扑关系,进行服务配置。

安装 kiali-operator 应用,同上述 base 应用一样,选择正确的团队。

安装过程将自动创建 Service,通过 Rainbond 平台第三方组件的形式可将 kiali 的访问端口暴露出来。如下图所示:


在端口界面添加访问端口,添加以后打开对外服务使用生成的网关策略即可进行访问。


kiali 登录时需要身份认证 token,使用以下命令获取 token:

kubectl describe secret $(kubectl get secret -n istio-system | grep istiod-token |awk '{print $1}') -n istio-system
复制代码

访问到 kiali 以后,在 Applications 一栏,选中应用所在的命名空间,就可以看到我们刚刚创建的应用。点击进入,可以看到如下的流量路线。

image-20211212213849724

在 Graph 一栏,也可以看到对应的应用内的流量请求。更多的配置及相关功能参考 Kiali官方文档


总结

本文简单介绍了在 Rainbond 中使用 Istio 治理模式的操作。以及 Rainbond 与 Istio 治理模式的结合。Rainbond 为用户提供了一个可选的插件体系,使用户可以根据自己的需求选择不同的 Service Mesh 框架。在与 Istio 的结合上,我们主要为用户完成了指定应用数据平面的注入。用户也可以通过该机制扩展自己所需的 ServiceMesh 框架。后续文章我们将详细讲解如何制作插件,尽请关注。


Rainbond是一个开源的云原生应用管理平台,使用简单,不需要懂容器和 Kubernetes,支持管理多个 Kubernetes 集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。

Github:https://github.com/goodrain/rainbond

官网:https://www.rainbond.com?channel=infoq

微信群:请搜索添加群助手微信号 wylhzmyj

钉钉群:请搜索群号 3109641

发布于: 1 小时前阅读数: 3
用户头像

还未添加个人签名 2018.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Istio在Rainbond Service Mesh体系下的落地实践