首页 > 其他分享 >整合一套高性能网关Kong

整合一套高性能网关Kong

时间:2023-12-15 17:45:07浏览次数:74  
标签:网关 Konga Service Kong kong 高性能 PG KONG

前言#

    相信大家对Api网关都比较的熟悉,我们之前的文章也介绍过ASP.NET Core的网关Ocelot,也介绍过Spring Cloud Gateway。说到网关的主要功能,其实总结起来就两个字"统一",无论是作为应用的入口、认证授权、熔断限流等等主要都是为了统一的地方做一些事情。今天我们介绍一款性能更高的网关Kong,相对于Ocelot或Gateway这些类型的网关来说,Kong的优势是具有更高的性能,主要因为Kong是基于Nginx+Lua为核心的,接下来我们就详细介绍一下。

概念介绍#

    在使用Kong之前我们先来大致的介绍一下Kong是什么,Kong是基于OpenResty的开源网关。而OpenResty是基于Nginx与Lua的高性能Web平台。经常使用Nginx的同学们都知道,如果修改了Nginx的配置是需要重启Nginx的。而OpenResty让Nginx具备了动态编程的能力,使得Nginx成为了一个应用服务器软件,Kong正是基于OpenResty的,Nginx的性能不必多说,所以Kong可以理解为运行在Nginx上的高性能网关,在学习的过程中我们可以类比着Nginx进行了解。

Kong#

说了这么多接下来我们大致介绍一下Kong自学三件套

Kong有一点做的还是比较好的,无论是GitHub还是官方文档介绍的都比较详细,而且比较通俗易懂,这里我们就不过多的介绍了,有兴趣的同学可以自行了解一下。介绍完了自学三件套之后,接下来我们了解一下搭建一套Kong的几个组成部分,总结起来就是三个Kong服务、Kong依赖的存储、Kong可视化界面,下面我们大致的介绍一下。

  • 首先是Kong服务,一套可以正常工作的Kong会包含两个对外提供服务的端口,一个是网关常规使用的端口,即对外提供访问的入口。另一个则是管理Kong的Admin端口,比如对Kong管理服务的增删改查以及Kong常用的Plugin管理以及一些常规的配置等,Kong的插件非常的丰富,基本上可以到达常规的一些操作比如限流、认证授权、链路跟踪、监控等都有而且形式非常的丰富。
  • 其次是Kong存储服务,因为在Kong上配置的转发服务、插件、环境变量、认证等相关的信息都是需要存储的,但是外部存储不是必须的,Kong可以将这些信息存储到进程内的缓存中,但是重启Kong之后这些配置将会丢失,因此在正常的使用过程中我们总会给他提供一个外部数据库来存储这些信息。可供Kong使用的存储数据库也有好几个选择分别是Mysql、MongoDB、Postgresql等。本次演示我们使用的是Postgresql,也是官方推荐的方式。
  • 最后是Kong的可视化UI,当然这个不是必须的。Kong提供了Admin管理接口的形式对服务和Plugin查看、新增、修改、删除等操作,但是有一个可视化的管理界面,无疑让有些操作变得更加简单清晰,而且这些可视化系统正式基于Kong的Admin接口开发的。可供选择的可视化UI也比较多,比较出名的有Konga、kong-ui、kong-admin-ui。本次演示我们选择的是Konga,也是推荐使用的最多的一个。
Konga#

    Konga并非Kong官方出品的可视化UI,但是它是最流行的一个,也是使用最多的一个,目前最新版本是v0.6.3。Konga是基于Nodejs开发的,它的Github地址是https://github.com/pantsel/konga,同样的Konga的GitHub文档上介绍的也非常的详细。它的部署方式有两种,一个是直接克隆GitHub上的仓库上的代码通过npm的方式运行,另一种则是使用docker的方式部署。两种方式都非常的简单,本次我们选择docker的方式。

环境搭建#

    关于Kong的搭建,官方网站给出了好几种部署方式可以基于Docker或K8S,也可以在Liunx操作系统Centos、Ubuntu、RHEL等都支持,目前最稳定版本为2.3.x,这些在官方文档上讲解的非常详细非常易懂,具体可参阅官方文档https://konghq.com/install/。如果想能快速的搭建起一套Kong+Postgresql+Konga的环境,docker-compose无疑是一个比较好的选择,接下来我们将演示用过这种方式快速搭建起一条完整的Kong环境。
    Kong官方GitHub有专门的docker-kong仓库地址为https://github.com/Kong/docker-kong,也已将这个仓库Clone下来,找到compose文件运行。但是我们这里还要整合可视化界面Konga,Konga并非官方出品,所以我要要修改一下compose文件整合进去Konga,完整的呈现如下所示

version: '3.3'
#创建kong_data卷
volumes:
  kong_data: {}
#创建kong-net网络
networks:
  kong-net:
    external: false

services:
#数据库运行完成之后需要执行kong进行初始化操作
kong-migrations:
image: "${KONG_DOCKER_TAG:-kong:latest}"
command: kong migrations bootstrap
depends_on:
- db
environment:
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-kong}
KONG_PG_HOST: db
KONG_PG_USER: ${KONG_PG_USER:-kong}
KONG_PG_PASSWORD_FILE: /run/secrets/kong_postgres_password
secrets:
- kong_postgres_password
networks:
- kong-net
restart: on-failure
deploy:
restart_policy:
condition: on-failure
#迁移过程依赖db
kong-migrations-up:
image: "${KONG_DOCKER_TAG:-kong:latest}"
command: kong migrations up && kong migrations finish
depends_on:
- db
environment:
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-kong}
KONG_PG_HOST: db
KONG_PG_USER: ${KONG_PG_USER:-kong}
KONG_PG_PASSWORD_FILE: /run/secrets/kong_postgres_password
secrets:
- kong_postgres_password
networks:
- kong-net
restart: on-failure
deploy:
restart_policy:
condition: on-failure
# kong服务
kong:
image: "${KONG_DOCKER_TAG:-kong:latest}"
user: "${KONG_USER:-kong}"
depends_on:
- db
environment:
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: '0.0.0.0:8001'
KONG_CASSANDRA_CONTACT_POINTS: db
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-kong}
KONG_PG_HOST: db
KONG_PG_USER: ${KONG_PG_USER:-kong}
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_PG_PASSWORD_FILE: /run/secrets/kong_postgres_password
secrets:
- kong_postgres_password
networks:
- kong-net
#kong的端口,非https使用8000和8001
ports:
- "8000:8000/tcp"
- "8001:8001/tcp"
- "8443:8443/tcp"
- "8444:8444/tcp"
#健康检查
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
timeout: 10s
retries: 10
restart: on-failure
deploy:
restart_policy:
condition: on-failure

#konga可视化界面
konga:
image: pantsel/konga
networks:
- kong-net
depends_on:
- db
ports:
- "1337:1337/tcp"
environment:
TOKEN_SECRET: konga
DB_ADAPTER: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: kong
DB_PASSWORD: kong
DB_DATABASE: kong
restart: on-failure
deploy:
restart_policy:
condition: on-failure
# postgres数据库
db:
image: postgres:9.6
environment:
POSTGRES_DB: ${KONG_PG_DATABASE:-kong}
POSTGRES_USER: ${KONG_PG_USER:-kong}
POSTGRES_PASSWORD_FILE: /run/secrets/kong_postgres_password
secrets:
- kong_postgres_password
healthcheck:
test: ["CMD", "pg_isready", "-U", "${KONG_PG_USER:-kong}"]
interval: 30s
timeout: 30s
retries: 3
restart: on-failure
deploy:
restart_policy:
condition: on-failure
stdin_open: true
tty: true
ports:
- 5432:5432
networks:
- kong-net
volumes:
- kong_data:/var/lib/postgresql/data

# 用文件统一管理数据库密码
secrets:
kong_postgres_password:
file: ./POSTGRES_PASSWORD

通过docker-compose直接运行上面的yaml文件,便可以直接运行一套完整的kong项目,这里在强调一下上面说过GitHub上有官方专门提供的docker-kong仓库,直接Clone便可以直接得到运行Kong的yaml,但是本示例我们加入了Konga,如果需要可直接下载我修改后的包[点击下载

标签:网关,Konga,Service,Kong,kong,高性能,PG,KONG
From: https://www.cnblogs.com/ki-boy/p/17903856.html

相关文章

  • 基于边缘智能网关的冬季管网智能监测方案
    随着我国北方全面进入到冬季,多日以来严寒、降雪天气频发,民生基础设施也迎来冬季考验。尤其是民众生活仰赖的水、电、气管网,面临极端冰雪天气时易存在各种风险,包括管道水/气泄露损耗、低温冻裂、积雪压塌压损、冻结受阻等。  针对冬季民生水电气管网的监测和维护,可以借助佰马......
  • 内部集成M0内核MCU Sub-1G 高性能低功耗的单片集成收发芯片DP4306F
    DP4306F是一款高性能低功耗的单片集成收发机,集成M0核MCU,工作频率可覆盖200MHz~1000MHz,支持230/408/433/470/868/915频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以对输出功率、频道选择以及数据包格式进行灵活配置,并......
  • Modbus转Profinet网关的配置步骤和注意事项
     Modbus转Profinet网关的配置步骤和注意事项当拿到Modbus转Profinet网关(XD-MDPN100/200)不会配置或是配置完成后发现Modbus转Profinet网关(XD-MDPN100/200)与设备通讯不上等问题。下面就这些问题给大家详细解读。 首先,确保Modbus转Profinet网关(XD-MDPN100/200)的电源连接正常。检......
  • modbus转profinet网关连接6台232modbus伺服同时控制案例
    modbus转profinet网关连接6台232modbus伺服同时控制案例Modbus转Profinet网关是一种用于连接不同网络之间的通讯设备。它的原理是通过将Modbus协议转换为Profinet协议,实现Modbus设备与Profinet网络之间的数据交换。其功能具体包括将Modbus设备发送的数据转发到Profinet网络中,并将P......
  • 今天聊一聊高性能系统架构设计是什么样的
    Java全能学习+面试指南:https://javaxiaobear.cn今天聊一聊大家常听到的高性能系统架构。高性能系统架构,主要包括两部分内容,性能测试与性能优化。性能优化又可以细分为硬件优化、中间件优化、架构优化及代码优化,知识架构图如下。性能测试先看系统的性能测试。性能测试是性能优......
  • go-zero开发入门之网关往rpc服务传递数据
    go-zero的网关往rpc服务传递数据时,可以使用headers,但需要注意前缀规则,否则会发现数据传递不过去,或者对方取不到数据。go-zero的网关对服务的调用使用了第三方库grpcurl,入口函数为InvokeRPC:grpcurl.InvokeRPC(r.Context(),source,cli.Conn(),rpcPath,s.prepareMetadat......
  • 基于5G智能网关的河道清洁机器人应用
    5G技术的普及也带动了机器人应用的快速发展,得益于5G通信技术的高带宽、低时延和高可靠性特性,显著提升了机器人的感知能力、控制精度以及远程操作能力,让机器人变得更加智能化、自主化。 5G智能网关赋能河道清洁机器人 河道清洁机器人就是一种具有代表性的5G赋能智能机器人应......
  • 工业生产中Profibus主站转Profinet网关优势所在
    应用案例分享:某制造企业拥有一条生产线,生产线上的多个设备之间需要进行数据通讯和相互控制。这些设备原本使用Profibus-DP总线进行通讯,但企业希望将这些设备集成到Profinet网络中,以便能够更好地实现设备监控和管理。我们为此提供了一款Profibus-DP主站转Profinet网关,将多个Profibu......
  • 边缘智能网关如何应对环境污染难题
    随着我国工业化、城镇化的深入推进,包括大气污染在内的环境污染防治压力继续加大。为应对环境污染防治难题,佰马综合边缘计算、物联网、智能感知等技术,基于边缘智能网关打造环境污染实时监测、预警及智能干预方案,可应用于大气保护、水体保护、土壤保护、植被保护、生物保护等丰富场......
  • go-zero开发入门-API网关鉴权开发示例
    本文是go-zero开发入门-API网关开发示例一文的延伸,继续之前请先阅读此文。在项目根目录下创建子目录middleware,在此目录下创建文件auth.go,内容如下://鉴权中间件packagemiddlewareimport("context""errors""net/http")varErrInvalidToken=errors.Ne......