1 Kong网关介绍
Kong是在Nginx的基础上构建的,更确切的说Kong是在Nginx中运行的Lua应用程序,Kong包含了OpenResty。Kong 提供了大量的插件和动态管理API功能。
Kong 大致功能特性
- 动态路由: Kong 的背后是 OpenResty+Lua,所以从 OpenResty 继承了动态路由的特性
- 熔断
- 健康检查
- 日志: 可以记录通过 Kong 的 HTTP,TCP,UDP 请求和响应。
- 鉴权: 权限控制,IP 黑白名单,同样是 OpenResty 的特性
- 监控: Kong 提供了实时监控插件
- 认证: 如数支持 HMAC, JWT, Basic, OAuth2.0 等常用协议
- 限流
- REST API: 通过 Rest API 进行配置管理,从繁琐的配置文件中解放
- 可用性: 天然支持分布式
- 高性能: 背靠非阻塞通信的 nginx,性能自不用说
- 插件机制: 提供众多开箱即用的插件,且有易于扩展的自定义插件接口,用户可以使用 Lua 自行开发插件
2 安装包准备
Kong的一些配置存储可以是单机文件,也可以是postgre,cassandra。本文使用cassandra做Kong的数据库。
3 安装单机版
3.1 安装Cassandra
Cassandra cqlsh 依赖了python2.7 我使用的Centos7自带。假设已经安装了JDK1.8.
Cassandra目前也是单机部署。
tar -xvf apache-cassandra-3.11.6-bin.tar.gz
cd apache-cassandra-3.11.6
Cassandra 不推荐使用root用户启动服务,我们创建一个cassandra组和用户
groupadd cassandra
useradd cassandra -g cassandra
su - cassandra
chown -R cassandra:cassandra apache-cassandra-3.11.6
需要修改Cassandra配置文件,找到以下属性进行修改
[root@sybj-int-26 apache-cassandra-3.11.6]# cd conf/
[root@sybj-int-26 conf]# vim cassandra.yaml
# cassandra 节点之间的监听地址
listen_address: 10.0.3.26
# rpc 监听地址
rpc_address: 10.0.3.26
seed_provider:
# Addresses of hosts that are deemed contact points.
# Cassandra nodes use this list of hosts to find each other and learn
# the topology of the ring. You must change this if you are running
# multiple nodes!
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
# seeds is actually a comma-delimited list of addresses.
# Ex: "<ip1>,<ip2>,<ip3>"
- seeds: "10.0.3.26"
修改conf/jvm.options配置文件,设置一下内存
-Xms6G
-Xmx6G
启动Cassandra
[cassandra@sybj-int-26 apache-cassandra-3.11.6]$ cd bin
[cassandra@sybj-int-26 bin]$ ./cassandra
添加到开机启动
[Unit]
Description=Cassandra Server Service
After=network.service
[Service]
Type=simple
Environment=JAVA_HOME=/usr/local/jdk1.8.0_231
PIDFile=/opt/ylbzj/apache-cassandra-3.11.6/bin/cassandra.pid
User=cassandra
Group=cassandra
ExecStart=/opt/ylbzj/apache-cassandra-3.11.6/bin/cassandra -p /opt/ylbzj/apache-cassandra-3.11.6/bin/cassandra.pid
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
3.1 安装Kong
Cassandra单机版安装到了10.0.3.26,另找一台机器10.0.3.25安装Kong Gateway
yum install kong-2.0.2.*.noarch.rpm --nogpgcheck
执行安装命令后,安装成功,但是会报一个脚本错误,暂时不处理。
kong安装成功后配置文件在/etc/kong/目录
修改Kong配置文件
cd /etc/hong
cp kong.conf.default kong.conf
vim kong.conf
数据库使用cassandra
database = cassandra
# cassandra 服务地址
cassandra_contact_points = 10.0.3.26
cassandra_port = 9042
# Kong poll 数据库的周期配置。
db_update_frequency = 5
# 使用Cassandra数据库需要指定此配置,数据变更传播到 kong 集群的最大时间是 db_update_frequency + db_update_propagation 秒。(cassandra的数据一致性延迟)。
db_update_propagation = 5
# 该配置项的时间(单位秒)是 kong 缓存数据库实体的时间(包括缓存命中或者穿透),该存活时间是一种保护措施,以防 kong 节点漏掉处理缓存无效事件,避免旧数据长时间没有被清理。当缓存生存时间到了,缓存值将会被清理掉,下一次将会从数据库读取数据并再次缓存起来
db_cache_ttl = 3600
启动
# 初始化数据库
kong migrations bootstrap
# 启动
kong start
测试Admin 服务,能否访问
[root@sybj-int-25 kong]# curl -i http://localhost:8001
HTTP/1.1 200 OK
Date: Thu, 26 Mar 2020 09:14:00 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/2.0.2
Content-Length: 8959
X-Kong-Admin-Latency: 160
- 添加服务
[root@sybj-int-25 ~]# curl -i -X POST --url http://localhost:8001/services/ --data 'name=test_baidu' --data 'url=http://baidu.com'
HTTP/1.1 201 Created
Date: Thu, 26 Mar 2020 10:08:55 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/2.0.2
Content-Length: 289
X-Kong-Admin-Latency: 11
{"host":"baidu.com","created_at":1585217335,"connect_timeout":60000,"id":"49f4423b-87b9-45f1-a57b-c7f6f3fd4b40","protocol":"http","name":"test_baidu","read_timeout":60000,"port":80,"path":null,"updated_at":1585217335,"retries":5,"write_timeout":60000,"tags":null,"client_certificate":null}
- 添加服务路由
[root@sybj-int-25 ~]# curl -i -X POST --url http://localhost:8001/services/test_baidu/routes --data 'hosts[]=baidu.com'
HTTP/1.1 201 Created
Date: Thu, 26 Mar 2020 10:13:09 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/2.0.2
Content-Length: 427
X-Kong-Admin-Latency: 24
网友评论