由于实际情况不同,使用官网的安装方法几乎无法顺利部署。其实里面涉及了一些小技巧,也就是这里面的坑,官网没有相关的介绍。
经过近一个月断断续续的摸索,终于解决了这些坑,从而得以顺利部署。这些坑包括防火墙、安全linux、Docker容器之间的通信,Docker容器与主机之间的通信等。
本文在一台新安装的CentOS8最小化安装的系统上,依照此步骤可以顺利安装成功。
kong官网安装指南
https://docs.konghq.com/install/docker/
安装Docker
#这不要安装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
下载完毕后,上载到root根目录,然后执行如下命令:
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
下载docker镜像
#数据库,这里必须选9.6,高版本会出现问题
docker pull postgres:9.6
#kong
docker pull kong
#konga
docker pull pantsel/konga
启动postgres数据库
#创建docker网络
docker network create kong-net
设置防火墙策略
这里的接口,除了真实的网卡外,把与docker相关的虚拟网卡全部加入到trusted区域
firewall-cmd --permanent --zone=public --remove-interface=docker0
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --permanent --zone=public --remove-interface=br-d6e58b2f715a
firewall-cmd --permanent --zone=trusted --add-interface=br-d6e58b2f715a
firewall-cmd --reload
创建数据库专用卷
docker volume create kong-volume
启动postgres,这里这是数据库随docker启动,这里必须选9.6,高版本会出现问题,注意添加“–restart=always”这一句,让容器随docker的启动而启动。
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-v kong-volume:/var/lib/postgresql/data \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
--restart=always \
postgres:9.6
启动kong
为kong创建数据表
如果按照官方配置,则会出现一些莫名其妙的问题,如:
Error: [PostgreSQL error] failed to retrieve PostgreSQL server_version_num: timeout
Error: [PostgreSQL error] failed to retrieve server_version_num: temporary failure in name resolution
解决方法:先暂停防火墙,暂停安全linux,更改KONG_PG_HOST
systemctl stop firewalld
setenforce 0
再先查看本机IP地址,将KONG_PG_HOST修改为本机的docker0的IP地址(注意:不是127.0.0.1)
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=172.17.0.1" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong kong migrations bootstrap
启动kong,不加-d参数的话,kong容器将在前台运行,会输出运行中的系统信息。在生产环境中,加上-d参数,让其在后台运行,无需运行的系统信息。
注意:在启动kong之前,需要启动防火墙,kong会对防火墙做一些配置。
systemctl start firewalld
启动kong容器
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 80:8000 \
-p 443:8443 \
-p 127.0.0.1:8001:8001 \
-p 127.0.0.1:8444:8444 \
--restart=always \
kong
启动konga
首先,同样先关闭防火墙,再启动容器
systemctl stop firewalld
创建数据表,将KONG_PG_HOST修改为本机的IP地址(注意:不是127.0.0.1)。
docker run --rm pantsel/konga \
-c prepare \
-a postgres \
-u postgresql://kong:kong@172.17.0.1:5432/konga
接下来,需要启动防火墙,konga会对防火墙做一些配置
systemctl start firewalld
启动konga
docker run -d --name konga \
-p 0.0.0.0:1337:1337 \
--network=kong-net \
-e "TOKEN_SECRET=kong" \
-e "DB_ADAPTER=postgres" \
-e "DB_HOST=kong-database" \
-e "DB_PORT=5432" \
-e "DB_USER=kong" \
-e "DB_PASSWORD=kong" \
-e "DB_DATABASE=konga" \
-e "NODE_ENV=production" \
--restart=always \
pantsel/konga
konga配置
#打开浏览器,访问本机的1337端口:
http://192.168.250.246:1337/
首先注册一个管理员账号。注册完毕后,使用管理员账号登录,创建一个连接(Connections),名称可以随便取一个,Kong Admin URL,填写:
http://kong:8001/
测试各项功能是否能够正常使用。
检查
测试完毕之后,务必重新启动服务器,重新之后检查所有服务是否正常启动。