kong笔记——kong/konga的搭建

kong笔记 目录导航

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

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

kong 2.5.0

konga 0.14.9

pgsql 9.6

linux centos 7

简述

对于kong的搭建,官网提供的方式有很多,感兴趣的自己可以看看:
kong官方文档

唠叨几句哈:

  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 versionsKong versionsNode versions
    1.x.x>= 0.6, < 0.10
    2.x.x0.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博客)

当然,如果想用linux原装kong,可以参考一下链接,相对来说还是比较全面的:
linux安装和部署kong网关教程和遇到的所有问题的解决帖

本篇采用的是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 '111111';
      
      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=111111" -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 配置未生效!!!

      打开kong.conf,找到admin_listen,配置为:
      admin_listen = 0.0.0.0:8001, 0.0.0.0:80,0.0.0.0:8444 ssl

      注意是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=120000" --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了。

附:成功之后的页面:
image-20210919171744259.png

另外,也顺便提一下把,采用上述的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@xxxxx:5432/konga

postgresql://konga:konga@xxxxx:5432/konga
其中,konga:konga代表的是用户名,密码
xxxx:5432代表你的数据库地址
/konga代表的是你自己创建的数据库

上述操作完成之后,执行命令:

docker run -d -p 1337:1337 --network=kong-net -e "DB_ADAPTER=postgres" -e "DB_HOST=ip地址" -e "DB_PORT=5432" -e "DB_USER=konga" -e "DB_PASSWORD=konga" -e "DB_DATABASE=konga" -e "KONGA_HOOK_TIMEOUT=120000" -e "NODE_ENV=production" --name konga pantsel/konga:0.14.9

这样的话,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 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (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的理解,如有不对的地方或者遇到什么问题,评论区讨论呀~~~~,哈哈哈

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在arm64架构上安装Kong,你需要自己编译Kong软件,因为yum安装Kong只适用于基本的x86_64架构。首先,你可以使用以下命令克隆Konga的GitHub仓库: ``` git clone https://github.com/pantsel/konga.git ``` 然后,你可以使用以下Docker命令在arm64上运行Konga: ``` docker run -d -p 1338:1337 --network=kong-net --name konga -e "DB_ADAPTER=postgres" -e "DB_HOST=172.18.0.2" -e "DB_USER=kong" -e "DB_PASSWORD=kong" -e "DB_DATABASE=konga" -e "NODE_ENV=production" albertwzp/konga-arm64:next ``` 这将在arm64架构上启动Konga,并将其连接到名为"kong-net"的网络。你还需要提供与PostgreSQL数据库的连接信息,以便Konga可以与数据库进行交互。确保替换上述命令中的数据库相关环境变量参数为你自己的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mac系统/aarch架构源码编译安装kong文档](https://blog.csdn.net/fnozoszzt/article/details/104498845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Konga arm64 安装](https://blog.csdn.net/trustnature/article/details/116690915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值