API Gateway Kong在Rainbond上的部署

2020-01-02  本文已影响0人  好雨Rainbond

API Gateway Kong在Rainbond上的部署

API Gateway Kong在Rainbond上的部署什么是Kong从应用市场安装快速安装注意事项配置Kong环境变量注入Nginx配置注入单个Nginx配置通过注入的Nginx指令包含文件Kong应用怎么制作数据库自动初始化部署Kong部署Konga发布应用

什么是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了。

image image image

注意事项

配置Kong

环境变量

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

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

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n42" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">KONG_LOG_LEVEL = error</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n44" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">log_level = error</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n59" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">nginx_proxy_large_client_header_buffers=16 128k</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n61" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">large_client_header_buffers 16 128k;</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n63" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">KONG_NGINX_HTTP_OUTPUT_BUFFERS = "4 64k"</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n68" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">nginx_http_include = /path/to/your/my-server.kong.conf</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n70" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">KONG_NGINX_HTTP_INCLUDE="/path/to/your/my-server.kong.conf"</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n86" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">docker run -d --name kong-database
-p 5432:5432
-e "POSTGRES_USER=kong"
-e "POSTGRES_DB=kong"
postgres:9.6</pre>

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

发布应用

image

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

<pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n100" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">docker run -p 1337:1337
--name konga
pantsel/konga
</pre>

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

部署Konga

内存至少提高至4G。

<pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n96" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">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
</pre>

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

部署Kong

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

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

<pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n91" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">pg_dump -U kong -d kong > /var/lib/postgresql/data/data.sql
</pre>

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

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

<pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n88" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-color: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; background-position: initial initial; background-repeat: initial initial;">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
</pre>

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

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

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

数据库自动初始化

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

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

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

Kong应用怎么制作

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

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

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

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

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

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

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

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

注入单个Nginx配置

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

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

注入Nginx配置

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

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

上一篇 下一篇

猜你喜欢

热点阅读