Rainbond的ServiceMesh架构组件端口冲突处理解决

目录
  • 组件间的通讯问题
    • 方式一:通过HTTP 7层网络治理进行端口复用
    • 方式二:动态变更组件的监听端口
    • 方式三:使用 Kubernetes 原生 Service 治理模式
    • 方式四:使用 Istio 网络治理模式

组件间的通讯问题

在我们部署具有多个服务的分布式业务时,必须要考虑的一点就是如何处理服务之间的通信问题,那么当我们将业务部署到Rainbond 上时,又是如何去处理的呢?

Rainbond 开箱即用的ServiceMesh架构默认通过 Sidecar 代理的方式,为我们透明的解决了分布式场景下组件间的通讯问题。

例如A组件需要访问B组件,可以让A组件依赖B组件,这样A组件启动时会同时以插件方式启动一个 envoy 服务,而 envoy 服务会将B组件的对内端口映射到A组件 Pod 网络空间的本地回环地址127.0.0.1的相同端口,也就是说B组件开通了对内的8080端口,那么在建立了A到B的依赖关系后,在A组件内访问127.0.0.1:8080会由 envoy 将相关请求转发到B组件的8080端口。

但是我们实际的业务中经常会出现一种情况,那就是一个组件需要和多个其他组件通信,而这些组件使用的服务端口有可能会相同,这就会导致 envoy 在本地回环地址127.0.0.1起监听时出现端口冲突。

我们可以通过以下方式解决这个问题:

方式一:通过HTTP 7层网络治理进行端口复用

这一类型的组件,通过Rainbond网络治理插件设置下游组件的域名(Domain)、请求路径、请求头等路由条件,由envoy通过80端口将访问对应域名的请求转发至对应的后端组件端口,不再监听开通插件的组件网络空间的对应端口,具体配置流程如下:

建立依赖关系

开通A组件网络治理插件

配置下游服务访问域名

更新组件并测试域名访问效果

注意事项

网络治理类插件会监听服务网络的127.0.0.1:80,因此如果A组件本身再监听80端口的,会出现因80端口已被占用服务无法启动而导致的组件状态运行异常

方式二:动态变更组件的监听端口

Rainbond上运行的组件在启动时会自动注入一个环境变量PORT,值为组件设置的第一个端口,可以设置组件启动时引用PORT变量设置服务的监听端口,将服务监听的端口由平台控制,即可不修改代码实现监听端口变更。这样依赖的不同服务设置不同的端口就可以避免冲突问题了,以Java项目源码构建为例,具体配置流程如下:

设置构建源的启动命令为

web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar

添加组件端口并构建组件。

验证服务监听端口

不同的开发语言和中间件设置监听端口的方式不同,开发者需要根据实际的设置方式进行开发配置。

方式三:使用 Kubernetes 原生 Service 治理模式

在 Rainbond 即将到来的5.3版本中,将支持直接使用 Kubernetes 原生 Service 模式,并提供友好的配置方式,在这种网络治理模式下,每个对内端口都可以设置自定义访问域名,设置之后会生成对应的 Service 资源,这样组件间就可以直接通过内部域名+端口的方式进行访问,不再由 envoy 进行端口代理,从根本上避免出现端口冲突的问题。

方式四:使用 Istio 网络治理模式

在 Rainbond 的后续版本中也将会支持 Istio 网络治理模式,在这种网络治理模式下,只会监听 Istio 配置的固定 Pod 端口,而不去监听需要访问的组件端口,需要访问的其他组件都会由 Pilot 设置流量规则和配置后交由 Envoy 通过 15001/15006 进行转发。

Rainbond 云原生应用管理平台,实现微服务架构不用改代码,管理 Kubernetes 不用学容器,帮企业实现应用上云,一站式将任何企业应用持续交付到 Kubernetes 集群、混合云、多云等基础设施。是 Rainstore 云原生应用商店的支撑平台。

1. Rainbond 官网

2. Rainbond 安装使用

3. Rainbond 参考手册全集

以上就是Rainbond的ServiceMesh架构组件端口冲突处理解决的详细内容,更多关于Rainbond ServiceMesh端口冲突解决的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Rainbond内置ServiceMesh微服务架构

    目录 ServiceMesh 微服务架构对比 为何使用ServiceMesh ServiceMesh相对其他微服务架构优势 最大层度透明 学习成本低 架构灵活 ServiceMesh架构性能 ServiceMesh只对网络进行治理么? Rainbond与ServiceMesh ServiceMesh 一般的字面解释是“服务网格”,作为时下最流行的分布式系统架构微服务的动态链接器,处于服务到服务的通信的专用基础设施层,该层独立于应用程序为服务之间的通信提供轻量级的可靠传递. 如果简单的描述的话,可

  • Rainbond使用Dockerfile构建便捷应用运行流程

    目录 Dockerfile构建运行镜像 Dockerfile构建运行镜像 Rainbond平台支持直接通过Dockerfile**构建并运行镜像,操作流程简单,方便进行持续迭代. 操作流程分为以下几步: 在Github上创建Dockerfile项目,Demo项目 Dockerfile内容 ARG VERSION=1.15.0 FROM nginx:${VERSION}-alpine COPY index.html /usr/share/nginx/html/ VOLUME /data EXPOS

  • Rainbond网络治理插件ServiceMesh官方文档说明

    目录 ServiceMesh网络治理插件 插件实践​ 综合网络治理插件​ 入站方向​ 出站方向​ 出站网络治理插件​ ServiceMesh网络治理插件 5.1.5版本后,Rainbond默认提供了综合网络治理插件(同时处理入站和出站网络)和出站网络治理插件两个插件可用. 网络治理插件工作在与业务容器同一个网络空间之中,可以监听一个分配端口,拦截入站的业务流量进行限流.断路等处理再将流量负载到业务服务的实际监听端口之上. 同时也可以工作在出站方向,业务服务需要访问上游服务时,通过访问本地出站治理

  • Rainbond对微服务进行请求速率限制详解

    目录 前置条件 操作流程 常见问题 Rainbond 默认支持基于 envoy 的全局速率限制.在 Rainbond 默认提供的综合网络治理插件中呈现.本文我们将一个用例呈现 Rainbond 中全局速率限制的使用方式. 前置条件 Rainbond平台已部署完成. 在Rainbond中部署可访问的 Demo 业务. 为此组件开通综合网络治理插件. 参考视频 https://player.bilibili.com/player.html?aid=540728010 Rainbond 速率限制设置参

  • Rainbond上部署API Gateway Kong及环境配置教程

    目录 什么是Kong 从应用市场快速安装 注意事项 配置Kong 环境变量 注入Nginx配置 注入单个Nginx配置 通过注入的Nginx指令包含文件 Kong应用怎么制作 数据库自动初始化 部署Kong 部署Konga 发布应用 什么是Kong Kong是一个可扩展的开源API平台(也称为API网关,API中间件或微服务服务网格).Kong最初是由Kong Inc.(以前称为Mashape)实现的,用于为其API Marketplace维护.管理和扩展超过15,000个微服务,这些微服务每月

  • Rainbond配置组件自动构建部署官方文档讲解

    目录 前言 前提条件 基于源代码操作流程 1.开启组件 Git-Webhook 2.配置代码仓库 基于镜像仓库操作流程 1.开启镜像仓库 Webhook 自动构建 2.Tag 触发自动修改策略 3.配置镜像仓库 API 触发自动构建 前言 通过自动构建的功能,可以实现代码或镜像提交后组件自动触发构建和部署,Rainbond 提供了基于代码仓库 Webhooks.镜像仓库 Webhooks 和自定义 API 三种方式触发组件自动部署.自动构建的功能可以辅助开发者便捷的实现敏捷开发. 前提条件 组件

  • Rainbond的ServiceMesh架构组件端口冲突处理解决

    目录 组件间的通讯问题 方式一:通过HTTP 7层网络治理进行端口复用 方式二:动态变更组件的监听端口 方式三:使用 Kubernetes 原生 Service 治理模式 方式四:使用 Istio 网络治理模式 组件间的通讯问题 在我们部署具有多个服务的分布式业务时,必须要考虑的一点就是如何处理服务之间的通信问题,那么当我们将业务部署到Rainbond 上时,又是如何去处理的呢? Rainbond 开箱即用的ServiceMesh架构默认通过 Sidecar 代理的方式,为我们透明的解决了分布式

  • nginx 与后台端口冲突的解决

    问题: 在起alice管理系统的开发环境的时候,发现后台所有的接口在第一次请求的时候全部产生404错误,但第二次请求成功 定位问题 查看nginx 报错日志发现如下报错,因此错误的认为错误发生在html的文件夹权限不够导致的文件无法写入,于是开放权限之后发现还是不行,在Google一番查找还是没找到解决方案.暂时搁置,第二天重新找错时,无意的点开8081端口,当你访问localhost:8081与127.0.0.1:8081的内容竟然不同. 当时发觉是不是端口冲突了,于是打开文件下面是nginx

  • Android架构组件Room的使用详解

    Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的. Room有3个主要组件 Database :数据库 Entity : 代表数据库一个表结构 Dao : 包含访问数据库的方法 简单使用 添加Google Maven仓库 allprojects { repositories { jcenter() google() } } 添加依赖 dependencies { // Room i

  • Android架构组件Room指南

    一.简介 Room是Google推出的Android架构组件库中的数据持久化组件库, 也可以说是在SQLite上实现的一套ORM解决方案. Room主要包含三个部分: Database : 持有DB和DAO Entity : 定义POJO类,即数据表结构 DAO(Data Access Objects) : 定义访问数据(增删改查)的接口 其关系如下图所示: Room Architecture Diagram 二.基本使用 1. 创建Entity 1.1 一个简单的Entitiy 一个简单Ent

  • 解决grails服务端口冲突的办法(grails修改端口号)

    启动第二个服务时就会报如下的错误: Server failed to start for port 8080: Address already in use: JVM_Bind (Use --stacktrace to see the full trace) 要解决这个错误,就需要为这个应用定义一个不同的端口就可以. 具体方法如下: 修改BuildConfig.groovy文件: 复制代码 代码如下: grails.server.port.http=9090 这样就为应用定义了一个9090端口的

  • Android 生命周期架构组件使用方法

    Support Library 26.1+ 直接支持生命周期架构组件.使用该组件,Android 生命周期的梦魇已经成为过去.再也不用担心出现 Can not perform this action after onSaveInstanceState 这样的异常了. 笔者封装了一个简化使用该组件的辅助类,大约 70 行代码: public class LifecycleDelegate implements LifecycleObserver { private LinkedList<Runna

  • 解决Nginx端口冲突的排查方法示例

    问题描述 一个Spring + Angular前后端分离的项目,使用Nginx进行数据转发. Nginx监听端口8100,前台端口4200,后台端口8080. 像往常一样,提前配置好MySQL.配置好Redis,引入项目的Nginx配置文件,然后启动前台.后台,成功. 接下来出现了问题:前台发起的请求,只有极少数能被后台接收到,大部分都是404,随着在浏览器中的点击,控制台不断的出现404. 如果只是404,那问题就很简单,很大可能是Nginx端口转发设置错了.但它的神奇之处就在于,还有那么几次

  • Android Jetpack架构组件Lifecycle详解

    前言 Lifecycle是Jetpack架构组件中用来感知生命周期的组件,使用Lifecycles可以帮助我们写出和生命周期相关更简洁更易维护的代码. 生命周期 生命周期这个简单而又重要的知识相信大家早已耳熟能详.假设我们现在有这样一个简单需求: 这个需求只是一个实例,在真实的开发中当然不可能有这样的需要: 在Activity 可见的时候,我们去做一个计数功能,每隔一秒 将计数加1 ,当Activity不可见的时候停止计数,当Activity被销毁的时候 将计数置为0 OK,So easy~ ,

  • Android Jetpack架构组件 ViewModel详解

    前言 前面两篇文章我们已经学习了Lifecycle和DataBind,本篇文章我们来学习Jetpack系列中比较重要的ViewModel,Jetpack的很多很多组件都是搭配使用的,所以单独的知识点可能会有些"无意义"但却是我们项目实战的基础! ViewModel的使用 ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据.ViewModel类让数据可在发生屏幕旋转等配置更改后继续存在.这句话很好理解,还记得我们在讲解Lifecycle的时候 举的例子吗,我们还是使用那

  • 模板视图和AngularJS之间冲突的解决方法

    本文实例讲述了模板视图和AngularJS之间冲突的解决方法.分享给大家供大家参考,具体如下: 问题: 在php的mvc视图中,我们需要在加载的过程中 传递一些数据给模板: 如: 这里是某个 controller $data['users'] = {something from databases}; $this->load->view('home/index',$data); 这里是对应的视图 <div ng-controller="loadData"> &l

随机推荐