热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务网关-Kong开源实现(7.30)

对于微服务网关或API网关,实际在前面讲微服务架构的文章中都谈到过。你可以将其理解为一个轻量的SOA

微服务网关-Kong开源实现(7.30)

对于微服务网关或API网关,实际在前面讲微服务架构的文章中都谈到过。你可以将其理解为一个轻量的SOA服务总线。大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。

首先我们看下GitHub上对Kong微服务网关的一些介绍

当我们决定对应用进行微服务改造时,应用客户端如何与微服务交互的问题也随之而来,毕竟服务数量的增加会直接导致部署授权、负载均衡、通信管理、分析和改变的难度增加。

面对以上问题,API GATEWAY是一个不错的解决方案,其所提供的访问限制、安全、流量控制、分析监控、日志、请求转发、合成和协议转换功能,可以解放开发者去把精力集中在具体逻辑的代码,而不是把时间花费在考虑如何解决应用和其他微服务链接的问题上。

在众多API GATEWAY框架中,Mashape开源的高性能高可用API网关和API服务管理层——KONG(基于NGINX)特点尤为突出,它可以通过插件扩展已有功能,这些插件(使用 lua 编写)在API请求响应循环的生命周期中被执行。于此同时,KONG本身提供包括HTTP基本认证、密钥认证、CORS、TCP、UDP、文件日志、API请求限流、请求转发及NGINX监控等基本功能。目前,Kong在Mashape管理了超过15,000个API,为200,000开发者提供了每月数十亿的请求支持。

我们来看下Kong API网关提供的一些基本功能:

API注册和服务代理

对于原始的API接口进行注册,并提供服务代理能力,即不同的API接口注册到网关后,网关可以提供一个统一的访问地址和接口。这和ESB总线的代理服务道理是一致的,在服务注册到API网关后,所有的内部服务对外界都是透明的,外部的服务访问必须要通过API网关进行。

该部分对应到Kong API网关的服务注册和Routing部分的功能和能力上。

负载均衡

由于Kong API网关本身底层也是基于Ngnix的,因此对应负载均衡的能力实际上是通过底层的Nginix来完成的。要在Kong上面实现负载均衡和API注册代理实际上需要分开为两个步骤进行。即首先是要配置负载均衡能力,建立upstream组,并添加多个Target,其次才是进行API注册。

http://www.cnblogs.com/chenjinxi/p/8744117.html

AUTHENTICATION实现

通过OAuth 2.0 Authentication插件实现user端口的用户访问限制。其具体步骤如下:

注册Oauth2插件, 配置参考

添加Consumer及Consumer对应的credentials

申请accesstoken并访问,如果不带token访问将被拒绝

安全和访问控制

支持最基本的基于IP的安全访问控制和黑白名单设置。即为相应的端口添加IP Restriction插件扩展,并设置白名单(只有名单内的IP可以访问API)。这和我们当前ESB的基于IP的访问控制和授权是一个道理。但是我们的ESB更加灵活,多了业务系统这一层,即可以直接对业务系统这层统一进行授权。

如果没有授权,在进行访问的时候将返回 Your IP address is not allowed的访问错误。

流量控制-Traffic Control

流量控制在当前Kong网关上,从GitHub上的参考来看,主要是实现了可以基于单位时间内的访问次数进行流量控制,如果超过了这个访问次数,则直接提示流控约束且无法访问的提示。当前的流量控制,暂时不支持基于数据量的流控。

当前的流控暂时没有看到微服务网关常用的熔断操作,即服务并发或服务响应时间大过某个临界值的时候,直接对服务进行熔断和下线操作。

日志Logging实现

通过File-log插件实现对于每次访问日志的获取,需要注意为日志文件写权限,日志格式参考Log Format。具体包括两个步骤。

1. 为端口添加File-log插件,并设置为日志文件路径设为:/tmp/file.log

2. 添加日志插件后,每次访问都会被记录

从用户手册来看,当前的 日志LOGGING是没有提供日志查询的前端功能界面的,如果需要的话还需要自己开发对应的日志查询功能。这个日志功能和我们当前的ESB总线的日志Log完全是类似的。但是我们ESB这块的能力更加强,包括后续的服务运行日志的统计分析和报表查看等。

初步来看,当前我们的ESB主要是缺少了负载均衡层的能力,缺少了对 OAuth 2.0 Authentication的集成,而这两块实现起来并不困难。同时我们也看到,完全可以采用SpringCLoud框架体系里面的Zuul来实现微服务网关能力,同时将Zuul开发的API接口再次注册到ESB总线上面。对于Zuul微服务网关本身提供 OAuth 2.0集成和负载均衡能力完全是没有任何问题的。


以上所述就是小编给大家介绍的《微服务网关-Kong开源实现(7.30)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 微信平台通过盛派SDK(sdk.weixin.senparc.com)允许服务号和订阅号使用appId和token读取关注用户的个人信息。然而,这一过程需严格遵守隐私保护和数据安全的相关规定,确保用户数据的安全性和隐私性。 ... [详细]
  • 本文深入解析了Spring Cloud路由网关Zuul的核心功能及其典型应用场景。通过对方志朋老师教材的学习和实践,详细探讨了Zuul在微服务架构中的重要作用,包括请求路由、过滤器链管理以及服务动态扩展等关键特性。同时,结合实际案例,展示了Zuul在高并发和复杂业务场景下的应用优势,为读者提供了全面的技术参考。 ... [详细]
  • 本文探讨了文件传输过程中的优化与安全策略。具体而言,研究了如何将客户端的文件高效上传至服务器。通过使用结构体对象,可以封装文件的相关信息,如位置和大小,并利用缓冲区存储实际数据,从而实现高效的数据传输。此外,文章还讨论了在传输过程中确保数据完整性和安全性的多种方法,包括加密技术和身份验证机制。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • 直播带货系统中的推流技术详解
    本文介绍了RTMP(实时消息传输协议)及其在直播带货系统中的应用,并详细探讨了带货直播系统的连麦方案,包括服务端合流和客户端合流的优势与劣势。 ... [详细]
author-avatar
i1L3i1L4
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有