Rainbond ServiceMesh架构组件端口冲突处理方式
在我们部署具有多个服务的分布式业务时,必须要考虑的一点就是如何处理服务之间的通信问题,那么当我们将业务部署到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 云原生应用商店的支撑平台。
本文作者:刘帅

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
RxJava简析
rxjava文档地址https://mcxiaoke.gitbooks.io/rxdocs/content/这个是中文版的 android studio 添加依赖implementation 'io.reactivex.rxjava3:rxjava:3.0.4' 首先,打印helloworld: public void hello(String args){ Flowable.fromArray(args).subscribe(s -> System.out.println("hello " + s + "!"));} 跟以前其他语言不大一样,看上去很麻烦,我们一步步来看 Flowable.fromArray(args) 这个方法最重要的就是里面的最后一句 new FlowableFromArray<>(items) 果然FlowableFromArray是Flowable的子类,所以真正的实现在子类里面 Flowable.fromArray(args).subscribe subscribe进到里面的是 public final Disposable subscri...
- 下一篇
SpringCloud中Zuul网关原理及其配置,一篇看懂!
作者:kosamino cnblogs.com/jing99/p/11696192.html 正文 Zuul是spring cloud中的微服务网关。网关:是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。 Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。 Zuul网关不是必要的。是推荐使用的。 使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。 一、Zuul网关的作用 网关有以下几个作用: 统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。 动态路由:动态的将请求路由到不同的后端集群中。 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。 二、Zuul网关的应用 1、网关访问方式 通过zuul访问服务的,URL地址默认格式为:http://z...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装