API网关--Kong的实践
目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请求通常需要访问多个后台系统。如果让每一个后台系统都实现鉴权、限流、负载均衡、审计等基础功能是不合适的,通用的做法是把这些功能抽离出来放到网关层。Kong是目前最流行的网关平台,其插件机制使其具有高可扩展性,可以很方便的为路由和服务提供各种插件,并且网关需要的特性包括:动态路由,熔断,健康检查,鉴权,监控,认证等等
-
Nginx = Http Server + Reversed Proxy + Load Balancer
-
Openresty = Nginx + Lua-nginx-module,openresty是寄生在nginx上,暴露nginx处理的各个阶段的钩子, 使用lua扩展nginx。
-
Kong = Openresty + Customized Framework,kong作为OpenResty的一个应用程序
2. 概念
kong的三个组件:
-
kong Server:基于nginx的服务器,接受API
-
Apache Cassandra/PostgreSQL: 存储操作数据
-
Kong dashboard: 官方UI
kong的API使用Restful风格,每个对象都是一个Object,其中最重要的两个对象是:
-
Service 代表一个后台服务
配置 需要转发到的上游服务器(upstream server),端口,请求该服务器的路由可以是 “/”
-
Route 是一条规则,告诉kong怎么把网关收到的请求发送到某个特定的后台服务,一个Service可以有多个Routes
配置
Kong默认绑定4个端口
-
:8000 用来接受用户的HTTP请求,并转发到后台系统
-
:8443 用来接受用户的HTTPS请求,并转发到后台系统
-
:8001 通过HTTP协议提供管理功能的API (Admin API)
-
:8444 通过HTTPS协议提供管理功能的API
-
这些端口可以在/etc/kong/kong.conf中修改,:8000 和 :8443 默认绑定0.0.0.0;:8001 和 :8444 默认绑定 127.0.0.1
当然我们可以把Admin API作为一个服务通过kong的网关暴露出去,请参考Kong API Loopback不过要注意安全。
3. 安装kong
-
下载安装包,yum安装
下载kong的rpm包到本地 https://kong.bintray.com/kong-community-edition-rpm/centos/7/kong-community-edition-0.13.1.el7.noarch.rpm。 然后yum install -y x x x.rpm
下载pgsql的rpm包 https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm.
yum install postgresql95 postgresql95-server
-
安装pgsql
usr/pgsql-9.5/bin/postgresql95-setup initdb
修改 vi /var/lib/pgsql/9.5/data/pg_hba.conf 里的 ident 为 trust (否则kong迁移数据库报Ident authentication)
修改 var/lib/pgsql/9.5/data/postgresql.conf listen_addresses 为‘*’
设置系统调用 systemctl enable postgresql-9.5 ; systemctl start postgresql-9.5
-
授权kong数据库
登录postgresql :sudo -u postgres psql ; create user kong with password 'kong';CREATE DATABASE kong OWNER kong;
-
迁移kong数据库
0.15以后 kong migrations bootstrap 以前 kong migrations up
-
启动kong 默认配置文件 /etc/kong/kong.conf
有一些配置文件的参数需要改动
proxy_listen = 0.0.0.0:80, 0.0.0.0:443 ssl
kong实际监听的地址admin_listen = 0.0.0.0:8001, 127.0.0.1:8444 ssl
kong的控制台服务client_body_buffer_size = 10240k
这个参数代表请求的body内容的缓冲大小kong start;
4. 安装kong-dashboard
使用docker安装是最方便的,否则你需要装一大堆软件
-
安装文档 https://github.com/PGBI/kong-dashboard
docker run --rm -p 8080:8080 pgbi/kong-dashboard start --kong-url http://172.17.0.9:8001 --basic-auth user=passwd
--rm 当容器exits时自动移除
--basic-auth user=passwd 设置控制台登录账号密码
--kong-url kong的控制台服务
5. 操作kong-dashboard