当前位置: 首页 > article >正文

Docker:深入探讨Kong开源API 网关的力量

1、简述

在当今数字化的时代,应用程序和服务之间的通信变得愈发复杂。为了简化和增强这种通信,开发者们经常使用API(Application Programming Interface)。API网关是管理、监控和安全维护API通信的关键工具之一。而在众多API网关中,Kong凭借其开源的特性、可扩展性和强大的功能集而备受关注。本文将深入探讨Kong的技术细节,解释其工作原理以及如何使用Kong构建强大的API生态系统。

Kong核心特性:

  • 插件系统
    Kong的强大之处在于其灵活的插件系统,允许开发者根据具体需求扩展和定制API网关的功能。有关核心功能之外的需求,可以通过官方提供的插件或者自定义插件来实现。

  • 负载均衡
    Kong通过Nginx的负载均衡功能,确保请求能够被均匀分配到后端服务,提高系统的可用性和性能。

  • 认证和授权
    Kong支持多种认证方式,包括基本身份验证、OAuth、JWT等,同时提供了细粒度的授权机制,确保只有合法用户能够访问受保护的资源。

  • 日志记录
    Kong提供了详尽的日志记录功能,可以轻松地监控API的调用情况、性能指标以及错误信息,有助于及时发现和解决问题。

  • 分布式部署
    Kong支持分布式部署,可以横向扩展以处理大规模的请求流量。这使得Kong成为适用于各种规模的应用和企业的理想选择。

2、原理

Kong的工作原理可以简要概括为接收来自客户端的API请求,经过一系列插件的处理,然后路由到相应的后端服务。以下是Kong的基本工作流程:

  • 接收请求: 客户端发送API请求到Kong。

  • 插件处理: 请求经过预定义的插件,执行一系列的操作,如认证、鉴权、日志记录等。

  • 路由: 根据API请求的路由规则,Kong将请求路由到相应的后端服务。

  • 后端服务: 请求最终到达后端服务,服务返回响应。

  • 插件处理(响应阶段): 后端服务的响应同样会经过插件处理,进行日志记录、响应转换等操作。

  • 返回响应: 经过插件处理后,Kong将响应返回给客户端。

3、安装PostgreSQL

Kong 目前使用 Cassandra 或者 PostgreSQL,可以根据业务需求选择 Database。这边选择的是PostgreSQL:

docker run -d --name kong-database \
 -p 5432:5432 \
 -e "POSTGRES_USER=kong" \
 -e "POSTGRES_DB=kong" \
 -e "POSTGRES_PASSWORD=kong" \
 --restart always \
 postgres:11.10

4、初始化PostgreSQL

使用 docker run --rm 来初始化数据库,该命令执行后会退出容器而保留内部的数据卷(volume)。但是要注意kong的版本和PostgreSQL的版本是否匹配,这边采用的11.1版本来匹配kong最新版本:

 docker run --rm \
 -e "KONG_DATABASE=postgres" \
 -e "KONG_PG_HOST=192.168.254.133" \
 -e "KONG_PG_USER=kong" \
 -e "KONG_PG_PASSWORD=kong" \
 -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" 

http://www.kler.cn/a/132494.html

相关文章:

  • 【青牛科技】视频监控器应用
  • 机器学习(贝叶斯算法,决策树)
  • [前端面试]HTML AND CSS
  • python读写excel等数据文件方法汇总
  • 三周精通FastAPI:42 手动运行服务器 - Uvicorn Gunicorn with Uvicorn
  • 常用命令之LinuxOracleHivePython
  • applicationContext.getBean 为null
  • Python基础入门---conda 如何管理依赖包以及复制相同环境的
  • μC/OS-II---事件标志组管理1(os_flag.c)
  • Vue3 shallowRef 和 shallowReactive
  • WPF创建自定义控件编译通过但是找不到资源
  • Docker与Kubernetes结合的难题与技术解决方案
  • 2023.11.18 Hadoop之 YARN
  • 计算机毕业设计选题推荐-二手交易跳蚤市场微信小程序/安卓APP-项目实战
  • Python 的 @lru_cache() 装饰器
  • uniapp开发ios上线(在win环境下使用三方)
  • c#Nettonsoft.net库常用的方法json序列化反序列化
  • docker 部署mysql主从复制
  • ffmpeg和ffplay
  • Postgresql删除表或者序列时报SQL 错误 [2BP01]
  • 单元测试实战(五)普通类的测试
  • 合成事件在san.js中的应用
  • 单元测试实战(二)Service 的测试
  • Android Jetpack的组件介绍,常见组件解析
  • 力扣labuladong一刷day12拿下N数之和问题共4题
  • 一文搞懂设计模式之代理模式