开源API网关Kong

Kong 是一个在 Nginx 运行的 Lua 应用程序,由 lua-nginx-module 实现。Kong 和 OpenResty 一起打包发行,其中已经包含了 lua-nginx-module。OpenResty 不是 Nginx 的分支,而是一组扩展其功能的模块。

1. 两个主要组件

  • Kong Server,基于 nginx 的服务器,用来接收 API 请求。
  • Apache Cassandra,用来存储操作数据。

2. 安装部署 (测试环境:konga.local/#!/dashboar…, host : 192.168.0.231 konga.local),当前版本:v1.3.0

a. 基础安装 (Docker为例)

Kong 支持多种常见的操作环境下安装部署, 如: CentOS,Debian,Ubuntu,Docker,K8S 等,安装详情参见官方文档 Kong 各环境安装部署,支持数据库模式和非数据库模式部署。

以 Docker 为例部署脚本

  • 数据库模式

# 创建kong专属网络

> docker network create kong-net

# 创建数据库

>docker run -d --name kong-database

--network=kong-net

-p 5432:5432

-e "POSTGRES_USER=kong"

-e "POSTGRES_DB=kong"

postgres:9.6

# 初始化数据

> 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

# 端口:8000 Http,8443 Https,8001 Admin API Http,8444 Admin API https

> 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

  • 文件存储模式

# 创建专属网络

> docker network create kong-net

# 创建Docker卷

> docker volume create kong-vol

# 查看卷

> docker volume inspect kong-vol

# 运行Kong,kong.yml为配置文件

# 端口:8000 Http,8443 Https,8001 Admin API Http,8444 Admin API https

> docker run -d --name kong

--network=kong-net

-v "kong-vol:/usr/local/kong/declarative"

-e "KONG_DATABASE=off"

-e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml"

-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

b. kong 仪表板

# konga (推荐)

> docker run -p 1337:1337

--network {{kong-network}} // optional

-e "TOKEN_SECRET={{somerandomstring}}"

-e "DB_ADAPTER=the-name-of-the-adapter" // 'mongo','postgres','sqlserver' or 'mysql'

-e "DB_HOST=your-db-hostname"

-e "DB_PORT=your-db-port" // Defaults to the default db port

-e "DB_USER=your-db-user" // Omit if not relevant

-e "DB_PASSWORD=your-db-password" // Omit if not relevant

-e "DB_DATABASE=your-db-name" // Defaults to 'konga_database'

-e "DB_PG_SCHEMA=my-schema" // Optionally define a schema when integrating with prostgres

-e "NODE_ENV=production" // or 'development' | defaults to 'development'

--name konga

pantsel/konga

# kong-dashboard

> docker run --name=kong-dashboard -p 8080:8080 pgbi/kong-dashboard start

--kong-url http://kong:8001

--basic-auth user1=password1 user2=password2

3. 基础功能(konga为例)

在这里插入图片描述

应用级菜单

  1. Connections Kong连接,用于配置Kong的AdminAPI地址,配置成功之后,将会开启Kong级菜单。
  2. Snapshots 快照,用于存储Kong节点快照,可快速恢复节点配置。

API网关菜单

  1. Consumers API网关消费者,用于各类认证以及限流控制等;
  2. Services 服务,用于配置上游服务的信息,主要包括服务名称、上游的Host以及Port等;
  3. Routes 路由,用于配置下游的路由信息,定义服务的出口路径,主要包括路由名称、Host、Path、Methods以及Http/Https等;
  4. Plugins 插件,可配置于Service或Route,主要包括认证、安全、限流、监控、日志以及自定义几大模块,官方提供了较为全面的基础插件功能;
  5. Upstreams 类nginx中的Upstream,用于配置上游的服务信息;
  6. Certificates 证书管理。

服务配置

1.添加服务: Services -> Create Services

实例:

在这里插入图片描述

说明:由于这里的Kong部署在K8S环境中,所以可以直接使用K8S中的服务名+端口号来定义服务的Host和Port。

2.添加路由: Services -> Service Detail -> Routes -> Add Route

实例:

在这里插入图片描述

配置完成之后,我们就可以访问我们的服务了。

# https://192.168.0.231:31617/config 或 http://192.168.0.231:32740/config Host: config.kong

> curl -ik -H "Host":"config.kong" https://192.168.0.231:31617/config/basic/dev

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8

Transfer-Encoding: chunked

Connection: keep-alive

Date: Thu, 17 Oct 2019 02:05:16 GMT

Server: Kestrel

X-Kong-Upstream-Latency: 3

X-Kong-Proxy-Latency: 10007

Via: kong/1.3.0

{"logLevel":"Debug",...}

插件配置

插件添加有两个入口:

1.服务插件 Servcies -> Service Detail -> Plugins -> Add Plugin

2.路由插件 Routes -> Route Detail -> Plugins -> Add Plugin

认证

# 1.Basic 认证

# Header: Authorization Basic base64(username:password)

# 2.Jwt认证

# 支持三种认证参数传递:uri param,cookie and header,可自定义键名

# key claim一般为iss

# jwt生成 & 校验:https://jwt.io/

# 3.OAuth2认证

# 认证地址:oauth2/authorize

# 获取token地址: oauth2/token

# 刷新token地址: oauth2/token

安全

# 1. Acl 访问控制列表

# 2. Cors 跨域资源共享

# 3. Ip Restriction IP限制

# 4. Bot Detection 机器人检测

限流

# 1. Rate Limiting 速率限制

# 2. Response Ratelimiting 响应速率限制

# 3. Request Size Limiting 请求大小限制

# 4. Request Termination 请求阻断/终止

日志

监控

请求转发

自定义

4. Admin API

AdminAPI

以上是 开源API网关Kong 的全部内容, 来源链接: utcz.com/a/21198.html

回到顶部