kong笔记——kong/konga的搭建

kong笔记——kong/konga的搭建经过上篇的介绍 大家可能对 kong 有一个简单的了解 如果不了解的同学 可以看看这篇 kong 笔记 认识 kong 一 本篇及以后的此系列文章皆为实战篇版本介绍 重点 重点 一定要观察版本 防止不兼容情况 kong2 5 0konga0 14 9pgsql9 6linuxcentos 简述对于 kong 的搭建 官网提供的方式有很多 感兴趣的自己可以看看 kong 官方文档 InstallKongG Enterprise v2 5 x KongD

kong笔记 目录导航

本篇及以后的此系列文章皆为实战篇

版本介绍(重点,重点,一定要观察版本,防止不兼容情况!!):

kong 2.5.0

konga 0.14.9

pgsql 9.6

linux centos 7

简述

唠叨几句哈:

  1. 本人试过常用的两种方式:
    1. centos 7安装kong;
    2. docker安装kong √ 推荐!!!!

    相对来说,更推荐使用docker的方式,因为可以避免很多麻烦,原因如下:

    • docker直接是配好的kong环境,直接下拉镜像,直接启动,不用配置其他额外的环境
    • linux安装kong的时候,你需要检查很多环境,比如nodeJs(konga出现的问题),yum版本,lua相关问题,以及某些资源镜像下载过慢问题,很是折磨人
  2. 本篇不是还要讲konga的使用么,这里说一下为什么使用konga而不是官方的Kong-Dashboard?
    这是因为官方支持的Kong-Dashboard不支持kong的最新版本,目前仅支持kong2.0以下的版本,就会导致很多功能不能用!!!!很蛋疼…
    Kong-Dashboard的版本控制:




    Kong-Dashboard versions Kong versions Node versions
    1.x.x >= 0.6, < 0.10
    2.x.x 0.10
    3.0.x >= 0.9, <0.12 >= 6.0.0
    3.1.x, 3.2.x >= 0.9, <0.13 >= 6.0.0
    3.3.x, 3.4.x >= 0.9, <0.14 >= 6.0.0
    3.5.x >= 0.9, <0.15 >= 6.0.0
    3.6.x >= 0.9, <2.0.0 >= 6.0.0
  3. kong自身支持DB模式和无DB模式

    官方建议的是Cassandra数据库或者PostgreSQL数据库!!!!!(如果使用mysql的话,可能另行操作,可实现的)

    什么意思呢?

    • DB方案Kong的集群采用有库模式,数据库选择nosql数据库cassandra,kong集群中的节点共享数据库的配置。通过开发管理控制台,通过Kong提供的Admin API来管理Kong的相关转发配置(包括Services,Routes,Consumers,Plugins,Credentials等)。
    • DB-LESS方案Kong的集群采用DB-LESS模式,通过Kong提供的kong.yml配置来做Kong的相关转发配置(包括Services,Routes,Consumers,Plugins,Credentials等)。每一台kong依赖于各自的配置文件。yml配置完以后需要重启各自的kong服务生效。

    两者都有各自的适用场景:

    1. DB-LESS模式下的kong集群的优势在于,DB-LESS模式引入的组件少,高可用性较好,可维护性较好;劣势在于,不支持api的方式进行配置,需要自行开发服务或者引入第三方工具来替换配置文件。
    2. DB模式的优点在于支持的插件更丰富,kong的功能扩展性更好,支持通过API的方式来直接修改配置;劣势在于引入了数据库,在高可用上和可维护性上相比较DB-LESS低一些。

    引用链接:[kong DB-LESS和DB模式的对比](kong DB-LESS和DB模式的对比_Will Wang0715的博客-CSDN博客)

本篇采用的是DB模式!!!!!!!!!

docker安装kong

注意本篇文章开头的版本,防止不兼容情况出现!!!!!

  1. 创建kong网络
    docker network create kong-net 
  2. 安装PostgreSQL
    官方建议的版本是9.6版本

    分为两步走:

    • 创建 PostgreSQL 容器
      docker run -d --name kong-database --network=kong-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e "POSTGRES_PASSWORD=kong" --restart always postgres:9.6 
    • 使用Kong 容器运行进行数据库初始化(其实就是数据库的迁移而已)
      docker run --rm --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" kong:2.5.0 kong migrations bootstrap 

      如果额外创建一个数据库,可以使用这个命令:

      su postgres psql create user admin; create database kong_test owner admin; alter user admin with encrypted password ''; grant all privileges on database kong_test to admin; -- 初始化kong数据库 docker run -it --rm -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=xxxxxx" -e "KONG_PG_PORT=5432" -e "KONG_PG_USER=admin" -e "KONG_PG_PASSWORD=" -e "KONG_PG_DATABASE=kong_test " -e "KONG_CASSANDRA_CONTACT_POINTS=kong_test " kong:2.5.0 kong migrations bootstrap 
  3. 创建kong容器
    docker run -d --name kong --network=kong-net -u root -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 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 --restart always kong:2.5.0 

    这里要注意几点:

    1. 一定要添加上 -u -root,因为kong启动的过程中,会创建一些文件以及文件夹,如果没有添加此参数,会出现permission defined…等等众多权限问题!!!!!

      很抓狂的,刚开始添加的是 --privileged=true该命令,按道理应该是可以的,但后来的实验中不可以,对,不可以!!!!!后来才知道,添加的是 -u -root命令

    2. 如果想要kong的最新的版本,可以将 kong:2.5.0修改为你想要的版本,比如 kong:latest;
    3. 对于 KONG_ADMIN_LISTEN=0.0.0.0:8001,0.0.0.0:8444 ssl命令,只是为了让kong可以在外网访问,可以不配置,也可以在kong.conf里配置

      就是你kong在linux里面部署,但是你想在本地浏览器访问的话,就必须配置这个参数。

    4. 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这些命令暂时先留个坑,后面有说~
  4. 测试kong是否成功
    • 在linux命令行里面输入:curl http://localhost:8001 返回一堆json即为成功!
      1632023905(1).jpg

    • 或者在浏览器输入:http://IP:8001

      如果浏览器没显示,curl成功,则是因为kong.conf 文件重的 admin_listen 配置未生效!!!

      注意是ip!!!,不是localhost(我这里是本地docker搭建的,所以是localhost)

      1632024416(1).jpg

    此时,kong的搭建已经完成,你可以进行kong功能的基本测试了!!!!

    至于konga,他其实就是一个kong的可视化API操作页面,非必须的,当然我们为了操作方便,进行更多的测试可以选择搭建它。

docker搭建konga

在上述操作的基础上,运行docker命令:

docker run -p 1337:1337 --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 "DB_DATABASE=konga_db" -e "KONGA_HOOK_TIMEOUT=" --name konga pantsel/konga:0.14.9 

此时打开浏览器,访问http:// IP :1337,即可进入以下页面:

image-20210919163150025.png

首次进入konga的时候,需要创建用户名与密码。

创建成功之后进入konga系统,如下页面:

image-20210919163430215.png

比如 Name:kong

​ Kong Admin URL: http://ip:8001

注意,kong的api接口端口都是8001!!!!

接下来,你就可以进行通过konga才操作kong了。

另外,也顺便提一下把,采用上述的konga部署步骤,会造成一个问题:

就是konga里的相关的数据不会记录,每创建一次容器就会导致数据消失,比如之前已经创建好的用户名,密码,即这些数据没有持久化,所以,你可以选择性的建立一个konga的数据库,相关语句:

su postgres psql create user konga; create database konga owner konga; alter user konga with encrypted password 'kongapassword'; grant all privileges on database kong to konga; #初始化数据结构语句,迁移konga的数据 docker run --rm pantsel/konga:latest -c prepare -a postgres -u postgresql://konga:konga@192.168.1.36:5432/konga postgresql://konga:konga@192.168.1.36:5432/konga 其中,konga:konga代表的是用户名,密码 /konga代表的是你自己创建的数据库 

知识点

  1. 首先,我们要明白kong的四个端口是干嘛的:
    • 8000/8443,这两个是kong的代理端口
    • 8001/8444,这两个是kong的管理端口,即API端口

    其中,8000,80001是http端口,8443,8444是https端口

  2. 注意文章开头的简述的第三点,数据库的模式;
    数据库里面存储的是kong服务的数据,比如services,routes,plugins等等;
    如果用的是无DB模式,则这些数据都需要在yml文件提前配置




  3. docker部署完kong之后,常用的配置文件目录如下:
    配置文件名称docker内部路径作用
    kong.conf/etc/kong/此文件kong本身是不会创建的,这个文件是通过手动 cp /etc/kong/kong.conf.default而产生的,通过他,可以改变一些kong默认的配置参数,非常重要
    access.log/admin_access.log/error.log/usr/local/kong/logs主要查看请求成功,失败的日志,非常重要
    plugins/usr/local/share/lua/5.1/kong/pluginskong默认的插件所在位置,根据业务需求可自定义插件
    nginx.lua/nginx_kong.lua/usr/local/share/lua/5.1/kong/templateskong自动生成的nginx.conf,nginx-kong.conf的配置模板,
    /usr/local/kong/nginx.conf就是通过此lua文件自动生成的,如果你要自定义nginx,在此修改,切勿修改nginx.conf文件

    constants.lua/usr/local/share/lua/5.1/kongkong携带的插件列表,偷懒的时候用的,在这里添加你的自定义插件name,就部署上去了(注意,是偷懒的时候用的)
    resty库/usr/local/openresty/lualib/resty/openresty携带的lua库,如果你想修改/添加原生resty的lua脚本

踩坑点

  1. 搭建kong的过程中,我对外挂载了logs目录,尽管生成了3个日志文件(access.log,error.log等),但是无法查看是什么鬼?
    还记得上面留有的这些问题么?
    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




    这是因为这些命令直接输出到了控制台,交给了docker的日志管理,所以打不开,如果你想查看日志,去查看docker的日志,命令:

    docker logs 容器名字或者id

  2. 如果你跟我一样,用的是docker desktop搭建的kong和konga,那么你可能会遇到这些问题:
    • 是否支持虚拟化操作
      怎么判断是否支持呢?
      打开任务管理器——> 性能—— > CPU——>右下方有个虚拟化,如果是已启用,则证明你支持虚拟化




    • 出现如下错误:
      error: KongProxyController request error undefined error: Sending 500 ("Server Error") response: { error: Error: connect ECONNREFUSED 127.0.0.1:8001 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) { errno: 'ECONNREFUSED', code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 8001 } } 

      这个问题的原因是因为没有使用本机的虚拟ip,因为docker desktop在本地搭建了一个虚拟机,要想请求交互,就需要你windows本机的虚拟ip

      win+r cmd

      ipconfig

      找到IPv4地址

      在konga上填写 http://IPv4:8001地址,就可以了

      这个问题很蛋疼的,找了我好久!!!!!!!!!!!!!!!!!!!!!!!!!

      如果出现了同样的问题,按照我的方式还没有解决的话,参考这篇:

      [KongProxyController request error undefined error:connect ECONNREFUSED 127.0.0.1:8001](KongProxyController request error undefined error:connect ECONNREFUSED 127.0.0.1:8001_yhlly_的博客-CSDN博客)

常用命令

其实挺犹豫要不要加上这个模块,想了想,还是加上把,毕竟算个记录,不然到时候又得重新百度一群命令,也挺烦人的~~~~~~~

kong

  1. 启动命令
    • kong start 此命令默认加载kong.conf配置
    • kong start -c /path/file.conf 此命令是启动你自定义配置
  2. 停止命令
    kong stop

  3. 重载
    kong reload

docker

查看所有docker 容器

docker ps -a 

启动/停用容器

docker start/stop 容器id 

进入容器:

docker exec -it id /bin/bash 

将宿主机的文件 拷贝到docker

docker cp /usr/local/share/lua/5.1/kong/plugins/change-url 21c1b12a3d9e:/usr/local/share/lua/5.1/kong/plugins/change-url 

将docker文件拷贝到宿主机,后面路径是宿主机

docker cp 59361b2cb0c7:/tmp/change.log /tmp/change.log 

强制删除容器

docker rm -f id 

查看容器日志:

docker logs id 

docker 如何查看已存在的容器所挂载的目录

docker inspect container_name | grep Mounts -A 20 

docker 挂载通过-v来实现:(将容器的soft文件挂载到宿主机的test文件 冒号前是宿主文件路径,后面是容器路径)

docker run -v /test:/soft 

还可以通过$PWD挂载, $PWD是当前宿主机的路径

docker run -v "$PWD":/soft 

如果出现 inintal option xxxx错误,说明 -v xxxxxx 必须放到前面,不然挂载不上。

挂载过程中出现permission defined,请使用

sudo chmod -R 777 /usr/xxxxxx 对其路径进行赋予权限 

docker 日志目录:

docker inspect --format '{ 
   {.LogPath}}' id 

动态查询日志:

tail -fn200 /日志路径 

docker logs 查看实时日志

docker logs -f -t --since="2017-05-31" --tail=10 edu_web_1 

–since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f : 查看实时日志

-t : 查看日志产生的日期

-tail=10 : 查看最后的10条日志。

edu_web_1 : 容器名称

linux

  1. 查找文件在哪
    sudo find / -name "pgsql" 
  2. 查看linux版本
    1. uname -a 内核版本

      显示效果: Linux iZ2ze0njz4i1crmmx5fky2Z 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

    2. cat /proc/version 内核版本

      显示效果:Linux version 3.10.0-693.2.2.el7.x86_64 () (gcc version 4.8.5 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Sep 12 22:26:13 UTC 2017

    3. cat /etc/redhat-release 发行版本

      显示效果: CentOS Linux release 7.4.1708 (Core)

  3. 过滤自己需要卸载的程序
    rpm -q -a | grep 'agent' 
  4. 卸载软件
    rpm -e --allmatches 'xxx' 

总结

好了,今天主要是介绍了kong与konga的部署流程,对于使用流程,则交给下篇把~~~

以上自述均出自于作者对kong的理解,如有不对的地方或者遇到什么问题,评论区讨论呀~~~~,哈哈哈

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217965.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午8:21
下一篇 2026年3月18日 上午8:22


相关推荐

  • rider 2022 激活码【2022免费激活】

    (rider 2022 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1TCF2R91JZ-eyJsaWNlbnNlSW…

    2022年3月31日
    2.6K
  • 让AI替你打工!OpenClaw保姆级教程!

    让AI替你打工!OpenClaw保姆级教程!

    2026年3月13日
    2
  • 实操:英伟达免费模型接入 Claude Code 教程

    实操:英伟达免费模型接入 Claude Code 教程

    2026年3月16日
    3
  • 打印机设置共享以及共享时无法连接,报错0X00000006解决方法[通俗易懂]

    打印机设置共享以及共享时无法连接,报错0X00000006解决方法[通俗易懂]取消禁用Guest用户,因为别人要访问安装打印机的按个电脑就是以guest账户访问的。 点击【开始】按钮,在【计算机】上右键,选择【管理】,如下图所示: 在弹出的【计算机管理】窗口中找到【Guest】用户 双击【Guest】,打开【Guest属性】窗口,确保【账户已禁用】选项没有被勾选 设置共享目标打印机:点击【开始】按钮,选择【设备和打印机】,如下图: 在…

    2022年5月14日
    619
  • ATM(异步传输模式)是什么?

    ATM(异步传输模式)是什么?异步传输模式(ATM)也称为信元中继(在固定大小的信元中传输数据),通过光纤或双绞线电缆(高速交换)在OSI模型的数据链路层(第2层)运行基于ITU-T宽带综合业务数字网络(B-ISDN)标准的网络技术,该标准是电信业开发的自动取款机可以同时传输各种流量:语音、视频和数据,速度高达每秒155兆比特。它将语音和视频数据转换成数据包,并通过相同的介质传输大数据包数据。自动取款机和TCP。由于两个端点之间使用固定通道路由协议路由,所以/IP是不同的。实时低延迟应用程序,如VoIP和视频,在ATM网络上..

    2026年2月9日
    6
  • qtabwidget tab样式_qt geometry

    qtabwidget tab样式_qt geometrytabWidget=newQTabWidget();tabWidget->setUsesScrollButtons(true);//使QTabWidget显示滚动条tabWidget->setTabsClosable(true);//设置tab的关闭选项tabWidget->setTabsClosable(true)…

    2026年2月22日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号