欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安装 Kong 网关

程序员文章站 2022-06-03 20:17:28
...

 

 

安装 Kong 网关

 

快速入门PostgreSQL

Kong可以在有或没有数据库的情况下运行这里我们使用数据库的方式进行运行。Kong支持PostgreSQL 9.5+Cassandra 3.xx数据库我们选择PostgreSQL 11,下面我们首先快速学习下PostgreSQL数据库的基本安装、配置和使用。

 

安装PostgreSQL 11

 

1、PostgreSQL 11官方文档:

http://www.postgres.cn/docs/11/index.html

 

2、支持的操作系统平台:

 

http://www.postgres.cn/docs/11/supported-platforms.html

 

3、GCC版本要求:3.80或以上

 

# 安装gcc
yum install gcc -y
# 查看当前安装的gcc版本
make --version
 
通过源码进行安装postgreSQL 11命令清单:
 
# 创建目录
mkdir -p /opt/src
cd /opt/src
# 安装gcc wget命令工具
yum install wget gcc -y
# 下载源码
wget https://ftp.postgresql.org/pub/source/v11.0/postgresql-11.0.tar.gz
tar -xvf postgresql-11.0.tar.gz
cd postgresql-11.0
# 安装postgre默认需要的依赖库
yum install -y readline-devel zlib-devel
# 编译安装postgreSQL
./configure
make
su
make install


启动PostgreSQL

# 创建引导启动默认系统用户,同时也是postgresql用户
adduser postgres
# 创建数据库目录
mkdir /usr/local/pgsql/data
# 将数据库授权给postgres用户
chown postgres /usr/local/pgsql/data
# 切换到postgres用户
su postgres
# 格式化数据库目录
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
# 一定要进入这个目录,其它目录postgres用户没有权限创建日志文件logfile
cd /usr/local/pgsql/data
# 通过pg_ctl命令启动postgresql服务
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

PostgreSQL基本操作

 

# 连接到默认的postgres数据库,然后创建数据库test
/usr/local/pgsql/bin/createdb test
# 进入test数据库终端,可以通过输入\q退出终端
/usr/local/pgsql/bin/psql test
# 在test数据库上创建表
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);
# 插入数据到products表
INSERT INTO products VALUES (1, 'Cheese', 7.99);
INSERT INTO products VALUES (1, 'Cheese', 8.99);
INSERT INTO products VALUES (1, 'Cheese', 9.99);
# 全表查询
SELECT * FROM products;
# 聚合函数查询
SELECT max(price) FROM products;
# 更新products表
UPDATE products SET price = 10 WHERE price = 9.99;
# 删除数据
DELETE FROM products WHERE price = 10;
# 查询
SELECT * FROM products;
# 删除products表
DROP TABLE products;
# 退出终端
\q
# 通过pg_ctl命令停止postgreSQL服务
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile stop

PostgreSQL 用户、角色概念

 

当启动postgreSQL服务时,默认会创建一个跟当前操作系统用户名相同的角色,这个角色默认为“superuser”关于角色后面会介绍),例如前面的postgres角色。在postgreSQL 8.1版本之后用户、角色、用户组是同一个概念,统一称为角色,用户就是角色,角色就是用户,没有关联关系,是直接等同关系。后面我们统称为角色,例如下面命令执行后创建的都是角色:

 

CREATE ROLE test1;
CREATE USER test2;
# 创建的都是角色数据
SELECT rolname FROM pg_roles;

PostgreSQL 数据库概念

 

当我们开始使用postgreSQL前必须先通过initdb命令初始化一个数据库集群(database cluster),并通过-D选项指定数据库集群目录。例如下面命令:

 

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

 

一个数据库集群下可以创建多个数据库集合,当我们执行initdb命令成功后,会默认创建一个名为postgres的数据库这个数据库,同时还会创建一个名称为template1template0的数据库,template1将被用于创建后续数据库的默认克隆模板如果你为template1数据库增加对象,这些对象将被拷贝到后续创建的用户数据库中。在数据库集群被初始化之后,不应该对template0做任何修改。因为后续可以通过CREATE DATABASE命令指定使用template0取代template1进行拷贝,你可以创建一个纯净版的用户数据库,它不会包含template1任何修改的东西。

 

CREATE DATABASE dbname TEMPLATE template0;
createdb -T template0 dbname

PostgreSQL单个数据库集群内可以管理许多数据库 可以通过连接到默认创建的postgres数据库上执行下面命令创建数据库:

 

# 首先连接到默认的postgres数据库
/usr/local/pgsql/bin/psql postgres
# 然后创建新的数据库
create database <database_name>;

创建数据库时必须要连接到某个数据库下才能创建(createdb 命令也是一样,自动连接postgres数据库并且发出CREATE DATABASE命令)。当在数据库集群中创建一个新数据库时,实际上就是克隆了template1你对template1所做的任何修改都会体现在所有随后创建的数据库中。因此应避免在template1中创建对象,除非你想把它们传播到每一个新创建的数据库中

 

默认该数据库的归属者为当前角色,以后只能通过该角色来删除该数据库。如果你想为其他人创建一个数据库,并且使其成为新数据库的拥有者, 这样他们就可以自己配置和管理这个数据库。要实现这个目标,使用下列命令

 

# 首先连接到默认的postgres数据库,注意:使用的是默认的当前操作系统用户作为角色进行连接
# 可以通过 -U参数指定角色
/usr/local/pgsql/bin/psql postgres
# 然后创建新的数据库,并指定归属角色
CREATE DATABASE dbname OWNER rolename;
或者:
createdb -O rolename dbname

PostgreSQL角色权限概念

 

通过在创建角色时指定属性的方式来为角色授权,例如:

 

# 创建角色test,并赋予LOGIN权限来允许该角色拥有登录数据库的权限。
# CREATE USER和CREATE ROLE等效,但是 CREATE USER语句默认拥有LOGIN权限
CREATE ROLE test LOGIN;
# 超级管理员角色
CREATE ROLE test SUPERUSER;
# 拥有创建数据库的权限
CREATE ROLE test CREATEDB;
# 拥有修改和删除其它角色的权限
CREATE ROLE name CREATEROLE;
# 设置角色连接密码,需要开启客户端连接密码开关才能生效
CREATE ROLE test PASSWORD '123';
# 修改角色密码
ALTER ROLE test WITH PASSWORD '123345';
# 删除角色
DROP ROLE name;

PostgreSQL核心配置文件讲解

 

PostgreSQL大部分配置都是通过配置文件进行配置的,所有配置文件默认放置在初始化的数据库集群目录下,例如:/usr/local/pgsql/data,配置文件后缀一般为.conf,大致有以下配置文件:

postgresql.conf:主要配置文件。

postgresql.auto.conf:这个配置文件不应该手工编辑,它保存了通过ALTER SYSTEM命令提供的设置。当postgresql.conf被重新加载时,也会同时加载该配置文件,postgresql.auto.conf中的设置会覆盖postgresql.conf 中的设置

pg_ident.conf配置操作系统用户数据库角色的映射关系。

pg_hba.conf:客户端认证相关配置。

 

每次修改动态配置后都可以通过执行pg_ctl reload或调用 SQL 函数pg_reload_conf()

命令来热更新配置。

 

postgresql.conf关键配置说明:

postgresql.conf配置文件的配置项比较多,这里只介绍比较关键的几个配置,关于其它配置请参考前面给出的官方文档地址。

  • listen_addresses (string)配置对外监听的网卡,默认为回环网卡接口:localhost,一般需要重新配置为能够对外远程访问的网卡地址,例如:0.0.0.0

  • port (integer)配置对外监听的端口号,默认为5432

  • max_connections (integer)支持最大的并发连接数,默认100,可以相应调整。

  • password_encryption当在CREATE ROLE或者ALTER ROLE中指定了口令时,这个参数决定用于加密该口令的算法。默认值是md5,它会将口令存为一个MD5哈希

 

配置示例如下:

 

listen_addresses = '0.0.0.0'
port = 5432                            
max_connections = 200
password_encryption = md5

pg_hba.conf配置说明:

 

当一个客户端应用连接一个数据库服务器时,它将指定以哪个PostgreSQL 数据库角色进行连接,默认是使用和当前操作系统用户名相同的角色进行连接。注意:PostgreSQL 数据库角色和操作系统用户是不同的体系,只是PostgreSQL很多缺省情况下借用了操作系统的用户名称而已。PostgreSQL通过一个配置文件来配置客户端认证的信息,该文件放置在初始化的数据库集群目录下的pg_hba.conf(例如/usr/local/pgsql/data/pg_hba.conf),配置支持的七种格式如下:

 

# 连接类型 | 数据库名 | 角色名 | IP 地址范围  | 口令验证方式 | 认证方法选项
local      database  user  auth-method  [auth-options]
host       database  user  address  auth-method  [auth-options]
hostssl    database  user  address  auth-method  [auth-options]
hostnossl  database  user  address  auth-method  [auth-options]
host       database  user  IP-address  IP-mask  auth-method  [auth-options]
hostssl    database  user  IP-address  IP-mask  auth-method  [auth-options]
hostnossl  database  user  IP-address  IP-mask  auth-method  [auth-options]

配置项说明:

 

local

 Unix 域套接字连接

host

TCP/IP 建立的连接包括SSL和非SSL

hostssl

TCP/IP 建立的连接,但必须是使用SSL加密的连接

hostnossl

TCP/IP 建立的连接,但必须是使用SSL加密的连接

database

指定数据库名称

all:所有数据库

 sameusersamerole如果请求的数据库和请求的角色同名,则匹配

replication如果一个物理复制连接被请求则该记录匹配(注意复制连接不指定任何特定的数据库)。

user

指定角色名称。

all:所有角色。

 

address

指定客户端机器地址范围。示例:172.20.143.89/32用于一个主机, 172.20.143.0/24用于一个小型网络, 10.6.0.0/16用于一个大型网络all匹配任何 IP 地址samehost匹配任何本服务器自身的 IP 地址samenet匹配本服务器直接连接到的任意子网的任意地址。只适用于host hostsslhostnossl

IP-addressIP-mask

等于将172.20.143.89/32分开编写,示例:172.20.143.89  32只适用于hosthostsslhostnossl

auth-method

指定当一个连接匹配这个记录时,要使用的口令认证方法

trust无条件地允许连接不需要口令或者其他任何认证

reject无条件地拒绝连接。

scram-sha-256执行SCRAM-SHA-256认证来验证用户的口令。

md5执行SCRAM-SHA-256MD5认证来验证用户的口令。

password要求客户端提供一个未加密的口令进行认证。

gssGSSAPI 认证用户。只对 TCP/IP 连接可用。

sspiSSPI 来认证用户。只在 Windows 上可用。

ident通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。

 

配置示例如下:

 

#允许本地系统上的任何用户通过 Unix 域套接字以任意数据库角色连接到任意数据库
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
 
#和前一行规则相同,但使用本地环回 TCP/IP 连接。
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             127.0.0.1/32            trust
 
# 和前一行相同,但是使用了一个独立的掩码列
# TYPE  DATABASE        USER            IP-ADDRESS      IP-MASK             METHOD
host    all             all             127.0.0.1       255.255.255.255     trust
 
# 允许来自任意具有 IP 地址 192.168.93.x 的主机上任意角色以 ident 为该连接所报告的相同用户名连接到数据库 "postgres"(通常是操作系统用户名)。
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    postgres        all             192.168.93.0/24         ident
 
# 如果用户的口令被正确提供,允许来自主机 192.168.12.10的任意用户连接到数据库 "postgres"。
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    postgres        all             192.168.12.10/32            md5

安装Kong

了解PostgreSQL数据库后我们现在开始安装Kong

 

1、通过yum安装kong命令清单:

 

sudo yum update -y
sudo yum install -y wget
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
sudo mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
sudo yum update -y
sudo yum install -y kong

2、安装PostgreSQL(为了完整性,将前面代码重新贴一遍):

 

# 创建目录
mkdir -p /opt/src
cd /opt/src
# 安装gcc wget命令工具
yum install wget gcc -y
# 下载源码
wget https://ftp.postgresql.org/pub/source/v11.0/postgresql-11.0.tar.gz
tar -xvf postgresql-11.0.tar.gz
cd postgresql-11.0
# 安装postgre默认需要的依赖库
yum install -y readline-devel zlib-devel
# 编译安装postgreSQL
./configure
make
su
make install
# 创建引导启动默认系统用户,同时也是postgresql用户
adduser postgres
# 创建数据库目录
mkdir /usr/local/pgsql/data
# 将数据库授权给postgres用户
chown postgres /usr/local/pgsql/data
# 切换到postgres用户
su postgres
# 格式化数据库目录
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
# 一定要进入这个目录,其它目录postgres用户没有权限创建日志文件logfile
cd /usr/local/pgsql/data
# 通过pg_ctl命令启动postgresql服务
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

3、创建kong数据库、角色等信息:

# 连接postgres数据库
/usr/local/pgsql/bin/psql postgres
# 创建kong角色,并设置密码
CREATE ROLE kong PASSWORD 'kong123';
# 修改角色,赋予kong角色登录权限
ALTER ROLE kong LOGIN;
# 创建kong数据库,并设置归属者为kong角色
CREATE DATABASE kong OWNER kong;

4、配置postgresql.conf

# 退出当前数据库终端界面
\q
# 进入数据库集群目录
cd /usr/local/pgsql/data
# 编辑配置文件
vi postgresql.conf
# 修改配置项如下:
listen_addresses = '0.0.0.0'
port = 5432                            
max_connections = 200
password_encryption = md5

5、配置

 

# 编辑配置文件
vi pg_hba.conf
# 末尾添加配置如下:
# 允许任何客户端IP通过kong角色访问kong_db数据库,口令加密方式为md5
host    kong            kong            all                     md5

6、重启PostgreSQL:

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile restart

 

7、使用navacat连接数据库客户端工具测试连接。

 

8、修改kong.conf

 

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


vi /etc/kong/kong.conf
# 修改内容如下:


# 修改后台管理监听地址,默认监听回环网卡127.0.0.1
admin_listen = 0.0.0.0:8001 reuseport backlog=16384, 127.0.0.1:8444 http2 ssl reuseport backlog=16384
# 笔者这里刚好在同一台机子上
pg_host = 127.0.0.1
pg_port = 5432
pg_user = kong
pg_password = kong123
pg_database = kong

 

9、迁移kong配置数据到PostgreSQL数据库:

 

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

 

执行完成后可以刷新kong数据库,可以看到创建了一堆默认的表。

 

10、启动kong:

 

kong start -c /etc/kong/kong.conf
# 停止kong
kong stop
# 热更新配置
kong reload

11、端口说明:

 

默认情况下,Kong侦听以下端口可以通过netstat -nlpt命名确认

 

  • 8000 Kong在该端口上侦听来自客户端的传入HTTP流量,并将其转发到上游服务。

  • 8443Kong在其上侦听传入的HTTPS流量。此端口具有与端口类似的行为:8000,除了它仅期望HTTPS通信。可以通过配置文件禁用此端口。

  • 8001用于配置Kong侦听的Admin API

  • 8444 Admin API在其上侦听HTTPS流量。

 

12、测试访问kong Admin-API

 

curl -i http://localhost:8001/

或浏览器直接访问:

 

http://ip:8001

 

注意:kong支持社区版和企业版,社区版实际就是开源免费的版本,而企业版为收费版本,社区版和企业版在核心功能上区别不是太大, 主要的区别在于完善程度不同,比如社区版没有Admin-API界面化支持,只能通过postmancurlrestful的方式和Admin-API进行交互,而企业版则支持界面化的Admin交互。关于更多企业版和社区版的区别可以查看这个官方地址:

 

https://docs.konghq.com/getting-started-guide/ce-2.0.x_ke-1.5.x/overview/

至此,Kong安装完毕!

---------- 正文结束 ----------

长按扫码关注微信公众号

安装 Kong 网关

Java软件编程之家