API Gateway Kong在Rainbond上的部署

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: Kong是一个可扩展的开源API平台(也称为API网关,API中间件或微服务服务网格)。Kong最初是由Kong Inc(以前称为Mashape)实现的,用于为其API Marketplace维护、管理和扩展超过15,000个微服务,这些微服务每月产生数十亿个请求。

API Gateway Kong在Rainbond上的部署

[TOC]

什么是Kong

kong

Kong是一个可扩展的开源API平台(也称为API网关,API中间件或微服务服务网格)。Kong最初是由Kong Inc.(以前称为Mashape)实现的,用于为其API Marketplace维护、管理和扩展超过15,000个微服务,这些微服务每月产生数十亿个请求。

技术上讲,Kong是在Nginx中运行的Lua应用程序,并且通过lua-nginx-module实现。Kong是与OpenResty一起分发的,而不是使用此模块来编译Nginx,OpenResty已经包括lua-nginx-module。

了解更多有关Kong的事情,你需要点击了解一下

从应用市场安装

快速安装

目前我们已经将最新版本(v1.4.X)的Kong发布到了应用市场,如果你想要快速的搭建以及使用Kong,你只需要做一件事情,那就是点击一下安装:

Kong-install

等待一小段时间后,Kong就已经部署在了你的Rainbond集群中了。在这个应用中,我们已经集成了Konga作为UI管理工具,接下来的步骤,需要你访问Konga,做几步简单的设置,就可以愉快的探索Kong了。

  • 注册Konga

006tNbRwly1gag0odat00j30x00u0gmm.jpg

  • 配置Kong的连接地址,写入 http://127.0.0.1:8001即可

006tNbRwly1gag0raizatj30y90u0q56.jpg

  • 连接成功,就可以使用Konga来管理你的Kong了

006tNbRwly1gag0sgbxunj31kq0u042n.jpg

注意事项

  • 如果你所使用的Rainbond平台,是在2019年12月25日以前安装的,并且没有进行过任何升级操作,那么你可能遇到Konga连接不到Kong的问题,解决的方案如下:

    • 如果你使用了v5.1.9以前的版本,请升级到最新版本
    • 如果你现在已经在使用v5.1.9版本,那么请点击链接,打个补丁。
  • Kong的启动很消耗内存

配置Kong

环境变量

Kong支持以KONG_开头的环境变量进行配置。举例说明:

对于部署在Rainbond上的Kong来说,直接添加环境变量

KONG_LOG_LEVEL = error

即可在Kong的配置文件中生成

log_level = error

添加完成后,点击更新,即可使之生效。

注入Nginx配置

通过调整Kong实例的Nginx配置,可以优化其基础架构的性能。

Kong启动时,将构建一个Nginx配置文件。你可以通过Kong配置直接将自定义Nginx配置注入此文件。

注入单个Nginx配置

Kong的配置文件中的任何前缀为的条目nginx_http_nginx_proxy_nginx_admin_通过删除前缀将其转换为等效的Nginx指令,并将其添加到Nginx配置的相应部分:

  • 前缀为的条目nginx_http_将注入到整体http 块指令中。
  • 前缀为的条目nginx_proxy_将注入到server处理Kong代理端口的block指令中。
  • 前缀为的条目nginx_admin_将注入到server处理Kong的Admin API端口的block指令中。

例如,如果将以下行添加到kong.conf文件中:

nginx_proxy_large_client_header_buffers=16 128k

它将以下指令添加到serverKong的Nginx配置的代理块中:

large_client_header_buffers 16 128k;

为了达到这个目的,你需要参考环境变量,为Kong添加以下环境变量:

KONG_NGINX_HTTP_OUTPUT_BUFFERS = "4 64k"

通过注入的Nginx指令包含文件

对于更复杂的配置方案,例如添加整个新 server块,可以使用上述方法include向Nginx配置注入 指令,指向包含其他Nginx设置的文件。

可以通过在kong.conf文件中添加以下条目来包含目标文件:

nginx_http_include = /path/to/your/my-server.kong.conf

在Rainbond上,可以通过环境变量进行配置:

KONG_NGINX_HTTP_INCLUDE="/path/to/your/my-server.kong.conf"

Kong应用怎么制作

即点即用的Kong,使用起来非常方便。那么这个应用是怎么制作的呢?

我们只需要做到以下几点,就可以发布出可以即点即用的云市场应用:

  • 目标应用的所有组件都已经部署在Rainbond并正常运行
  • 各服务组件使用的数据库具备自动初始化数据的功能
  • 各服务组件间的依赖关系已经处理妥当,从业务层面已经正常运行

接下来,只需要参考应用分享与发布,将你的应用发布出去即可。

数据库自动初始化

Kong可以使用的数据库包括 Postgres与Cassandra,我们这里使用了前者。

首先利用docker run 命令快速部署一个Postgresql:

docker run -d --name kong-database \
                -p 5432:5432 \
                -e "POSTGRES_USER=kong" \
                -e "POSTGRES_DB=kong" \
                postgres:9.6

使用Kong的镜像,即可初始化数据库表结构,在部署初始化组件时,要记得建立从 kong-init 指向 kong-database的依赖关系:

docker run --rm \
    --name kong-init \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=127.0.0.1" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    kong kong migrations bootstrap

kong-init 运行完成后会自动退出,在Rainbond上显示运行异常,不用担心,它已经完成了使命,验证下 kong-database 中已存在数据表结构,就可以删除kong-init 了。

进入 kong-database 的容器实例,通过命令行工具备份出数据库。

pg_dump -U kong -d kong > /var/lib/postgresql/data/data.sql

找到 kong-database 的数据持久化目录,得到 data.sqlkong-database 的使命也就达成了,可以被关闭删除。

自定义一个代码仓库,参考 https://github.com/dazuimao1990/pri-postgresql/tree/kongdata.sql 放到 sql 目录下,即可用这份代码创建一个可以自动初始化表结构的Postgresql了。创建之,命名为 kong-postgres 备用。

部署Kong

直接使用docker run 命令创建Kong,要记得建立从 Kong 指向 kong-postgres 的依赖关系:

docker run -d --name kong \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=127.0.0.1" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
    -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
    -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
    -p 8000:8000 \
    -p 8443:8443 \
    -p 8001:8001 \
    -p 8444:8444 \
    kong

内存至少提高至4G。

部署Konga

直接使用docker run 命令创建Konga,要记得建立从 Konga 指向 Kong 的依赖关系:

docker run -p 1337:1337 \
             --name konga \
             pantsel/konga

完成后,最终拓扑将会是这个样子的:

006tNbRwly1gag2spszy7j30re0uswf6.jpg

发布应用

点击 发布到市场,编辑它的信息,即可发布了。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
14天前
|
消息中间件 运维 Serverless
函数计算产品使用问题之如何部署Stable Diffusion Serverless API
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
27 2
|
1月前
|
开发框架 .NET API
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
107 3
|
12天前
|
缓存 API 数据库
打造高性能后端API:从设计到部署的实战之旅
【8月更文挑战第31天】在数字化时代的浪潮中,后端API成为了连接用户、数据与服务的桥梁。本文将带领读者踏上一段从API设计、开发到部署的旅程,通过实际案例分析,揭示如何构建一个高性能的后端系统。我们将探讨现代后端架构的关键要素,包括RESTful API设计原则、数据库优化技巧、缓存策略、以及容器化部署的实践。文章旨在为开发者提供一套实用的方法论,帮助他们在面对复杂业务需求时,能够设计出既高效又可扩展的后端服务。
|
17天前
|
运维 Serverless API
Serverless痛点解决问题之编写并部署一个弹性高可用的 Web API如何解决
Serverless痛点解决问题之编写并部署一个弹性高可用的 Web API如何解决
43 0
|
17天前
|
Java 应用服务中间件 nginx
【Azure Spring Apps】Spring App部署上云遇见 502 Bad Gateway nginx
【Azure Spring Apps】Spring App部署上云遇见 502 Bad Gateway nginx
|
17天前
|
存储 Kubernetes API
【APIM】Azure API Management Self-Host Gateway是否可以把请求的日志发送到Application Insights呢?让它和使用Azure上托管的 Gateway一样呢?
【APIM】Azure API Management Self-Host Gateway是否可以把请求的日志发送到Application Insights呢?让它和使用Azure上托管的 Gateway一样呢?
|
18天前
|
安全 API
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
|
2月前
|
JavaScript 应用服务中间件 API
Node.js搭建REST API实战:从基础到部署
【7月更文挑战第18天】通过以上步骤,你可以将你的Node.js REST API从开发环境顺利迁移到生产环境,并利用各种工具和技术来确保应用的稳定性、安全性和可扩展性。
|
2月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。