1.准备内容

1、按标准完成操作系统安装及配置

2、按标准完成 PgSQL 数据库的安装、配置。​​https://blog.51cto.com/waringid/5790199​

3、新建 kong 数据库和用户


create user kong with password 'password';
create database kong owner kong;


2.kong 安装及配置

2.1. yum配置及安装


wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo
export major_version=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d "." -f1`
sed -i -e 's/baseurl.*/&\/centos\/'$major_version''/ bintray-kong-kong-rpm.repo
mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
yum update -y
yum install -y kong
kong version


kong 微服务网关配置指南_kong

2.2. 配置 kong

1、修改 kong 配置文件

官方的配置文档请参考:​​https://docs.konghq.com/1.4.x/configuration/​

cp /etc/kong/kong.conf.default /etc/kong/kong.conf

打开配置文件,修改数据库连接、用户名和密码

pg_host = 127.0.0.1 # The PostgreSQL host to connect to.
pg_port = 5432 # The port to connect to.
pg_user = kong # The username to authenticate if required.
pg_password = password # The password to authenticate if required.
pg_database = kong

2、修改 kong_defaults.lua 文件

进入/usr/local/share/lua/5.1/kong/templates目录,修改kong_defaults.lua里的pg_password=password

3、初始化数据库

kong 微服务网关配置指南_PgSQL_02

kong migrations  bootstrap -c /etc/kong/kong.conf

如果出现“Error: [PostgreSQL error] failed to retrieve PostgreSQL server_version_num: 致命错误: 用户 "kong" Ident 认证失败Run with --v (verbose) or --vv (debug) for more details”的失败提示,修改 vim /var/lib/pgsql/10/data/pg_hba.conf 的 ident 为 trust 并重启数据库。

4、启动 kong

kong 微服务网关配置指南_konga_03

kong start -c /etc/kong/kong.conf -vv
curl -i http://localhost:8001/

kong 微服务网关配置指南_kong_04

kong 微服务网关配置指南_PgSQL_05

kong 微服务网关配置指南_kong_06

8000:此端口是KONG用来监听来自客户端传入的HTTP请求,并将此请求转发到上有服务器;(kong根据配置的规则转发到真实的后台服务地址。)

8443:此端口是KONG用来监听来自客户端传入的HTTPS请求的。它跟8000端口的功能类似,转发HTTPS请求的。可以通过修改配置文件来禁止它;

8001:Admin API,通过此端口,管理者可以对KONG的监听服务进行配置,插件设置、API的增删改查、以及负载均衡等一系列的配置都是通过8001端口进行管理;

8444:通过此端口,管理者可以对HTTPS请求进行监控

5、kong 的日志

kong 微服务网关配置指南_konga_07

3.接口接入 kong 测试

下面的所有admin api操作,如果成功会写入postgreSQL中,按照官方的demo操作,数据保存到数据库。

3.1. 服务转发

1、通过 api 增加 services

kong 微服务网关配置指南_konga_08

2、给 services 增加 route

kong 微服务网关配置指南_PgSQL_09

curl -i -X POST \
--url http://localhost:8001/services/baidu-service/routes \
--data 'hosts[]=baidu.com'

3、通过 kong 转发 请求

kong 微服务网关配置指南_PgSQL_10

curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host: baidu.com'

4.安装管理界面

通用的图形界面版本对新版本的支持有限,本例通过开源项目​​https://github.com/pocketdigi/kong-admin-ui​​实现图形化管理。该项目是全前端内容,自行编译后通过静态页面方式访问,需要自行维护页面安全。

4.1. 安装 nodejs

其它版本的请参考:​​​​https://github.com/nodesource/distributions#debian-and-ubuntu-based-distributions​

kong 微服务网关配置指南_pm2_11

curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum install -y nodejs

4.2 源码编译

kong 微服务网关配置指南_konga_12

git clone https://github.com/pocketdigi/kong-admin-ui
cd kong-admin-ui/
npm install
npm run build
npm run test

4.3. 配置

将编译完成的 “dist” 文件夹复制到对应的位置,例如 /usr/local/kong 并重命名为 kong-admin-ui

kong 微服务网关配置指南_konga_13

然后按照“增加静态页面”的方式完成解析配置

kong 微服务网关配置指南_kongui_14

1、不要随意修改文件名称和目录结构

2、如果出现 css、js 无法加载或报 404 错误的情况,检查文件结构和 nginx 的 default-type 类型设置


5.配置相关

5.1. 配置文件

启动加载文件:/etc/kong/kong.conf

具体配置文件:/usr/local/kong/*.conf

openresty文件:/usr/local/openresty

5.2. 修改配置文件

正常情况下 kong 的配置内容都通过 API 接口的方式完成设置,如果需要 kong 主机增加静态解析,需要修改模版文件。

/usr/local/share/lua/5.1/kong/templates/nginx.lua

/usr/local/share/lua/5.1/kong/templates/nginx_kong.lua

5.3. 增加静态解析页面

打开 /usr/local/share/lua/5.1/kong/templates/nginx.lua 文件,在  include 'nginx-kong.conf'; 内容下增加以下的内容。完成后重启 kong 服务生效

server {    
listen 8005 default_server;
include /usr/local/openresty/nginx/conf/mime.types;
default_type application/octet-stream;
index index.html;
root /usr/local/kong;
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/kong/.htpassd;
}
}

kong 微服务网关配置指南_pm2_15

nginx 环境中增加页面认证功能可以使用 htpasswd的指令完成,如下所示:

yum install httpd-tools
htpasswd -c /etc/kong/.htpassd admin
cat /etc/kong/.htpassd

6.konga 管理界面

推荐使用,通过开源项目​​https://github.com/pantsel/konga​​ konga实现。

Konga 图形界面使用指南参考:"使用Kong和Konga管理微服务和API"​​https://blog.51cto.com/waringid/5790671​

6.1. 安装 nodejs

其它版本的请参考:​​https://github.com/nodesource/distributions#debian-and-ubuntu-based-distributions​

curl -sL https://rpm.nodesource.com/setup_8.x | bash -
npm config set registry https://registry.npm.taobao.org
yum install -y nodejs
npm install sails brower -g
npm install @angular/cli -g
npm run bower-deps

6.2. 下载源码,修改配置文件

git clone https://github.com/pantsel/konga.git
chown -R postgres.postgres ./konga
cd konga/config
npm install --unsafe-perm=true --allow-root sails-postgresql
cp local_example.js local.js
vim local.js
vi connections.js
cd konga
cp .env_example .env
vim .env

修改关于数据库连接的部分。

vim local.js
models: {
connection: process.env.DB_ADAPTER || 'localDiskDb',
}
修改为 models: {
connection: process.env.DB_ADAPTER || 'postgres', // 'mysql', 'mongo', 'sqlserver' or 'postgres' 根据实际情况选择数据库
}

#修改数据库连接的配置文件

vi connections.js 
postgres: {
adapter: 'sails-postgresql',
host: process.env.DB_HOST || 'localhost',
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || 'admin1!',
port: process.env.DB_PORT || 5432,
database: process.env.DB_DATABASE ||'konga_database',
//poolSize: process.env.DB_POOLSIZE || 10,
ssl: process.env.DB_SSL ? true : false // If set, assume it's true
},

修改为:

postgres: {
adapter: 'sails-postgresql',
host: process.env.DB_HOST || 'localhost',
user: process.env.DB_USER || 'konga',
password: process.env.DB_PASSWORD || null,
port: process.env.DB_PORT || 5432,
database: process.env.DB_DATABASE ||'konga_database',
poolSize: process.env.DB_POOLSIZE || 10,
ssl: process.env.DB_SSL ? true : false // If set, assume it's true
},

PORT=1337 # Konga的Web服务监听端口
NODE_ENV=production # 环境代码,建议使用production
KONGA_HOOK_TIMEOUT=120000 # Konga调用管理API的最长回调等待时间
DB_ADAPTER=postgres # 数据库类型,支持mongo,mysql,postgres,sqlserver
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=konga
DB_USER=konga # 数据库用户名
DB_PASSWORD=konga # 数据库密码
KONGA_LOG_LEVEL=warn # 日志等级
TOKEN_SECRET=some_secret_token

6.3. 配置数据库

create user konga with password 'password';
create database konga owner konga;
grant all privileges on databse konga to konga;

6.4 安装依赖库

有关 pm2 的介绍和相关命令操作请参考“​​Nodejs pm2 应用指南​​​”​​https://blog.51cto.com/waringid/5767117​

npm i
npm install -g pm2
sudo -u postgres node ./bin/konga.js prepare --adapter postgres --uri postgresql://konga:konga@localhost:5432/konga
sudo -u postgres npm run production
sudo -u postgres pm2 start app.js --name konga
sudo -u postgres pm2 startup
sudo -u postgres pm2 save

kong 微服务网关配置指南_pm2_16

6.5. 配置及访问

按页面提示新建管理员用户并配置连接,完成后的效果如下

kong 微服务网关配置指南_kongui_17

kong 微服务网关配置指南_kongui_18