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 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博客)

当然,如果想用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 postgrespsqlcreate 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即为成功!

    • 或者在浏览器输入: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)

    此时,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,即可进入以下页面:

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

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

比如 Name:kong

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

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

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

附:成功之后的页面:

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

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

su postgrespsqlcreate 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/kongapostgresql://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/plugins kong默认的插件所在位置,根据业务需求可自定义插件
    nginx.lua/nginx_kong.lua /usr/local/share/lua/5.1/kong/templates kong自动生成的nginx.conf,nginx-kong.conf的配置模板,
    /usr/local/kong/nginx.conf就是通过此lua文件自动生成的,如果你要自定义nginx,在此修改,切勿修改nginx.conf文件
    constants.lua /usr/local/share/lua/5.1/kong kong携带的插件列表,偷懒的时候用的,在这里添加你的自定义插件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:8001at 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的理解,如有不对的地方或者遇到什么问题,评论区讨论呀~~~~,哈哈哈

kong笔记——kong/konga的搭建相关推荐

  1. kong笔记——kong、nginx性能压测对比

    简述 kong笔记 目录导航 前面介绍了kong的基本使用以及相关原理,那么接下来,我们需要对kong的性能做一个简单的了解. 性能压测 测试环境 机器类别及IP地址 硬件配置 操作系统 软件配置 网 ...

  2. kong笔记——kong的权限认证插件选择参考

    kong笔记--目录导航 kong自身共提供了这么几个权限认证插件: basic auth; key auth; hmac auth; jwt auth; oauth2 auth 接下来来逐个介绍其特 ...

  3. kong笔记 目录导航

    官方文档 官方网站:https://konghq.com 官方文档:https://docs.konghq.com 项目地址:https://github.com/Kong/kong 中文文档:htt ...

  4. k8s集群中部署kong网关与konga

    kong官方文档中的部署方案因为某种奇葩的原因,不能对helm文件中的镜像拉取,所以我这里对kong的docker镜像部署. 首先要搭建postgresql 可以选择集群外搭建,也可以集群内搭建. 参 ...

  5. kong笔记——认识kong

    kong笔记 目录导航 背景 最近公司打算重构API网关,给定的硬性条件是支持lua脚本,kubernetes可部署,可解析lua,另外需要支持身份认证,IP黑白名单,限流,负载均衡等一些功能,为此, ...

  6. kong笔记——自定义插件开发

    kong笔记 目录导航 本文通过一个自定义插件的编写,来了解Kong的插件机制 插件功能: 原本返回百度首页,在添加插件之后,返回插件自定义的内容: 前提 使用kong代理百度的接口,配置route路 ...

  7. 云原生微服务网关 Kong 和Kong 管理UI Konga快速安装攻略

    前言 在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务.甚至有时候需要对请求进行一些安全.负载均衡.限流.熔断.灰度等中间操 ...

  8. kong笔记——Service、Route路由功能

    kong笔记 目录导航 在上两篇文章,我们主要介绍了kong的概念以及kong的部署,相信大家对kong已经有了基本认识,那么我们该如何使用它呢? kong的功能有许多,我们一个一个来,先从kong的 ...

  9. 以Docker方式安装和配置Kong网关和Konga控制台

    文章目录 以Docker方式安装和配置Kong网关和Konga控制台 前言 安装Kong 创建容器网络 启动PostgreSQL数据库 初始化数据 对Kong Admin API作安全防护 启动Kon ...

最新文章

  1. Eclipse中CVS版本管理
  2. js中双感叹号_JavaScript中双叹号(!!)作用
  3. 4.RabbitMQ Linux安装
  4. python知识点1
  5. Python核心团队计划2020年停止支持Python2,NumPy宣布停止支持计划表
  6. Windows XP下Service的编程入门[1]
  7. Python机器学习:逻辑回归005决策边界
  8. TwentyEleven暗色系主题实现透明
  9. nodejs爬虫基础(二)
  10. 基于springboot的失物招领系统
  11. python学习手册四版中文_Python学习手册(第4版) 中文版.pdf 全文免费
  12. 你以为服务器关了这事就结束了? - XcodeGhost截胡攻击和服务端的复现,以及UnityGhost预警...
  13. matlab fx函数图像,matlab 画两个自变量的函数图像
  14. 牛人十数年CAD经验分享
  15. java计算机毕业设计计算机专业招聘网站MyBatis+系统+LW文档+源码+调试部署
  16. Appium 常用初始化启动参数 Capability详解
  17. CultureInfo 类中需要的【区域性名称】查询
  18. Mysql创建多表视图view
  19. 求两个整数的商和余数(不用乘,除,取余)计算
  20. 不合格高校教师的自我总结(机器人教学和工作小结)

热门文章

  1. 如何选择合适的CDN加速合作?关键在于这三个方面!
  2. CloseableHttpClient设置Timeout 设置超时时间
  3. 滴滴柳青:一个比你有才,又比你努力的富二代!
  4. 数据库安全-分布式数据库-数据仓库技术-反规范化技术-大数据
  5. AHB2APB桥接器设计(1)——基本原理
  6. fetch和XHR的区别
  7. 绩效管理对 HR 的重要性
  8. mysql悲观锁for update
  9. 打印机问题:虚拟机连接打印机、物理机连接打印机
  10. 层次分析法之matlab代码实现