kong官网安装指南

https://docs.konghq.com/enterprise/2.6.x/deployment/installation/centos/

kong安装包:

#这里不要选企业版,企业版用不了。
https://download.konghq.com/gateway-2.x-centos-8/Packages/k/
https://download.konghq.com/gateway-2.x-centos-8/Packages/k/kong-2.6.0.el8.amd64.rpm
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

将文件上载到root目录

安装kong程序

yum install -y ./kong-2.6.0.el8.amd64.rpm

安装postgresql数据库

#yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql
yum install -y postgresql-server
/usr/bin/postgresql-setup --initdb
systemctl enable postgresql
systemctl start postgresql

配置postgresql数据库

sudo -i -u postgres
psql
CREATE USER kong; CREATE DATABASE kong OWNER kong; ALTER USER kong WITH password 'kong';
\q
exit

修改postgresql数据库允许的登录方式

vi /var/lib/pgsql/data/pg_hba.conf
#IPv4 local connections:
host    all             all             127.0.0.1/32            md5

重启postgresql数据库

systemctl restart postgresql

修改kong连接数据库的配置

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

pg_user = kong                  # Postgres user.
pg_password =kong               # Postgres user's password.
pg_database = kong              # The database name to connect to.

执行KONG配置

/usr/local/bin/kong migrations bootstrap -c /etc/kong/kong.conf

#systemctl 不起作用
#systemctl enable kong
#systemctl start kong

vi /etc/rc.d/rc.local
/usr/local/bin/kong start

测试

curl -i -X GET --url http://localhost:8001/services
curl -i -X GET --url http://localhost:8000

临时关闭防火墙(慎重,防止被黑)

systemctl stop firewalld

临时关闭seLinux(慎重,防止被黑)

setenforce 0

管理网络配置(慎重,防止被黑)

vi  /etc/kong/kong.conf
admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl, 127.0.0.1:8001, 127.0.0.1:8444 ssl
#重启
kong restart

安装konga

如果一步步安装konga的话,里面有无数的坑需要解决。最简单的办法是直接使用docker。

#安装docker-ce 这不要安装docker,而是要安装docker-ce
https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.13-3.2.fc30.x86_64.rpm
https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/docker-ce-cli-19.03.12-3.fc30.x86_64.rpm
https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/docker-ce-19.03.12-3.fc30.x86_64.rpm

yum install -y ./containerd.io-1.2.13-3.2.fc30.x86_64.rpm
yum install -y ./docker-ce-cli-19.03.12-3.fc30.x86_64.rpm
yum install -y ./docker-ce-19.03.12-3.fc30.x86_64.rpm

systemctl enable docker
systemctl start docker

#下载konga
docker pull pantsel/konga
#启动 konga
docker run -p 1337:1337 --name konga -e "NODE_ENV=production" -e "TOKEN_SECRET=kong" pantsel/konga

#docker容器自动启动
docker update  konga --restart=always

测试konga

在浏览器中打开 http://x.x.x.x:1337/
先注册一个管理员账号,记录下来。
使用管理员账号登录系统。
在“Welcome!”中选“DEFAULT”,“name”填“KongA”,在“Kong Admin URL ”中填写“http://x.x.x.x:8001”(kong服务器的IP地址,不可以填127.0.0.1,因为konga与kong分别在“两”个系统中)。

安全问题

到这里,kong和konga都已配置好,且能正常运行,但是任何人都可以访问http://x.x.x.x:8001/来对kong服务器执行管理操作,这里就带来一个巨大的安全问题。如何阻止其它人的访问呢?其实,这里就需要用到kong的内置功能了。

运行了docker之后,系统会自动创建一个网卡做桥接。比如我的网卡,就多出了“3: docker0:”,且IP是“172.17.0.1”。

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:b6:34:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.250.246/20 brd 192.168.255.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:a9:46:d1:52 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:a9ff:fe46:d152/64 scope link
       valid_lft forever preferred_lft forever

此网卡为虚拟网卡,仅仅用于本服务器与docker中的系统进行通信,外部网络无法访问。因此,我们可以使用“172.17.0.1”这个IP对kong进行管理。

#测试
curl http://172.17.0.1:8001
#正常!

配置konga管理连接

打开konga,点击“Connections ”,点击“NEW CONNECTION”,在"DEFAULT"中“name”填“KongA Admin”,在“Kong Admin URL ”中填写“http://10.88.0.1:8001”,点击“Create CONNECTION” 。
然后对“http://172.17.0.1:8001”点击“Active”。

确保,Active之后,左边菜单数量没有减少。
删除最初的连接配置“KongA”。

重新外网配置

vi  /etc/kong/kong.conf
admin_listen = 172.17.0.1:8001, 172.17.0.1:8444 ssl, 127.0.0.1:8001, 127.0.0.1:8444 ssl
proxy_listen = 0.0.0.0:80 reuseport backlog=16384, 0.0.0.0:443 http2 ssl reuseport backlog=16384

#重启
kong restart

这样配置之后,本机和docker容器可以访问8001、8444管理端口,因此这样就简单地阻止了外部网络访问该端口。如果需要管理服务器,则可以在系统中通过命令行,或者直接通过konga进行管理。
外部访问80、443端口即可。

设置防火墙

systemctl start firewalld
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent

#将docker0接口设置到信任区域
firewall-cmd --zone=trusted --add-interface=docker0 --permanent