-
现在公司项目基于spring-cloud-alibaba,注册中心用的nacos,但服务调用没有用openfeign,用的dubbo调的(也是注册到nacos,没有用zookeeper),如图:现在要迁移到华为云,使用CSE的注册中心和配置中心,这一块倒没有问题,官方有文档,就是不知道迁移过去dubbo这一块的配置应该怎么搞,官网只有个基于纯dubbo项目迁移CSE的方案(https://support.huaweicloud.com/devg-cse/cse_devg_0011.html),按照文档说明引入对应maven依赖,就直接报错:
-
漏洞名称 : Apache Dubbo Hessian-Lite 反序列化漏洞组件名称 : Apache Dubbo Hessian-Lite影响范围:Apache Dubbo 2.6.x < 2.6.12Apache Dubbo 2.7.x < 2.7.15Apache Dubbo 3.0.x < 3.0.5漏洞类型:反序列化利用条件:1、用户认证:未知2、前置条件:未知3、触发方式:远程综合评价:<综合评定利用难度>:未知。<综合评定威胁等级>:高危,能造成远程代码执行。漏洞分析:1、组件介绍Apache Dubbo 是一款高性能、轻量级的开源 java Rpc 分布式服务框架。核心功能有面向接口的远程过程调用、集群容错和负载均衡、服务自动注册与发现。其特点主要在以下几个方面。使用分层的架构模式,使得各个层次之间实现最大限度的解耦。将服务抽象为服务提供者与服务消费者两个角色。2、漏洞描述近日,监测到一则 Apache Dubbo 组件存在反序列化漏洞的信息,漏洞编号:CVE-2021-43297,漏洞威胁等级:高危。该漏洞是由于 Apache Dubbo 在反序列化数据出现异常时 Hessian 会记录用户的信息,攻击者可以构造恶意数据,最终导致远程代码执行,获取服务器最高权限。影响范围:Apache Dubbo 作为一款高性能、轻量级的开源 Java 服务框架,当前可能受漏洞影响的资产广泛分布于世界各地,国内主要集中在广东、江苏、河北等省份地区。目前受影响的 Apache Dubbo 版本:Apache Dubbo 2.6.x < 2.6.12Apache Dubbo 2.7.x < 2.7.15Apache Dubbo 3.0.x < 3.0.5解决方案:1 、如何检测组件版本方案一全盘搜索dubbo,如果存在dubbo-{version}.jar则用户可能受漏洞影响。方案二如果项目是由maven编译的(一般在项目根目录下会有pom.xml)打开pom.xml文件,:在此文件中搜索dubbo,如果可以搜索到关键字,并且<version>标签内部的字段在:2.6.0版本及以上并且小于2.16.12或2.7.0版本及以上并且小于2.7.15或3.0.0版本及以上并且小于3.0.5,则可能受到漏洞的影响。(图中的dubbo的版本是2.7.13,在漏洞影响范围内)如以上检索均未发现结果,不能够完全下结论一定没有使用 dubbo 组件 ,建议联系开发人员进一步核实。2、官方修复建议当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:https://dubbo.apache.org/en/blog/2020/05/18/past-releases/参考链接:https://lists.apache.org/thread/1mszxrvp90y01xob56yp002939c7hlww
-
一、概要近日,华为云关注到国外安全研究人员披露了Apache Dubbo多个高危漏洞细节,攻击者利用漏洞可实现远程代码执行,目前漏洞利用细节已被公开,风险较高。CVE-2021-36162:YAML 反序列化漏洞,Apache Dubbo多处使用了yaml.load,攻击者在控制如ZooKeeper注册中心后可上传恶意配置文件从而造成了Yaml反序列化漏洞;CVE-2021-36163:Hessian协议反序列化漏洞,使用了不安全的Hessian 协议,攻击者利用漏洞触发反序列化,造成远程代码执行。Apache Dubbo是一款应用广泛的高性能轻量级的Java RPC分布式服务框架。华为云提醒使用Apache Dubbo的用户及时安排自检并做好安全加固以降低安全风险。参考链接:https://securitylab.github.com/advisories/GHSL-2021-094-096-apache-dubbo/二、威胁级别威胁级别:【严重】(说明:威胁级别共四级:一般、重要、严重、紧急)三、漏洞影响范围影响版本:Apache Dubbo =< 2.7.10安全版本:Apache Dubbo 2.7.13四、漏洞处置目前Apache Dubbo官方已发布补丁,请受影响的用户及时升级至安全版本。CVE-2021-36162:https://github.com/apache/dubbo/pull/8350CVE-2021-36163:https://github.com/apache/dubbo/pull/8238注:修复漏洞前请将资料备份,并进行充分测试。
-
漏洞描述:Apache Dubbo是一款应用广泛的Java RPC分布式服务框架。2021年6月24日,国外安全研究人员披露Apache Dubbo多个高危漏洞详情:CVE-2021-25641 中,攻击者可利用其他协议绕过Hessian2黑名单造成反序列化。CVE-2021-30179 中,Apache Dubbo Generic filter存在过滤不严,攻击者可构造恶意请求调用恶意方法从而造成远程代码执行。 CVE-2021-32824 中,Apache Dubbo Telnet handler在处理相关请求时,允许攻击者调用恶意方法从而造成远程代码执行。CVE-2021-30180中,Apache Dubbo多处使用了yaml.load,攻击者在控制如ZooKeeper注册中心后可上传恶意配置文件从而造成了Yaml反序列化漏洞。 CVE-2021-30181中,攻击者在控制如ZooKeeper注册中心后可构造恶意请求注入Nashorn脚本,造成远程代码执行。 应急响应中心提醒 Apache Dubbo 用户尽快采取安全措施阻止漏洞攻击。漏洞评级:CVE-2021-25641 Apache Dubbo Hessian2 协议反序列化漏洞 高危 CVE-2021-30179 Apache Dubbo Generic filter 远程代码执行漏洞 高危 CVE-2021-32824 Apache Dubbo Telnet handler 远程代码执行漏洞CVE-2021-30180 Apache Dubbo YAML 反序列化漏洞 高危 CVE-2021-30181 Apache Dubbo Nashorn 脚本远程代码执行漏洞 高危漏洞细节漏洞PoC漏洞EXP在野利用公开公开公开未知影响版本:Apache Dubbo < 2.7.10Apache Dubbo < 2.6.10安全版本:Apache Dubbo 2.7.10Apache Dubbo 2.6.10安全建议:1、升级 Apache Dubbo 至最新版本。2、利用安全组功能设置Apache Dubbo 相关端口仅对可信地址开放。相关链接:https://securitylab.github.com/advisories/GHSL-2021-034_043-apache-dubbo/
-
Dubbo和CSE底层都使用了Spring的依赖注入和bean管理系统,所以使用Dubbo的服务迁移到华为云微服务引擎CSE的工作量较小, 主要改动在依赖和配置方面。本示例的完整代码已放在GitHub上,其中目录dubbo-demo是原始的Dubbo DEMO,目录dubbo-demo-servicecomb是改造后的可直接运行于华为云CSE的DEMO。1、管理依赖:/dubbo-demo/pom.xml在主项目pom里的dependencyManagement中增加如下配置来管理CSE包依赖,子项目就不需要指定CSE版本号。 <dependencyManagement> <dependencies> <dependency> <groupId>com.huawei.paas.cse</groupId> <artifactId>cse-dependency</artifactId> <version>2.3.9</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>注意,maven的settings需添加cse的mirror才能正常下载到cse的相关依赖包: <mirror> <id>nexus-cse</id> <mirrorOf>*</mirrorOf> <name>cse nexus</name> <url>http://maven.huaweicse.com/nexus/content/groups/public</url> </mirror>2、服务提供方:dubbo-demo-provider2.1、替换依赖:/dubbo-demo-provider/pom.xml将对Dubbo的依赖替换为对CSE的依赖pom.xmlDubbo <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.7</version> </dependency>CSE <dependency> <groupId>com.huawei.paas.cse</groupId> <artifactId>cse-solution-service-engine</artifactId> </dependency>2.2、通过添加标签的方式发布服务接口:DemoServiceImplDubbopublic class DemoServiceImpl implements DemoService { ......}CSE@RpcSchema(schemaId = "providerSchema")public class DemoServiceImpl implements DemoService { ......}2.3、修改配置:/dubbo-demo-provider/src/main/resources删除:/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml新增:/dubbo-demo-provider/src/main/resources/META-INF/spring/demo.bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:cse="http://www.huawei.com/schema/paas/cse/pojo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.alibaba.dubbo.demo" /></beans>新增:/dubbo-demo-provider/src/main/resources/microservice.yamlAPPLICATION_ID: dubbo_servicecombservice_description: name: provider version: 0.0.1cse: service: registry: address: https://cse.cn-north-1.myhuaweicloud.com:443 rest: address: 0.0.0.0:8082 credentials: accessKey: 替换为华为云IAM账号AK(如何获取AK/SK) secretKey: 替换为华为云IAM账号SK akskCustomCipher: default project: cn-north-12.4、修改提供方启动入口Dubbopublic class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"}); context.start(); System.in.read(); // 按任意键退出 }}CSEpublic class Provider { public static void main(String[] args) throws Exception { Log4jUtils.init(); BeanUtils.init(); }}3、服务消费方:dubbo-demo-consumer3.1、替换依赖:/dubbo-demo-consumer/pom.xml将对Dubbo的依赖替换为对CSE的依赖Dubbo <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.7</version> </dependency>CSE <dependency> <groupId>com.huawei.paas.cse</groupId> <artifactId>cse-solution-service-engine</artifactId> </dependency>3.2、修改消费方启动入口Dubbopublic class Consumer { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"}); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); String hello = demoService.sayHello("world"); System.out.println(hello); }}CSEimport org.springframework.stereotype.Component;@Componentpublic class Consumer { @RpcReference(microserviceName="provider", schemaId="providerSchema") private static DemoService demoService; public static void main(String[] args) throws Exception { Log4jUtils.init(); BeanUtils.init(); String hello = demoService.sayHello("world"); System.out.println(hello); }}3.3、修改配置:/dubbo-demo-comsumer/src/main/resources删除:/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml新增:/dubbo-demo-consumer/src/main/resources/META-INF/spring/demo.bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:cse="http://www.huawei.com/schema/paas/cse/pojo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.alibaba.dubbo.demo" /></beans>新增:/dubbo-demo-consumer/src/main/resources/microservice.yamlAPPLICATION_ID: dubbo_servicecombservice_description: name: consumer version: 0.0.1cse: service: registry: address: https://cse.cn-north-1.myhuaweicloud.com:443 rest: address: 0.0.0.0:8084 credentials: accessKey: 替换为华为云IAM账号AK(如何获取AK/SK) secretKey: 替换为华为云IAM账号SK akskCustomCipher: default project: cn-north-14、验证:先启动Provider,再启动Consumer4.1、进入华为云微服务引擎CSE控制台:微服务管理>服务治理>dubbo_servicecomb,看到如下服务调用关系:4.2、进入Consumer的输出控制台,能看到输出:Hello world————————————————文章来源: blog.csdn.net,作者:looook原文链接:https://blog.csdn.net/looook/article/details/80312804
-
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用,用法如下:<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" version="1.0.0" />利用dubbo该特性,我们能够实现一些功能的灰度发布,实现步骤如下:接口旧的实现定义version="1.0.0",接口新的实现version="2.0.0"Consumer端定义version="*"这样定义Provider和Consumer后,新旧接口实现各承担50%的流量;利用dubbo该特性,还能完成不兼容版本迁移:在低压力时间段,先升级一半Provider为新版本;再将所有消费者升级为新版本;然后将剩下的一半提供者升级为新版本。
-
上一篇我们介绍了ServiceComb内置的负载均衡组件handler-loadbalance,本篇我们将介绍Service-Center使用入门。 一. Service-Center 是什么ServiceCenter是一个服务注册中心。服务提供者可以将自身的实例信息注册到 ServiceCenter,以供服务消费者发现并使用它。 二. 为什么使用Service-Center在微服务架构中,一个应用由一组职责单一化的服务组成,各个服务被动态的部署到不同的节点。面对这样一组服务,应该如何去管理服务之间的依赖关系呢? 服务注册中心的出现正是为了解决这样的问题,它提供的注册机制,允许服务提供者将自己的信息登记到中心;提供的发现机制,供服务消费者从中心查找服务提供者信息。 服务注册中心优点:1.解耦服务提供者与服务消费者,服务消费者不需要硬编码服务提供者地址。2.服务动态发现及可伸缩能力,服务提供者实例的动态增减能通过注册中心动态推送到服务消费者端。3.通过注册中心可以动态的监控服务运行质量及服务依赖,为服务提供服务治理能力。 三. 注册发现流程如上图,Service-Center中服务发现流程大致有以下几个步骤:服务提供者向Service-Center注册服务信息服务提供者发送心跳,维持在Service-Center中的“UP”状态服务消费者向Service-Center注册服务信息服务消费者从Service-Center发现服务提供者信息服务消费者向服务提供者发送请求,并获取通讯结果•Service-Center注册发现接口基于RESTful标准实现,不受开发语言限制,实现对应接口可以参考官方API文档:https://rawcdn.githack.com/ServiceComb/service-center/master/docs/api-docs.html•Service-Center提供了简单注册与发现的Client,其中封装了API实现,可直接使用,具体可查看:https://github.com/apache/servicecomb-service-center/tree/master/pkg/client/sc 四. 使用Service-Center为了更好的理解流程,下面我们将通过“helloword”的示例,实现基于Service-Center的注册发现,并完成Consumer与Provider之间的通讯。以下仅展示了主要流程代码,完整示例请参考:https://github.com/ChinX/service-center-demo/tree/simple-demo 1.目录参考创建名为“helloworld”的项目,以下为参考目录结构:2. 服务提供端实现新建服务提供端配置文件: helloworld/rest/provider/conf/microservice.yaml新建项目入口文件: helloworld/rest/provider/provider.go01.在main函数中完成启动流程:02.启动服务提供端http监听03.向Service-Center注册自身服务,其中包含微服务创建、实例注册、心跳保活三个部分,具体代码如下:3. 服务消费端实现配置文件: helloworld/rest/provider/conf/microservice.yaml入口文件: helloworld/rest/consumer/consumer.go01.在main函数中完成启动流程:02.从Service-Center服务发现服务提供端,涉及创建服务、服务发现接口:03.请求接口“/hello”完成与服务提供端的通讯 4. 构建编译以下基于 go 1.11+ 进行构建,请检测自身 go 环境。进入 service-center-demo 目录: 五. 功能验证1. 安装启动 Service-Center从Service-Center官网获取二进制包:http://servicecomb.apache.org/release/ ,解压并运行二进制执行如上命令并得到对应的反馈信息,则说明安装部署成功。2. 启动 provider输出信息分析:服务提供端启动并监听了本地8080端口成功创建微服务服务,并打印了返回的serviceId成功注册自身实例,并打印了返回的instanceId服务提供端在启动30秒后,成功发送了一次心跳3. 启动 consumer输出信息分析:服务消费端成功创建微服务服务,并打印了返回的serviceId服务消费端成功发现provider实例,并打印了返回的provider endpoints服务提供端成功向服务提供端发送请求,并获得返回的信息“hello world”此时查看provider端控制台,若出现“2019/02/17 21:13:02 request from consumer”类似字样的打印,则说明provider端接收到consumer端的请求,共同印证了通讯的成功。 文末小结本文向社区读者从用户角度阐述了ServiceCenter的基本使用方法,完成最简单的服务注册与发现。 我们也非常欢迎爱好者们向社区提问和贡献代码:) 下篇将介绍ServiceCenter的架构与启动流程介绍。 如在阅读代码时有任何疑问想交流,欢迎扫码加入进微信群。扫描二维码添加微服务小助手期待志同道合的朋友们加入ServiceComb的大门为你们敞开~用心做开源,不忘初衷 前期阅读[学习微服务-第8天] ServiceComb内置负载均衡组件handler-loadbalance[学习微服务第7天] ServiceComb+SpringCloud Ribbon源码解读[学习微服务-第6天] 负载均衡之ServiceComb + SpringCloud Ribbon[学习微服务-第5天]ServiceComb+Zipkin源码解读[学习微服务-第4天]ServiceComb+Zipkin[学习微服务-第3天] ServiceComb内置高性能网关服务[每天学习微服务-源码解读] ServiceComb+SpringCloud Zuul[每天学习微服务-网关]ServiceComb+SpringCloud Zuul 了解更多信息请访问: 官方网站 ↓↓↓http://servicecomb.apache.org/ Github代码仓库↓↓↓https://github.com/apache?q=ServiceComb
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名
热门标签