背景介绍

之前项目上api的接口用的是自己nginx搭建的反向代理接口,觉得功能性比较查差,故而另辟蹊径找到了kong作为接口网关服务。

工作原理


kong会把所有的后端接口对应的数据放到cassandra数据库中,对外只暴漏自己的接口,这样对于前端的开发人员来说就透明了许多,也方便了许多,后端的运维人员管理起来也方便了许多。

系统环境介绍

系统版本:CentOS release 6.7 (Final)
kong版本:0.9.9
gcc版本:4.8.2 (GCC)
npm版本:3.8.6
node版本:5.11.1
python版本:Python 2.7.8
cassandra版本:dsc22.noarch
jdk版本:>1.7.25

Kong部署

安装

$ wget https://bintray.com/mashape/kong-rpm-el6-0.9.x/rpm -O bintray-mashape-kong-rpm-el6-0.9.x.repo
$ mv bintray-mashape-kong-rpm-el6-0.9.x.repo /etc/yum.repos.d/
$ yum install kong

启动kong

$ kong start  -c <path_to_config>

检查kong是不是正常启动了,默认不修改配置文件的情况下会报连接不上PostgreSQL,这里先忽略,继续装cassandra

正常启动的话会输出:[OK] Started
kong的监听端口:

8000: API请求的代理层。
8001: restful的配置管理API。
8443: 代理HTTPS
7946: 用于和其他Kong节点通讯,支持TCP/UDP流量
7373: 用于本地集群代理通讯

停止kong

$ kong stop

重新加载kong

$ kong reload

重启kong

$ kong restart

cassandra部署

这里就不演示安装了,yum也行,绿色版解压也行。java1.7 或者1.8都可以,注意cassandra3.0必须要jdk1.8版本才行。这里我们由于kong的支持版本是2.x,这里介绍2.x的安装。

yum源添加

 vim /etc/yum.repos.d/datastax.repo
[datastax]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0

yum查找软件包

 yum search dsc
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
========================================================= N/S Matched: dsc ==========================================================
dsc1.1.noarch : Meta RPM for installation of the DataStax DSC platform
dsc12.noarch : Meta RPM for installation of the DataStax DSC platform
dsc20.noarch : Meta RPM for installation of the DataStax DSC platform
dsc21.noarch : Meta RPM for installation of the DataStax DSC platform
dsc22.noarch : Meta RPM for installation of the DataStax DSC platform
dsc30.noarch : Meta RPM for installation of the DataStax DSC platform
虽然有3.0,但是目前kong只支持2.2.x ,这里我就安装2.2版本

安装

yum install dsc22

验证cassadnra

估计会报这个错误

 cqlsh
Traceback (most recent call last):File "/usr/bin/cqlsh.py", line 160, in <module>from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling
ImportError: No module named cqlshlib

python2.7部署

cqlsh是cassandra的客户端查询工具
cqlsh客户的工具需要python2.7支持,centos6.x默认是python2.6版本,这里我新安装下python2.7

首先安装 python 工具需要的额外软件包 SSL, bz2, zlib

yum install -y zlib-devel bzip2-devel openssl-devel xz-libs wget

下载python2.7源码包并安装

$ wget http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz
$ xz -d Python-2.7.8.tar.xz
$ tar -xvf Python-2.7.8.tar
$ cd Python-2.7.8
$ ./configure --prefix=/usr/local
$ make
$ make altinstall

检查 Python 版本并修复yum

$ python2.7 -V
Python 2.7.8
$ mv /usr/bin/python /usr/bin/python2.6.6
$ ln -s /usr/local/bin/python2.7  /usr/bin/python

更改yum环境变量

因为yum使用python2.6 故而要改一下yum的环境,不然yum将没法使用

$ which yum
/usr/bin/yum
#修改 yum中的python
将第一行  #!/usr/bin/python  改为 #!/usr/bin/python2.6

安装pip

$ curl  https://bootstrap.pypa.io/get-pip.py | python2.7

解决cqlsh报错问题,下面的步骤可能要耗费很长的时间,建议大家耐心等等

$pip install cqlshlib
$pip install cql
$pip install cassandra-driver
$pip install cqlsh

再次测试数据库情况

 $cqlshConnected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh> create schema testschema... with replication = {'class':'SimpleStrategy', 'replication_factor':1};
cqlsh> describe keyspaces;
system  testschema  system_traces
cqlsh> use testschema;
cqlsh:testschema> create table user (... user_id varchar primary key,... first varchar,... last varchar,... age int... );... user_id varchar primary key,... first varchar,... last varchar,... age int... );
cqlsh:testschema>
cqlsh:testschema> insert into user (user_id, first, last, age) values ('rfroncois', 'ronn', 'francois', 20);
cqlsh:testschema> select * from user;user_id  | age | first | last
-----------+-----+-------+----------rfroncois |  20 |  ronn | francois

Kong 配置

小编发现kong的配置文件总计三处

/etc/kong/kong.conf.default
/usr/local/kong/kong.conf
/usr/local/share/lua/5.1/kong/templates/kong_defaults.lua

最开始的时候,小编装好数据库和kong,启动kong的时候,修改了/etc/kong/kong.conf.default的配置连接数据库的类型为cassandra,启动的时候死活就是连不上啊,报的还是连不上PostgreSQL数据库,而且每次重启kong服务后,修改后的配置文件被重置了。真实奇葩,猜想必然这个配置文件不是主配置文件啊。
/usr/local/share/lua/5.1/kong/templates/kong_defaults.lua----->主配置文件,那咱就来看看这个文件的具体内容吧。

return [[
--安装路径
prefix = /usr/local/kong/
--日志等级
log_level = notice
--默认插件
custom_plugins = NONE
--发送匿名使用数据,如错误堆栈跟踪,以帮助提高kong。Default: on
anonymous_reports = on
--监听地址,客户端访问地址。Default: 0.0.0.0:8000
proxy_listen = 0.0.0.0:8000
--如果启用ssl,kong将接受https请求的地址和端口。Default: 0.0.0.0:8443
proxy_listen_ssl = 0.0.0.0:8443
--管理接口地址,有必要保密。Default:0.0.0.0:8001
admin_listen = 0.0.0.0:8001
--nginx进程数,如果不会设置,设置成自动,会自动检测,默认auto等同于cpu核数.Default: auto
nginx_worker_processes = auto
nginx_optimizations = on
--确定nginx是作为守护进程还是作为前台进程运行。Default: on
nginx_daemon = on
--数据库实体的内存缓存大小。接受的单位是k和m,最小推荐值是几个mbs。Default: 128m
mem_cache_size = 128m
--确定nginx是否应该监听proxy_listen_ssl地址上的https流量。如果禁用,nginx将只在proxy_listen上绑定自己,所有ssl设置将被忽略.Default: on
ssl = off
如果启用了ssl,proxy_listen_ssl地址的绝对路径。如果没有指定,并且ssl被启用,kong将生成默认的证书和密钥。Default: none
ssl_cert = NONE
--如果启用了ssl,proxy_listen_ssl地址的ssl密钥的绝对路径。Default: none
ssl_cert_key = NONE
--确定该节点将使用哪个postgresql或cassandra作为其数据存储区。接受的数据库类型是postgres和cassandra。属于同一个集群的所有kong节点必须连接到同一个数据库。Default: postgres
database = cassandra
--postgres服务器的主机
pg_host = 127.0.0.1
--postgres服务器的端口
pg_port = 5432
--数据库连接。必须存在
pg_database = kong
--postgres用户
pg_user = kong
--postgres用户的密码
pg_password = NONE
--启用S​​SL连接到服务器
pg_ssl = off
--如果启用pg_ssl,则切换服务器证书验证
pg_ssl_verify = off
--用逗号分隔的联系人列表指向您的cassandra集群。
cassandra_contact_points = 127.0.0.1
--您的节点正在侦听的端口。
cassandra_port = 9042
--密钥空间在您的群集中使用。如果不存在,将被创建。
cassandra_keyspace = kong
--如果是第一次创建密钥空间,请指定一个复制策略。
cassandra_repl_strategy = SimpleStrategy
--指定简单策略的复制因子。
cassandra_repl_factor = 1
--为网络拓扑策略指定数据中心。
cassandra_data_centers = dc1:2,dc2:3
--读取/写入cassandra群集时使用的一致性设置。
cassandra_consistency = ONE
--读/写超时(以毫秒为单位)。
cassandra_timeout = 5000
--启用ssl连接到节点。
cassandra_ssl = off
--如果启用cassandra_ssl,则切换服务器证书验证
cassandra_ssl_verify = off
--用户名
cassandra_username = kong
--密码
cassandra_password = NONE
cluster_listen = 0.0.0.0:7946
cluster_listen_rpc = 127.0.0.1:7373
cluster_advertise = NONE
cluster_encrypt_key = NONE
cluster_profile = wan
cluster_ttl_on_failure = 3600
dnsmasq = on
dnsmasq_port = 8053
dns_resolver = NONE
--当禁用时,每个请求将在一个单独的lua虚拟机实例中运行:所有lua模块将从头开始加载。这对开发插件时采用编辑和刷新方法很有用。据官方说,关闭此指令对
--性能有严重影响,并且从0.11.0以后删除此配置
lua_code_cache = on
--pem格式的lua cosockets的证书颁发机构文件的绝对路径。当启用pg_ssl_verify或cassandra_ssl_verify时,此证书将用于验证kong的数据库连接。
lua_ssl_trusted_certificate = NONE
--在由lua_ssl_trusted_certificate设置的lua cosockets使用的服务器证书链中设置验证深度。
lua_ssl_verify_depth = 1
--设置lua模块搜索路径(lua_path)。在开发或使用未存储在默认搜索路径中的自定义插件时非常有用。
lua_package_path = ?/init.lua;./kong/?.lua
--设置lua c模块搜索路径(lua_cpath)。
lua_package_cpath = NONE
serf_path = serf
]]

再次启动kong看它还报不报错

[root@localhost templates]# kong start
Kong started

kong在命令行的操作演示

1).port:8000 客户端调用api端口,网关对外开放端口。例如:新建一个api,访问path= /test,则访问 http://10.110.2.3:8000/test
2).port:8001 kong admin api管理端口,可以通过该端口对api、consumer、plugin进行管理,例如:查看名字叫test 这个api配置信息,访问 http://10.110.2.3:8001/apis/test,查看所有api信息,访问 http://10.110.2.3:8001/apis
3).KONG管理平台,访问 http://10.110.2.3:8888/#/  此端口开通必须安装 kong dashboard。通过此端口,可使用图形界面化管理api、consumer、plugin等。

kong 增加api调用
原有接口调用访问路径:
http://192.168.1.100:5105/notice/getNotice
添加调用规则语句:
#--url 指定本地的kong访问连接
#--d name 指定添加的api的规则名称
#-d upstream_rul 指定访问原api的host以及端口
#-d request_path 指定请求路径
curl -i -X POST --url http://localhost:8001/apis/ -d 'name=getAannouncementList' -d 'upstream_url=http://192.168.1.100:5105/' -d 'request_path=/notice/getNotice'
curl -i -X POST --url http://localhost:8001/apis/ -d 'name=testapi' -d 'upstream_url=http://192.168.1.100:5105/' -d 'request_path=/notice/getNotice'

添加api规则后访问语句:
http://192.168.5.250:8000/notice/getNotice

对某个访问规则进行用户验证设置
设置语句语法:
#--url 要对那个访问规则进行设置,apis后面对应的是上面设置的api访问规则中设置的name关键字,其余为固定格式
#--data 设置权限访问关键字
curl -i -X POST --url http://192.168.5.250:8001/apis/getAannouncementList/plugins/ --data 'name=key-auth'
curl -i -X POST --url http://192.168.5.250:8001/apis/testapi/plugins/ --data 'name=key-auth'

增加一个用户:
设置语句语法:
#--url 规定格式
#--data username 设置增加的用户名称
curl -i -X POST --url http://192.168.5.250:8001/consumers/ --data "username=inhomeApp"
curl -i -X POST --url http://192.168.5.250:8001/consumers/ --data "username=test"

为消费者添加证书:
设置语句语法:
#--url 倒数第二个请求路径为要授予的用户名称
#--data key 设置的密码
curl -i -X POST --url http://192.168.5.250:8001/consumers/inhomeApp/key-auth/ --data 'key=inhomeApp_randomNum123456'
curl -i -X POST --url http://192.168.5.250:8001/consumers/test/key-auth/ --data 'key=test_randomNum123456'

通过key访问api请求--
curl -i -X GET --url http://192.168.5.250:8000/notice/getNotice --header "Host: 192.168.5.250:8000" --header "apikey: test_randomNum123456"
or
http://192.168.5.250:8000/notice/getNotice?apikey=test_randomNum123456

删除api规则
curl -i -X DELETE --url http://192.168.5.250:8001/apis/getAannouncementList
查看kong的所有api规则信息
http://192.168.5.250:8001/apis

搭建kong UI Admin

配置node

下载node绿色版,版本5.11.1
https://nodejs.org/en/blog/release/v5.11.1/
解压后,追加node中的bin目录到PATH环境变量中即可。

升级GCC版本到4.8

下载4.8源码包并解压

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2    tar -jxvf  gcc-4.8.2.tar.bz2

当然,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下载,最新版本已经有4.9.2啦.

下载供编译需求的依赖项

参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

cd gcc-4.8.0       ./contrib/download_prerequisites 

建立一个目录供编译出的文件存放

mkdir gcc-build-4.8.2        cd gcc-build-4.8.2

生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
编译(注意:此步骤非常耗时)

make -j4

-j4选项是make对多核处理器的优化,如果不成功请使用 make

报错

/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/32/libgcc’
make[4]: * [multi-do] 错误 1 make[4]: Leaving directory
/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc’
make[3]: * [all-multi] 错误 2 make[3]: * 正在等待未完成的任务….
make[3]: Leaving directory
/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc’
make[2]: * [all-stage1-target-libgcc] 错误 2 make[2]: Leaving
directory/home/imdb/gcc-4.8.2/gcc-build-4.8.2’ make[1]: *
[stage1-bubble] 错误 2 make[1]: Leaving directory
/home/imdb/gcc-4.8.2/gcc-build-4.8.2’ make: * [all] 错误 2

解决办法:sudo yum -y install glibc-devel.i686 glibc-devel

安装

sudo make install

安装Kong Dashboard

官方文档 https://github.com/PGBI/kong-dashboard
这里面有一个放长重要的东西,非常重要,小编这个坑足足迈了3次才迈过去。
Compatibility matrix

Kong-Dashboard versions Kong versions Node versions
1.x.x 0.6.x, 0.7.x, 0.8.x, 0.9.x
2.x.x 0.10.x
3.x.x 0.9.x, 0.10.x, 0.11.x >= 6.0.0

命令行安装

  • Install Kong Dashboard
    npm install -g kong-dashboard@v1
  • Start Kong Dashboard
    kong-dashboard start
  • To start Kong Dashboard on a custom port
    kong-dashboard start -p [port]
  • To start Kong Dashboard with basic auth
    kong-dashboard start -a user=password
    这样启动会在后台运行,断掉终端进程还在
    nohup kong-dashboard start -p 8080 -a xin=sir >kong-dashboard.log &

    源码安装

    下载代码
    git clone https://github.com/PGBI/kong-dashboard.git
    cd kong-dashboard
    git checkout 1.0
    构建
    npm install
    npm run build
    启动
    npm start
    启动在某个端口或设置权限
    npm start -- [-p port] [-a user=password]

    配置kong UI admin

    访UI Admin

    http://192.168.5.250:8080/#/

    配置UI Admin


    如果kong有用户名和密码那么选择Basic auth,配置注意地址(kong的管理地址,默认为http://kong server机器或绑定的域名:8001)后面不要多加"/"如下图 否则点击API会出现not found api之类的提示,当然也要确保kong server正常运行中

    创建API


    新增API与使用新增的API时,需要注意如果需要使用地址方式指向api即 需要勾选strip-request path 如果使用head中带请求地址的方式,需要在head中带 X-Host-Override post.demo (即request host)

    访问kong:8000/version/getVersion 就能看到你想看的画面啦。

    为某个api设置权限认证


    创建用户






    通过key访问url

    http://192.168.5.250:8000/notice/getNotice?testname=keyauth 不出意外能看到你想看到的画面

    黑白名单设置

    设置限流策略


    可配置项:
    year:年
    month: 月
    day: 天
    minute:分钟,这里我们配置3,表示每分钟不能超过3次调用。
    Second: 秒
    计算频率的维度:月/天/分钟/秒, 假如同时配置多个维度,会同时生效。
    验证:连续一分钟内请求,第四次,报错
    {
    "message": "API rate limit exceeded"
    }
    根据年、月、日、时、分、秒设置限流规则,多个限制同时生效。
    比如:每天不能超过10次调用,每分不能超过3次。
    当一分钟内,访问超过3次,第四次就会报错。
    当一天内,访问次数超过10次,第十一次就会报错。

为kong-dashboard设置访问权限

启动方式:

[root@Kong ~]# kong-dashboard start -a xinsir=521

故障申报

问题一:
可能会出现的问题,当使用源码安装的时候,启动后访问8080端口如果出现Not Found,这个多半是因为没有构建npm造成的。
问题二:
cassandra数据库启动后自动down掉,日志报错报错说jdk需要大于1.7_25这个升级jdk就可以了。

kong服务监控

/status
{"server":  有关nginx http/s服务器的度量。{"connections_handled":2588, 处理的连接总数。一般来说,除非达到一定的资源限制,否则参数值与接受的值相同。"connections_reading":0, kong读取请求头的当前连接数。"connections_active":4, 当前活动客户端连接的数量,包括等待连接。"total_requests":2585,  客户端请求的总数。"connections_accepted":2588, 接受的客户端连接总数。"connections_writing":1, nginx将响应写回客户端的当前连接数。"connections_waiting":3 当前正在等待请求的空闲客户端连接数。},"database": 有关数据库集合的度量。{"oauth2_credentials":0,"jwt_secrets":0,"response_ratelimiting_metrics":0,"keyauth_credentials":0,"oauth2_authorization_codes":0,"acls":0,"apis":1,"basicauth_credentials":0,"consumers":0,"ratelimiting_metrics":0,"oauth2_tokens":0,"nodes":1,"hmacauth_credentials":0,"plugins":0}
}
/cluster  检索群集状态,返回群集中每个节点的信息。
{"data":[{"address":"192.168.1.205:7946",  节点地址"name":"Kong_0.0.0.0:7946_a102f6e6cede4540b1cc6a7a46276986", 节点名称"status":"alive"    节点状态}],"total":1  节点数
}

使用zabbix获取参数 进行页面监控就可以了

本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/2058768,如需转载请自行联系原作者

Kong 网关API安装部署以及应用实例----------腾云驾雾相关推荐

  1. KONG网关 — 介绍安装

    网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证,但是除了JAVA的spring cloud之外,公共网关屈指可数,其中最受关注的就是KONG了,笔者半年前就已经在 ...

  2. Kong网关简介安装

    转载 李亚飞 大佬的文章:https://www.lyafei.com/ 背景 我们有批设备卖给了海外的服务商,老外请了第三方检测机构,检测设备与我们系统的安全性,结果找到了近 40+ 的安全漏洞,有 ...

  3. java通过jri 数据分析_SparkR安装部署及数据分析实例

    1. SparkR的安装配置 1.1.       R与Rstudio的安装 1.1.1.           R的安装 我们的工作环境都是在Ubuntu下操作的,所以只介绍Ubuntu下安装R的方法 ...

  4. supervisor安装部署和使用实例

    Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit,monit和supervisord的一个比较大的差异是supervisord管理的进程必须由superviso ...

  5. Kong Api 网关使用 docker 部署

    Kong 镜像: https://hub.docker.com/_/kong 官网给定的用户安装手册上并没有设置 PG 的密码,导致如下问题无法启动 nginx: [error] init_by_lu ...

  6. pg安装部署linux_简简单单基于docker部署微服务网关

    ❝ 本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴.摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习.参考! ❞ 基本概念 ...

  7. API网关之Kong网关简介

    1. Kong简介 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用.易扩展的,由Mashape公司开源的API Gateway项目.Kong是基于NGINX和Apach ...

  8. centos6.5 安装 kong 网关

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 最近要求了解下kong网关,然后在网上一顿找,说实话,度娘的力量还是不行啊,找出来的那些跟着配置,不 ...

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

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

最新文章

  1. 十张图解释机器学习的基本概念
  2. python hashlib模块
  3. 四、卫星定位《苹果iOS实例编程入门教程》
  4. x509代码实例java_Java X509AttributeCertificate.getIssuer方法代码示例
  5. linux中的memory management和page mapping
  6. 高低层特征融合【转载】
  7. c# —— 枚举和值的隐藏副作用
  8. python __getattribute__
  9. 用java实现动态排序_关于Java动态分组排序的问题(Android中需要将数据排序给RecyclerView使用)...
  10. LeetCode(557)——反转字符串中的单词 III(JavaScript)
  11. ios识别人脸自动拍照_iOS 相机流人脸识别(一)-人脸框检测(基于iOS原生)
  12. Python猴子补丁
  13. steam邮件认证出现Access Denied You don't have permission to....
  14. 澳大利亚计算机博士几年,澳洲墨尔本大学博士读几年
  15. mzy git学习,分支冲突,以及冲突解决(五)
  16. 黑马程序员Node.js全套入门教程的学习笔记
  17. 服务器oemSN查询系统,查看服务器sn码命令
  18. Ai作图工业化流程工具
  19. ACM-ICPC模板整理
  20. 微信微博让人焦虑烦躁,怎么办?

热门文章

  1. 【AIX】AIX 开机自动挂载NFS共享
  2. 不能从const char *转换为LPCWSTR --VS经常碰到
  3. css3在线快速制作工具
  4. SaltStack 修复 Stack minion中的提权漏洞 (CVE-2020-28243)
  5. javascript 中的location.pathname
  6. 用 ConfigMap 管理配置 - 每天5分钟玩转 Docker 容器技术(159)
  7. 技术人必读:如何让自己成长为IT项目管理者
  8. linux系统下文件查找
  9. 己椒苈黄汤治水肿案(联想的风)
  10. AMD推土机性能逼近六核心Core i7