kong是基于openresty构建的一个网关,并且直接带了很多的功能比如反向代理、负载均衡、限流等模块直接开箱即用,同时兼具OpenResty的高性能,大部分情况下无需编程就可以实现想要的功能,下面在CentOS8 Linux上使用源码编译的方式安装kong,kong的官网是:https://konghq.com/,github仓库:https://github.com/kong/kong

kong安装文档:https://konghq.com/install/

kong安装需要依赖好几个组件官网上给出了依赖的列表如下:

总体上这些组件可以依次手动安装但是比较麻烦,所以推荐通过kong提供的工具kong-build-tools进行安装,仓库链接为:https://github.com/Kong/kong-build-tools,可以通过git克隆下来或者在首页下载zip包下来然后解压先准备好并且进入到目录中,然后开始进行组件的安装

编译需要先安装zlib库: yum install zlib-devel ,如果不安装待会编译会提示错误,然后就可以开始使用工具安装:

./openresty-build-tools/kong-ngx-build --prefix /opt/kong --work work --openresty 1.15.8.3 --openssl 1.1.1g --kong-nginx-module master --luarocks 3.3.1 --pcre 8.44 --jobs 6 --force

这个工具也相当于一键安装了,--prefix指定这些组件的统一目录,默认是/usr/local,然后--work指定安装的工作目录,这些包如果不存在都会临时下载到这里面然后再进行编译,安装完之后就没啥用了,后面的这些参数都是文档上推荐的稳定版本,执行之后需要耐心等待下载、编译以及安装,需要几分钟的时间,安装之后到/opt/kong可以看到luarocks、openresty、openssl这3个目录,然后将下面的环境变量添加到/etc/profile中:

export KONG_DIR=/opt/kong
export OPENSSL_DIR=$KONG_DIR/openssl
export PATH=$KONG_DIR/openresty/bin:$KONG_DIR/openresty/nginx/sbin:$OPENSSL_DIR/bin:$KONG_DIR/luarocks/bin:$PATH

添加之后 source /etc/profile 然后分别执行下面的命令查看各个组件的版本:

openssl version -a
nginx -V
resty -v
openresty -V
luarocks --version

确认没问题说明基础环境已经安装完成,然后需要安装libyaml-devel组件,否则接下来编译Kong会报错,centos8上面默认源没有libyaml-devel需要启用powertools才可以,centos7直接安装即可:

dnf config-manager --set-enabled PowerTools

然后才可以开始安装:

dnf install libyaml-devel
# 或者用yum
yum install libyaml-devel

然后开始编译kong:

cd /opt/kong
git clone https://github.com/Kong/kong.git
cd kong
git checkout 2.1.0

这里选择的是2.1.0稳定版,直接下载master上面的代码其实也是可以的,如果克隆比较慢可以去仓库下载打好的tag:

然后解压到/opt/kong,再把目录名改为kong即可,总之最后的目录是:/opt/kong/kong,具体过程不再赘述,准备好之后直接安装kong:

make install

安装的过程其实就是下载了很多lua的模块然后进行安装,正常是安装到luarocks下,可能速度非常慢,需要耐心等待如果失败了可以再次执行会继续安装,再不行需要自行解决网络问题……,最后安装成功需要继续添加下面的环境变量:

export PATH=/opt/kong/kong/bin:$PATH

然后按照官网的说明查看kong的版本信息:

kong version --vv

其实这里执行肯定会报错,socket或其他的模块找不到的错误,如果用rpm包安装是没问题的,原因就是lua模块安装到了/opt/kong/luarocks下,而这个路径不再默认的搜索路径下,于是继续添加下面的变量到profile:

export LUA_PATH="/opt/kong/luarocks/share/lua/5.1/?.lua;;"

保存并source之后,再执行上面的命令就可以看到输出的信息了

到这里kong就安装成功了,然后要正常使用还需要配置数据库,数据库支持postgresql以及cassandra,当然也可以不使用数据库,但是不使用数据库将无法添加服务以及路由,正常用于导出yml线上发布使用,这里使用的是postgresql,具体安装请参考之前的文章以及官方文档,下面直接进行kong的相关配置

在pgsql中创建角色以及数据库:

CREATE ROLE kong LOGIN PASSWORD 'kong123456';
CREATE DATABASE kong OWNER kong;

这里创建角色kong允许登录,并且设置密码为kong123456,然后创建了数据库kong并授权给角色kong,然后修改postgresql的权限配置文件:pg_hba.conf,添加远程访问的权限如下:

host    kong            kong            192.168.0.0/16          md5

这里的允许ip根据实际情况设置,如果postgresql是在本地那么就没必要配置权限了,默认不用密码就可以登录,修改完配置文件重启postgresql服务即可

然后进入到kong的目录编辑配置:

cd /opt/kong/kong
cp kong.conf.default kong.conf

然后编辑配置文件kong.conf,修改数据库部分的配置如下:

database = postgres
pg_host = 192.168.0.31
pg_port = 5432
pg_timeout = 5000
pg_user = kong
pg_password = kong123456
pg_database = kong

保存配置然后开始执行下面的命令初始化数据库:

kong migrations bootstrap -conf kong.conf

注意指定kong启动服务的时候要在目录/opt/kong/kong下,否则可能会报kong加载失败,如下:

如果觉得每次进入目录麻烦,那么直接在刚才的环境变量LUA_PATH追加path:/opt/kong/kong/?/init.lua,/opt/kong/kong下面有1个kong目录保存了相关模块的源码,因此这么配置就可以在外部加载kong这个目录了:

export LUA_PATH="/opt/kong/luarocks/share/lua/5.1/?.lua;/opt/kong/kong/?/init.lua;;"

配置的时候要仔细看一下目录,如果你的和我这里的不一样,要根据实际的配置,然后可以启动一个独立的kong项目,kong项目启动的时候如果指定-conf会读取指定的配置如果不指定则默认会读取/etc/kong/kong.conf这个配置,所以这里我们可以将配置文件放到/etc/kong/kong.conf,之后改配置也要改这个,这样就不用每次指定配置文件了,可以方便操作:

mkdir /etc/kong
cp /opt/kong/kong/kong.conf /etc/kong

然后可以启动一个新的项目:

kong start --prefix /opt/kong-work

这里--prefix指定工作目录的位置,就是和nginx默认的conf一样的结构,和上篇文章创建openresty项目的思路完全一样,如果不想指定可以修改kong.conf配置prefix参数,默认值是/usr/local/kong,修改之后就不用--prefix指定了,如果有多个项目的话其他的项目还是需要用--prefix单独指定的

kong启动之后会监听如下4个端口:

8000 - 这个是提供网关服务的端口,会侦听http客户端的流量然后转发到上游服务

8443 - 和8000一样,只是这个是侦听https流量

8001 - 配置kong admin api的端口,为了安全默认只监听127.0.0.1回环网卡

8444 - 和8001一样,管理https admin api

启动之后可以使用下面的命令验证一下服务:

curl --include http://localhost:8001

默认正常返回json即表示启动成功,正常返回一堆json不太好看,可以用python3的json模块或者json_pp进行格式化示例如下:

curl http://localhost:8001 | python3 -m json.tool
# 或者
curl http://localhost:8001 | json_pp

停止kong服务和重新加载配置可以使用下面的命令:

kong stop --prefix <prefix>
kong reload --prefix <prefix>

最后创建一个简单的http proxy来验证kong的功能如下:

# 创建服务 代理到文档上的指定服务
curl -X POST --url http://localhost:8001/services --data 'name=test-service' --data 'url=http://mockbin.org' | json_pp
# 创建路由规则 支持hosts,paths,headers等
curl -X POST --url http://localhost:8001/services/test-service/routes --data 'paths[]=/test' | json_pp
# 访问网关测试
curl -X GET http://localhost:8000/test

然后可以访问浏览器看一下:

可能是资源路径的原因这里样式丢失了,这样kong的服务就全部配置好并且可以使用了,只是这个缺点是没有管理的页面导致每次用curl发送请求比较麻烦,而且官方的页面需要付费,这里推荐个比较好用的第三方界面konga:https://github.com/pantsel/konga,其他的不是版本跟不上就是有或多或少的问题,这个应该算是第三方的里面比较优秀而且功能非常全的一个了,推荐研究和使用

我也是第一次接触这个网关,如有错误欢迎指正~

Linux下源码安装Kong网关的更多相关文章

  1. linux下源码安装netcat

    linux下源码安装netcat http://blog.chinaunix.net/uid-20783755-id-4211230.html 1,下载netcat源码,netcat-0.7.1-13 ...

  2. linux下源码安装软件

    在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...

  3. Linux 下源码安装大杂烩

    本文仅以记录平常源码安装部分软件是需注意的关键点. 有时为了方便,如在 Ubuntu 系统中,采用 sudo apt-get install soft-version 来安装某一版本的软件显得更为便捷 ...

  4. Linux下源码安装方式安装MySQL

    1.下载安装包:https://downloads.mysql.com/archives/community/  2.安装开发工具和安装包 因为要把源码编译成二进制数据,所以必须要有编译器和解释器 g ...

  5. linux下源码安装apache服务

    1.搭建静态网站是,我们只需要搭建apache服务即可满足要求. 例如:如果我再客户端游览器输入地址,他会找到192.168.1.100这个服务器,然后根据端口会找到apache服务器.apache他 ...

  6. linux下源码安装rabbitMq

    一.安装erlang前期环境安装1.利用yum安装erlang编译所依赖的环境 yum -y install make gcc gcc-c++ kernel-devel m4ncurses-devel ...

  7. Linux下源码安装MySQL-5.6.25

    从mysql-5.5起,mysql源码安装开始使用cmake了,因此我们得先安装cmake,配置安装目录./configure --perfix=/.....的时候和以前的会有些区别. 一.安装cma ...

  8. Linux下源码安装JDK7

    安装说明 安装环境:Red Hat Enterprise Linux7.1安装方式:源码安装 软件:jdk-7u80-linux-x64.gz 安装 #首先查看系统原有JDK信息 rpm -qa | ...

  9. linux下源码安装

    ●源码的安装(./configure –prefix 命令用法)一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一个可执行脚本 ...

  10. linux下源码安装jdk1.8和tomcat8.5

    Java是目前可移植性较高的语言,相当火热,tomcat运行就需要Java语言环境 0.java简介 1)tomcat运行需要对应的Java环境,Java环境通过安装jdk来获得2)为了防止兼容性问题 ...

随机推荐

  1. 摆脱鼠标系列 - 打开微信(Alt+V) - 打开双核浏览器(Alt+S) - HotkeyP

    摆脱鼠标系列 - 打开微信(Alt+V) - 打开双核浏览器(Alt+S) - HotkeyP 新定义了两个快捷键 这两个比较常用

  2. Prettier 和 ESLint 冲突解决方案 eslint-config-prettier eslint-plugin-prettier

    划重点 eslint-config-prettier 禁用 eslint 冲突配置 eslint-plugin-prettier Prettier先格式化 (默认是先eslint格式化,再Pretti ...

  3. 新版idea配置maven注意点!!

    1. maven配置 首先是按要求配置了maven,关闭所有项目->自定义->所有设置 配置完成之后发现新建项目下方还是显示从官方源下载maven包装器,而且在项目中出现这个配置文件 可以 ...

  4. springboot使用pagehelper

    自己写的用户系统项目需要加个分页,之前都是用现成的,或者使用在sql里面拼接分页查询,这次任务紧急想直接找个包实现吧,找了很多博客看了都不行啊,不知道为啥,最后还是找了之前maven使用的包才行,简单 ...

  5. 利用log4j打印sql的log日志

    默认情况下,使用ibatis是不打印ibatis相关的log的,因为内部的sql执行都是内部调用,在server的控制台是不 会 打印log的. 在log4j的配置文件log4j.properties ...

  6. C++实现常用的文件操作

    ①输出到文本文件(txt) 1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 int main ...

  7. 智慧公安!3DCAT实时云渲染助力某公安机关打造数字孪生可视化系统

    近年来,随着大数据.数字孪生.云计算.人工智能等技术的飞速发展,数字化浪潮席卷全国各地公安系统.2022年全国公安工作会议中也提到,数字化改革是推动公安工作创新发展的大引擎.培育战斗力生成新的增长点. ...

  8. 3DCAT荣获2021金陀螺“年度XR行业技术创新奖”“年度优秀VR行业应用奖”两项大奖

    作为年度行业影响力大奖,第六届金陀螺颁奖典礼与2021未来商业生态链接大会(简称"FBEC2021")同期举办.金陀螺奖金陀螺奖旨在对优质作品/项目及优秀企业做出嘉奖,鼓励创业者. ...

  9. WinAppSDK / WinUI3 项目无法使用 SystemEvents 的问题

    SystemEvents 是一个开发 win32 窗口项目很常用的类,其中封装了一些常用的系统广播消息.在 WinUI3 项目中,SystemEvents 事件经常无法触发,简单排查了一下原因. Sy ...

  10. KingbaseES V8R6集群案例---一主二备架构单个备库宕机事务影响测试

    KingbaseES V8R6集群案例---一主二备架构单个备库宕机事务影响测试 案例说明: 对于KingbaseES V8R6集群,在sync模式下,对于一主一备架构,如果备库宕机时,主库事务com ...