Istio在Rainbond Service Mesh体系下的落地实践
两年前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体系下的落地实践的更多相关文章
- 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录
小蚂蚁说: 本文是基于在 Service Mesher Meetup 上海站的主题分享<蚂蚁金服 Service Mesh 渐进式迁移方案>内容整理,完整的分享 PPT 获取方式见文章底部 ...
- 蚂蚁金服 Service Mesh 实践探索
SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...
- 服务迁移之路 | Spring Cloud向Service Mesh转变
一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...
- 基于事件驱动机制,在Service Mesh中进行消息传递的探讨
翻译 | 宋松 原文 | https://www.infoq.com/articles/service-mesh-event-driven-messaging 关键点 当前流行的Service Mes ...
- 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless
作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...
- Service Mesh架构的持续演进 单体模块化 SOA 微服务 Service Mesh
架构不止-严选Service Mesh架构的持续演进 网易严选 王育松 严选技术团队 2019-11-25 前言同严选的业务一样,在下层承载它的IT系统架构一样要生存.呼吸.增长和发展,否则过时的.僵 ...
- Java进阶专题(二十八) Service Mesh初体验
前言 ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...
- 解读2017之Service Mesh:群雄逐鹿烽烟起
https://mp.weixin.qq.com/s/ur3PmLZ6VjP5L5FatIYYmg 在过去的2016年和2017年,微服务技术得以迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热 ...
- 什么是Service Mesh?
转至大佬宋净明的博客:https://jimmysong.io/posts/what-is-a-service-mesh/ Service mesh 又译作 “服务网格”,作为服务间通信的基础设施层. ...
随机推荐
- 我個人喜歡的一些Ubuntu的相關配置
1.vim vim安裝: sudo apt-get install vim-gtk vim美化:刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它.在命令行下 ...
- kubernetes基本概念 pod, service
k8s的部署架构 kubernetes中有两类资源,分别是master和nodes,master和nodes上跑的服务如下图, kube-apiserver | kubelet kube-contro ...
- 什么。你还没有搞懂Spring事务增强器 ,一篇文章让你彻底搞懂Spring事务,虽然很长但是干货满满
上一篇文章主要讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,也讲解了Advisor,pointcut验证流程:但是还未提到的那个Ad ...
- <C#任务导引教程>练习六
//54五名学生参加了两门课程的考试,试输入成绩,统计出各科的最高分,最低分,平均分及每个学生的平均成绩(要求用对话框显示成绩统计结果)using System;using System.Window ...
- mysql注入绕过information_schema过滤
1.利用mysql5.7新增的sys.schema_auto_increment_columns 这是sys数据库下的一个视图,基础数据来自与information_schema,他的作用是对表的自增 ...
- 洛谷 P3750 - [六省联考2017]分手是祝愿(期望 dp)
题面传送门 首先我们需注意到这样一个性质:那就是对于任何一种状态,将其变为全 \(0\) 所用的最小步数的方案是唯一的--考虑编号为 \(n\) 的灯,显然如果它原本是暗着的就不用管它了,如果它是亮着 ...
- P6604 [HNOI2016]序列 加强版
*I. P6604 [HNOI2016]序列 加强版 摘自学习笔记 简单树论 笛卡尔树部分例题 I. 和 P6503 比较类似.我们设 \(f_i\) 表示全局以 \(i\) 结尾的子区间的最小值之和 ...
- Docker Nginx-Proxy 容器Nginx Proxy反向代理
Docker Nginx-Proxy 容器Nginx Proxy反向代理 简单介绍 Docker容器的自动Nginx反向代理 dockerhub地址 https://hub.docker.co ...
- GWAS在农业上应用
农业的组学技术应用虽然落后于人的研究,这是什么意义的问题,但有时农业基因组有自己无可比拟的优势,那就是材料.下面介绍GWAS应用. GWAS(Genome-wide association study ...
- cmd查看同一个局域网内电脑IP
win+R,cmd #快速打开cmd窗口 net view #查看本地局域网内开启了哪些计算机共享 运行后可以看到已共享的计算机名称 net view ip #查看对方局域网内开启了哪些共享 ...