Kong 网关简介及简单使用
1、kong 网关简介
Kong是在客户端和微服务端转发 API 通信的 API 网关,可以通过插件扩展功能。Kong 主要有两个重要的的组件:
-
Kong Server:基于 nginx 的服务器,用来接收 API 请求
-
Apache Cassandra:用于存储操作数据
我们可以通过增加更多的 Kong Server服务器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器发送分发请求。根据文档描述,两个 Cassandra 节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以适当考虑增加更多的节点。
对于我们来说,Kong 中最为重要的一个特性就是可以通过插件扩展已有功能,这些插件在 API 请求响应循环的生命周期内被执行。插件使用 Lua 编写,而且 Kong 还有如下几个基础功能:
HTTP 基本认证,密匙认证,CORS(Cross-origin Resource Sharing,跨域资源共享),TCP,UDP,文件日志,API请求限流,请求转发及 Nginx 监控等等
2、docker 部署 kong
官方文档:Docker
设置网络
docker network create kong-net
安装数据库, PostgreSQL and Cassandra,推荐使用 postgres(版本号可自由选择)
docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:11.1-alpine
准备 kong 数据
docker run --rm \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ kong:latest kong migrations bootstrap
启动kong,设置postgres 数据库
docker run -d --name kong \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -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 \ kong:latest
:8000 Kong 在该端口上侦听来自客户端的传入 HTTP 流量,并将其转发到上游服务
:8443 Kong 在其上侦听传入的 HTTPS 流量。此端口具有与端口 8000 类似的行为,不过他仅支持 HTTPS通信,可以通过配置文件禁用此端口
:8001 用于配置 Kong 侦听的 admin api
:8444 admin api 在其上侦听 HTTPS 流量
检查 kong 是否正常运行
curl -i http://localhost:8001/
安装图形化界面
docker run -d --name kong-dashboard \ --network=kong-net \ --link kong:kong \ -p 8081:8080 \ pgbi/kong-dashboard:v2 migrations up
3、配置服务
向 kong添加 API,我们需要先添加一个 service,即使用 kong 用来指代其管理的上游 API 和微服务的名称
我们将创建一个指向Mockbin API的服务。Mockbin是一个“回声”类型的公共网站,它将返回的请求返回给请求者,作为响应。这有助于了解Kong如何代理您的API请求。
在开始对服务提出请求之前,需要为其添加一条路由。路线指定到达香港后如何(以及是否)将请求发送到其服务。单个服务可以具有多个路由。
配置服务和路线后,您将可以使用它们通过Kong发出请求。
Kong 在port上公开了RESTful Admin