安装 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的数据库,这个数据库,同时还会创建一个名称为template1和template0的数据库,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:所有数据库。

 sameuser、samerole:如果请求的数据库和请求的角色同名,则匹配。

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、 hostssl和hostnossl。

IP-addressIP-mask

等于将172.20.143.89/32分开编写,示例:172.20.143.89  32。只适用于host、hostssl和hostnossl。

auth-method

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

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

reject:无条件地拒绝连接。

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

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

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

gss:用 GSSAPI 认证用户。只对 TCP/IP 连接可用。

sspi:用 SSPI 来认证用户。只在 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界面化支持,只能通过postman或curl等restful的方式和Admin-API进行交互,而企业版则支持界面化的Admin交互。关于更多企业版和社区版的区别可以查看这个官方地址:

 

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

至此,Kong安装完毕!

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

长按扫码关注微信公众号

Java软件编程之家

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值