云原生网络代理 MOSN 透明劫持技术解读 | 开源

运营商劫持(DNS/HTTP302) 本人以网络技术出身,近两年接触CDN网络,处理了一些CDN方面的网络问题,大多数以运营商丢包,延迟抖动为主,也处理一些硬件故障,比如机械硬盘的读写io测试,内存条兼容性测试,服务器IPMI规划等。这篇文章打算把自己对运营商对资源请求的劫持写下来,这个其实不是很罕见的事例,也不是网上找不到解决办法,也不是无法理解的尖钻技术,只是罗列一下自己的所知。CDN网络访问拓扑既然提到了CDN网络,那就顺带提一... 阅读详情

MOSN 是一款使用 Go 语言开发的网络代理软件,作为云原生的网络数据平面,旨在为服务提供多协议、模块化、智能化、安全的代理能力。MOSN 是 Modular Open Smart Network-proxy 的简称,可以与任何支持 xDS API 的 Service Mesh 集成,亦可以作为独立的四、七层负载均衡、API Gateway、云原生 Ingress 等使用。 

MOSN:https://github.com/mosn/mosn

在由 Istio 定义的 Service Mesh 体系中,服务治理相关逻辑由独立的 Sidecar 进程处理,如服务发现、故障注入、限流熔断等等。这些处理逻辑是 Service Mesh 着重要解决的问题。通常在谈论到 Service Mesh 时,会优先关注在这些点上,但是在落地过程中,有一个问题同等重要但往往容易被忽视。这个问题概括起来,就是流量是如何被导入到 Sidecar 的监听端口的。

在数据平面的 Sidecar 中拦截进出应用容器的流量,这一直以来就是 Istio Service Mesh 中一切功能的基础,如何实现透明高效的拦截也是 Service Mesh 设计中的一大难点,本文为大家介绍云原生网络代理 MOSN 是如何做到这一点的。

流量接管

如果服务注册/发布过程能够允许适当的修改,这个问题会得到极大的简化,比如服务发布方 Sidecar 将地址修改为 127.0.0.1:15001,订阅方 Sidecar 监听本机 15001 端口,当订阅方访问 127.0.0.1:15001 时,流量就自然到达了本端 Sidecar。在这种情况下,无需在网络层面使用重定向技术就可以达到目的。

服务发布订阅修改逻辑框图

流量转发流程图

如上图中,在发布服务时,Sidecar 将服务端原本的地址转换为 Sidecar 自身的端口;服务订阅时,订阅方获取到的端口则是本地 Sidecar 监听的端口。这一方案的优势很明显,逻辑都收敛在了 Sidecar 中,除了需要对 Sidecar 服务注册/发布流程进行改造外,不需要其他组件的参与,但是缺点也很明显,如果业务模型不存在注册中心,或者是服务发布/订阅 SDK 不能进行改造,这个方案就行不通了,而在 Mesh 落地场景中,这个条件恰恰较难满足。

目前大多数业务的逻辑架构都不符合 Istio 定义的云原生体系,为了享受到 Service Mesh 在服务治理方面的优势,需要选择合适的流量劫持方案。一般而言,流量劫持工作在 L4 层,在进行劫持技术选型时需要考虑三个方面的问题:

  • 第一是环境适配,包括容器、虚拟机、物理机、内核、系统发行版等方面的考虑,确保劫持方案在运行环境中能够正常工作;

  • 第二是控制灵活简单,包括如何维护劫持规则,劫持规则如何下发等;

  • 第三是性能,确保在业务运行期间,劫持本身不会带来过大的开销;

下面将从这三个层面分析 MOSN 在落地过程中的一些思考。

环境适配

在环境适配性上,最容易想到的是 iptables,作为一项古典网络技术,iptables 使用简单,功能灵活,几乎所有现代生产级内核版本与 OS 发行版都默认具备使用条件,Istio 社区也使用 iptables 做流量透明劫持。

iptables 流量劫持原理图

尽管环境适应性强,但是基于 iptables 实现透明劫持存在以下问题:

  • DNAT 模式下,需要借助于 conntrack 模块实现连接跟踪,在连接数较多的情况下,会造成较大的消耗,同时可能会造成 track 表满的情况。为了避免这个问题,可以使用 TProxy 取代 DNAT,但受限于内核版本,TProxy 应用于 outbound 存在一定缺陷;

  • iptables 属于常用模块,全局生效,不能显式的禁止相关联的修改,可管控性比较差;

  • iptables 重定向流量本质上是通过 loopback 交换数据,outbond 流量将两次穿越协议栈,在大并发场景下会损失转发性能;

针对 oubound 流量,还可以使用 hook connect 来实现,如图所示:

hook connect 逻辑框图

无论采用哪种透明劫持方案,均需要解决获取真实目的 IP/端口的问题,使用 iptables 方案通过 getsockopt 方式获取,TProxy 可以直接读取目的地址,通过修改调用接口,hook connect 方案读取方式类似于 TProxy。

由于 MOSN 落地的场景十分复杂,有容器与 VM 甚至物理机环境,有基于 K8s 的云原生应用,有基于注册中心的微服务,也存在单体应用,有些场景对性能要求非常高,有些则是够用即可,针对不同的场景,我们选择不同的劫持方案进行适配。如果应用程序通过注册中心发布/订阅服务时,可以结合注册中心劫持流量;在需要用到透明劫持的场景,如果性能压力不大,使用 iptables DNAT 即可,大并发压力下使用 TProxy 与 sockmap 改善性能。

配置管理

通常基于申明式体系构建的服务在部署时能够得到全局信息,而非申明式体系往往需要在运行期间进行动态的配置修改,由于缺乏全局信息,在运行期间很难获取到准确的服务间调用信息。在生成透明劫持规则时,我们需要明确哪些流量要被重定向到 Sidecar,否则一旦出错,而 Sidecar 又无法处理这部分流量时,将会使得 Sidecar 变成流量黑洞,比如,某一个容器内的 TCP 流量全部被重定向至 Sidecar,而该容器中存在一个使用私有协议承载应用数据的监控 Agent,而 Sidecar 不能识别该协议导致无法争取转发,只能选择丢弃。

通常情况下,为了确保 Sidecar 能够正确的转发流量,需要满足两个条件,首先是要能够正确识别协议,其次是需要配置转发规则,明确下一跳。对于不满足这两个条件的流量,不应将其重定向至 Sidecar。对于现有的非云原生应用,同时满足这两个条件的代价非常高,比如,某个虚拟机上运行了一个业务,同时还运行了收集 Metrics 的 Agent、日志采集工具、健康检查工具等等。而基于 L4 规则很难精确的将业务流量重定向至 Sidecar,如果多个业务混部,可能导致无法在 L4 层进行业务流量的区分。总结起来,为了精确的把流量引至 Sidecar,需要获得全局的调用关系,这一目标原本应该由 Service Mesh 来完成,而在流量劫持的场景下,却成为了 Service Mesh 的前提。

为了使用 Service Mesh 而引入大量的部署运维开销是得不偿失的。在落地的过程中,MOSN 引入了多项手段来降低流量劫持的配置难度。我们将需要精确配置重定向规则的工作模式定义为精确匹配,与之相对应的是模糊匹配,即不要求精确区分出需要劫持的流量。降低配置难度的关键在于取消对于精确规则的依赖,在配置模糊规则的前提下,既做到对于关心的业务流量的治理,同时也不影响非业务流量的正常流程。

我们采用 L4 规则与 L7 规则融合的方式下发模糊的匹配规则,此规则下除了包含关心的业务流量外,还可能包含预期之外的非业务流量。对于业务流量,Sidecar 根据相应的服务治理规则处理,而对于非业务流量,则保持其默认行为不变。在模糊匹配模式下,仅需要为关心的流量配置服务治理与转发规则,而无需关心 miss match 导致流量黑洞。在模糊匹配之外,MOSN 仍然保留了精确匹配能力,可以通过配置项禁用模糊匹配,能够兼容之前的工作模式。

MOSN 流量劫持模糊匹配逻辑框图

为了支持更加灵活的配置手段,在配置模糊匹配规则时,支持默认白名单与默认黑名单两种模式。默认黑名单模式适合业务场景简单,业务流量特征明显的场景,由于劫持逻辑的输入流量少,性能损耗小。默认白名单模式适合业务特征明显不明显的场景,由于劫持逻辑的输入流量多,可能存在一定的性能损耗,在这种模式下,可以显示加入黑名单排除相应的流量,比如通常业务不会使用除了 80 之外的小于 1024 的端口。

MOSN 通过模糊规则匹配的手段极大降低了流量劫持的管理成本,在部署 Service Mesh 时,仅需要“大体上正确”即可,无需担心没有完全枚举流量规则而产生流量黑洞,而借助于 Service Mesh,可以得到全局的服务调用信息,进而能够对现有服务进行精细化的治理。

数据面性能

iptables 存在一个固有问题是在匹配规则数量增多时,匹配消耗会随之增加,在规则数量较多的情况下,会对新建连接性能造成较大的影响,为了避免这种情况,可使用 ipset 降低匹配消耗。此外,在内核版本满足要求(4.16 以上)的前提下,通过 sockmap 可以缩短报文穿越路径,进而改善 outbound 方向的转发性能。

在讨论流量劫持的性能损耗时,需要结合具体的场景来看,比如某些场景中只有 iptables dnat 能够满足环境适配的要求,在这种情况下,需要考虑的是 iptables dnat 的数据面性能是否能够满足业务的需求。实际落地过程中,需要结合实际情况与运维难度选择劫持手段。

总结

本文主要为大家介绍云原生网络代理 MOSN 是如何实现透明高效的拦截的。降低劫持规则的管理成本,使得 Service Mesh 的引入不会造成额外的负担,在落地过程中,可以更加专注在业务逻辑上,能够充分满足多语言,多环境下的服务治理需求。

流量劫持技术的发展与 Service Mesh 的落地密切相关,后续我们将围绕环境适配性、低时延、低管理成本等方面持续演进,构建由 DNAT、TProxy、tc redirect、sockmap 等技术组成的多模单体底座,在不同内核环境、不同性能要求、不同管理成本的场景中自适应选取最合适的劫持技术,不断降低 Service Mesh 的接入成本。

如果大家对 MOSN 有问题以及建议,欢迎与我们交流,也非常欢迎加入 MOSN 开源社区的共建。

MOSN:https://github.com/mosn/mosn

MOSN 官网:https://mosn.io/

本文归档在 sofastack.tech。

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“T 恤”,试试手气~

* 本期互动奖品“SOFAStack T 恤”

mosn:MOSN是用于边缘或服务网格的云原生代理。 https MOSN是用Golang编写的网络代理。 它可以用作云原生网络数据平面,为服务提供以下代理功能:多协议,模块化,智能和安全。 MOSN是模块化开放式智能网络代理的简称。 MOSN可以与任何支持xDS API的服务网格集成。 它也可以用作独立的第4层或第7层负载平衡器,API网关,云原生Ingress等。 特征 作为一个开源网络代理,MOSN具有以下核心功能: 通过与Service Mesh集成的xDS API支持完整的动态资源配置。 支持具有TCP,HTTP和RPC协议的代理。 支持丰富的路由功能。 支持可靠的上游管理和负载平衡功能。 支持网络和协议层的可观察性。 在TLS上支持mTLS和协议。 支持丰富的扩展机制,以提供高度可定制的扩展功能。 支持过程顺利升级。 下载并安装 使用go get -u mosn.io/mosn ,也可以将存储库git复制到$GOPATH/sr 立即下载

相关推荐

tc-redirect-tap

tc-redirect-tap tc-redirect-tap是一个插件。 使用此插件,您可以将现有的CNI插件/配置适配到Tap设备。 该插件最初是作为的一部分开发的,可与Firecracker一起使用。 问题? 请使用来报告问题,讨论路线图项目或提出功能请求。 安全披露 如果您认为已发现潜在的安全问题,请不要将其发布在“问题”中。 相反,请按照的说明进行操作或。 执照 该项目已获得Apache-2.0许可证的许可。

使用Linux Tc实现入向和出向限速

使用linux TC 实现入向和出向限速的方法,和ipv6限速方式。

cpf945的博客 5938

基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)

基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际上内容并未围绕Plecs或全桥LLC谐振变换器展开详细论述,而是罗列了大量基于Matlab/Simulink和Python的科研仿真项目标题及相关技术方向,涵盖电力系统、无人机控制、微电网优化、路径规划、状态估计、信号处理、电动汽车调度、电力电子变换器等多个领域。其中包括多种优化算法(如粒子群、遗传算法、NSGA-II)、控制策略(如PID、MPC、滑模控制)、仿真建模(如LLC谐振变换器、DAB变换器、PWM整流器)以及具体应用场景的研究实现。尽管提及“隔离型全桥LLC谐振变换器建模及参数设计资料”,但全文缺乏对该主题的具体描述、模型细节或仿真分析,仅作为条目之一出现。因此,该文档实质是一份科研项目资源清单或代码合集目录,而非针对某一主题的深入文章。; 适合人群:具备一定Matlab/Simulink或Python编程基础,从事电气工程、自动化、控制科学、电力电子、新能源系统等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①为科研工作者提供丰富的课题参考与复现资源,涵盖优化调度、控制系统设计、电力电子仿真等方向;②辅助完成硕士/博士论文、期刊论文复现、课程设计或项目开发,提升研究效率与创新性;③通过已有模型和代码快速搭建仿真平台,聚焦算法改进与性能优化。; 阅读建议:此文档应作为科研资源索引使用,读者可根据自身研究方向筛选相关条目,结合配套代码与参考资料进行深入学习与实践。对于希望研究全桥LLC谐振变换器的用户,需注意本文档未提供完整内容,建议查找标注的“仿真+设计报告+计算书”等附件资源以获取详细信息。

HTTPS劫持

HTTPS劫持 https劫持分为代理劫持和透明劫持。 一、代理劫持https 这种https代理劫持在我们平时是用的很多的,比如Burp suite和Fiddler启动代理服务器,浏览器配置一个代理就可以抓包进行调试、漏洞测试了。 1.1必备知识 1.1.1 SNI 其中SNI包含了在ClientHello中,在TLS(SSL的升级版)开始支持设置 Server Name(网站的域名)。因为现在一个https服务器可能存在多个域名,而在 TLS 握手信息中并没有携带客户端要访问的目标地址,则无法确定该和那

weixin_45363315的博客 3861

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3318

AD9826的时序分析及Verliog代码

AD9826的时序分析及Verliog代码 (本文对AD9826的模式和时序进行了分析,如有错误敬请指正,关于这款ADC芯片的基本参数,本文不做过多介绍) 1、AD9826的模式 AD9826的采样模式主要有两种,一种是“CDS模式”,一种是“SHA模式”;在这两种模式下分别有1通道、2通道、3通道的采样模式 (1)CDS模式 简单的来说CDS模式就是,有两个采样时钟,一个是ADCCLK1,用来采样CCD波形的参考电平,一个是ADCCLK2用来采样数据电平,然后经过,偏移量调节,再经过PGA增益放大最

m0_50102488的博客 6476

技术风口上的限流

PART. 1站在风口上站在风口上的技术“服务网格”是什么?可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心...

金融级分布式架构 378

SAP PPDS启发式排产实战:从零配置到自定义规则开发(附ABAP代码示例)

本文详细介绍了SAP PPDS启发式排产的实战应用,从基础配置到自定义规则开发的全流程。通过ABAP代码示例,展示了如何实现多目标优化、实时响应和约束可视化,帮助企业提升订单交付率、减少设备闲置时间。文章还包含开发环境准备、标准模板解析、自定义开发步骤及性能优化技巧,适合制造业数字化转型的实践参考。

seed的博客 183

MOSN(Modular Open Smart Network)-08-MOSN 扩展机制解析

MOSN 扩展能力和扩展机制的详细介绍;结合示例对 MOSN 的 Filter 扩展机制与插件扩展机制进行详细介绍;MOSN 后续扩展能力规划与展望;欢迎大家有兴趣一起共建 MOSN。在本次演讲中涉及到的示例就在我们的 Github 的目录下,大家有兴趣的也可以下载下来运行一下,关于这些示例我们还做了一些小活动,也希望大家可以踊跃参与。MOSN 作为云原生的网络代理,旨在为服务提供多协议、模块化、智能化、安全的代理能力。

1525

学习STM32的ADC采集声音

为了采集声音信号,需要一个声音传感器(如麦克风),将声音信号转换为电压信号输入到 ADC 引脚。通过硬件准备、STM32CubeMX 配置和代码实现,我们可以实现将声音信号转换为数字信号,并进行后续处理。STM32 是一款广泛应用于嵌入式系统开发的微控制器平台,其拥有丰富的外设和强大的性能,非常适合进行 ADC(模拟数字转换)的声音采集。函数启动 ADC1 的连续转换模式,然后在一个无限循环中等待 ADC 转换完成,并读取采样结果。四、代码实现 在生成的代码中,会生成一些相关的库文件和示例代码。

m0_75244442的博客 2173

【20】方案管理器

方案管理器是Excel中一个非常强大且灵活的工具,适合用于多情景分析和比较。在复杂的决策过程中,它可以帮助用户快速管理和评估不同变量组合下的结果,从而优化决策过程。

学习,输出==》再学习再输出 1585

SOFA Weekly | SOFA 社区元旦快乐,MOSN 荣获 2020 中国优秀开源项目

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 242

教程: 将 SolidWorks 设计导出为 ROS 的 URDF

请按照以下步骤应用自定义徽标纹理:创建徽标材质文件:techniquepass材质名称:测试/材质颜色属性:环境、漫反射、镜面和发射都设置为白色(1 1 1 1),这意味着该材质看起来完全是白色的。纹理 在表面应用纹理图像 logo.png。将材质文件复制到 gazebo matrial:复制徽标图像:将 “徽标 ”替换为机器人上徽标所在位置的适当参考值。按照以上步骤,您就可以在 Gazebo 中为机器人添加自定义材质和纹理,包括徽标。

机器人控制与仿真应用 2458

SOFA Weekly | MOSN 发布新版本、 Seata QA 整理

SOFAWEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 239

Android 自动亮度

/则需要从BrightnessConfigure类中读取两个数组源:config_autoBrightnessLevels和config_autoBrightnessDisplayValuesNits。) 或知道其在DisplayPowerController()构造的时候初始化的。曲线设置好了,就应该扔代码里跑起来,模型建起来了,这个过程是咋样的呢?//它将负责曲线的创建,自动背光值的计算等。通过搜索配置关键词(

Android 1485

芯片原厂linux驱动开发的分享

大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。

嵌入式技术开发 849

SOFA Weekly | SOFABolt 发布新版本、MOSN 相关文章整理

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 273

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SOFA Weekly | Occlum 发布、技术直播回顾&预告

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 545

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

阿里内核月报:2017年05月

1. A report from Netconf: Day 1 本文是2017年4月3日Netconf会议报告。主要的议题是:移除ndo_select_queue()函数,对于refcount_t类型引入开关,TC重定向导致内核陷入循环等。 移除ndo_select_queue() ndo_select_queue()函数是大家首先讨论的,它被用来决定往...

weixin_34160277的博客 358

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MOSN 多协议扩展开发实践

Service Mesh 是当今云原生的关键部分,蚂蚁已经在生产环境完成了大规模的落地,但是业界整体 Service Mesh 改造程度还不高。其中平稳的进行 Mesh 化改造是可以对已上...

金融级分布式架构 462

域名劫持原理及实现

目录 1.从输入URL到页面加载发生了什么 2 1.1 DNS解析 2 1.2 TCP连接 2 1.3 发送HTTP请求 2 1.4 服务器处理请求并返回HTTP报文 2 1.5 浏览器解析渲染页面 3 1.6 连接结束 4 2.dns劫持 4 3.url 重定向 6 3.1. 前端实现 6 3.1.1 html 页面跳转方式 6 3.1.2 JS 页面

vivianliulu的博客 4万+

开启云原生 MOSN 新篇章 — 融合 Envoy 和 GoLang 生态

注:本文是王发康(毅松)在 2021 GopherChina 上演讲的文字稿,相关分享 PPT 可自行到 MOSN meetup 下载。MOSN meetup 地址:https://git...

金融级分布式架构 581

关于iptables和tc的限速理解

关于iptables iptables 是包过滤软件,包过滤的顺序如下: 每一个包都会匹配 rule 策略,而每一个 rule 策略会有一个 action,触发了其中一个 rule 就不会触发另外一个 rule,但如果要触发的 rule 放在最后面,那么可以想象,包过滤的效率就会大大降低,所以设计策略的时候要尽量将常用的策略放在最前面,策略的顺序可以通过不断的调整 -A 和 -I 策略,甚

5975

TC 输入方向的弱网模拟 ( 一 )

参考文档 https://wiki.linuxfoundation.org/networking/netem How can I use netem on incoming traffic? You need to use the Intermediate Functional Block pseudo-device IFB . This network device allows atta...

范安崇的博客 2597

Linux TC Ingress输入方向流量控制

概述   Linux中的QoS分为入口(Ingress)部分和出口(Egress)部分,入口部分主要用于进行入口流量限速(policing),出口部分主要 用于队列调度(queuingscheduling)。 大多数排队规则(qdisc)都是用于输出方向的,输入方向只有一个排队规则,即ingressqdisc。ingressqdisc本身的功能很有限, 但可用于重定向incomingpa

eydwyz的专栏 1万+

eBPF 技术实践:加速容器网络转发,耗时降低60%+!

Linux 具有功能丰富的网络协议栈,并且兼顾了非常优秀的性能。但是,这是相对的。单纯从网络协议栈各个子系统的角度来说,确实做到了功能与性能的平衡。不过,当把多个子系统组合起来,去满足实际的业务需求,功能与性能的天平就会倾斜。容器网络就是非常典型的例子,早期的容器网络,利用 bridge、netfilter + iptables (或lvs)、veth等子系统的组合,实现了基本的网络转发;然而,...

云原生实验室 1128
上一篇: Mecha:将 Mesh 进行到底
下一篇: 不得不说的云原生隔离性 | SOFAChannel#16 直播回顾
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值