安装 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软件编程之家
上一篇: 微服务
推荐阅读
-
电脑安装ABBYY FineReader 12提示访问文件被拒绝的解决方法
-
mysql 5.7以上版本安装配置方法图文教程(mysql 5.7.12mysql 5.7.13mysql 5.7.14)
-
Wing FTP Server FTP服务器端中文版安装使用教程
-
Mysql5.7.17 winx64.zip解压缩版安装配置图文教程
-
ie9无法安装怎么解决?ie9无法安装解决图文教程
-
linux下mysql的安装步骤
-
windows系统mysql5.7.18安装图文教程
-
谷歌浏览器(chrome)的免费插件时空隧道安装与使用图文教程
-
详解在React项目中安装并使用Less(用法总结)
-
python3.4+pycharm 环境安装及使用方法