两年前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一栏,选中应用所在的命名空间,就可以看到我们刚刚创建的应用。点击进入,可以看到如下的流量路线。

在 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=cnblog

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

钉钉群:请搜索群号 31096419

Istio在Rainbond Service Mesh体系下的落地实践的更多相关文章

  1. 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录

    小蚂蚁说: 本文是基于在 Service Mesher Meetup 上海站的主题分享<蚂蚁金服 Service Mesh 渐进式迁移方案>内容整理,完整的分享 PPT 获取方式见文章底部 ...

  2. 蚂蚁金服 Service Mesh 实践探索

    SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...

  3. 服务迁移之路 | Spring Cloud向Service Mesh转变

    一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...

  4. 基于事件驱动机制,在Service Mesh中进行消息传递的探讨

    翻译 | 宋松 原文 | https://www.infoq.com/articles/service-mesh-event-driven-messaging 关键点 当前流行的Service Mes ...

  5. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  6. Service Mesh架构的持续演进 单体模块化 SOA 微服务 Service Mesh

    架构不止-严选Service Mesh架构的持续演进 网易严选 王育松 严选技术团队 2019-11-25 前言同严选的业务一样,在下层承载它的IT系统架构一样要生存.呼吸.增长和发展,否则过时的.僵 ...

  7. Java进阶专题(二十八) Service Mesh初体验

    前言 ​ ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...

  8. 解读2017之Service Mesh:群雄逐鹿烽烟起

    https://mp.weixin.qq.com/s/ur3PmLZ6VjP5L5FatIYYmg 在过去的2016年和2017年,微服务技术得以迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热 ...

  9. 什么是Service Mesh?

    转至大佬宋净明的博客:https://jimmysong.io/posts/what-is-a-service-mesh/ Service mesh 又译作 “服务网格”,作为服务间通信的基础设施层. ...

随机推荐

  1. 我個人喜歡的一些Ubuntu的相關配置

    1.vim vim安裝: sudo apt-get install vim-gtk vim美化:刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它.在命令行下 ...

  2. kubernetes基本概念 pod, service

    k8s的部署架构 kubernetes中有两类资源,分别是master和nodes,master和nodes上跑的服务如下图, kube-apiserver | kubelet kube-contro ...

  3. 什么。你还没有搞懂Spring事务增强器 ,一篇文章让你彻底搞懂Spring事务,虽然很长但是干货满满

    上一篇文章主要讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,也讲解了Advisor,pointcut验证流程:但是还未提到的那个Ad ...

  4. <C#任务导引教程>练习六

    //54五名学生参加了两门课程的考试,试输入成绩,统计出各科的最高分,最低分,平均分及每个学生的平均成绩(要求用对话框显示成绩统计结果)using System;using System.Window ...

  5. mysql注入绕过information_schema过滤

    1.利用mysql5.7新增的sys.schema_auto_increment_columns 这是sys数据库下的一个视图,基础数据来自与information_schema,他的作用是对表的自增 ...

  6. 洛谷 P3750 - [六省联考2017]分手是祝愿(期望 dp)

    题面传送门 首先我们需注意到这样一个性质:那就是对于任何一种状态,将其变为全 \(0\) 所用的最小步数的方案是唯一的--考虑编号为 \(n\) 的灯,显然如果它原本是暗着的就不用管它了,如果它是亮着 ...

  7. P6604 [HNOI2016]序列 加强版

    *I. P6604 [HNOI2016]序列 加强版 摘自学习笔记 简单树论 笛卡尔树部分例题 I. 和 P6503 比较类似.我们设 \(f_i\) 表示全局以 \(i\) 结尾的子区间的最小值之和 ...

  8. Docker Nginx-Proxy 容器Nginx Proxy反向代理

    Docker Nginx-Proxy 容器Nginx Proxy反向代理   简单介绍 Docker容器的自动Nginx反向代理   dockerhub地址 https://hub.docker.co ...

  9. GWAS在农业上应用

    农业的组学技术应用虽然落后于人的研究,这是什么意义的问题,但有时农业基因组有自己无可比拟的优势,那就是材料.下面介绍GWAS应用. GWAS(Genome-wide association study ...

  10. cmd查看同一个局域网内电脑IP

    win+R,cmd  #快速打开cmd窗口 net view  #查看本地局域网内开启了哪些计算机共享  运行后可以看到已共享的计算机名称 net view ip  #查看对方局域网内开启了哪些共享 ...