Kong 是一个云原生的、快速的、可伸缩的分布式微服务抽象层(也称为 API 网关、API 中间件或某些情况下的服务网格)。作为一个自2015年开始开源的项目,它的核心价值是高性能和可扩展性。
由于积极维护,Kong 被广泛用于从初创公司到全球5000强以及政府机构的生产中。
安装 | 文档 | 论坛 | 博客 | IRC(freenode): #kong
为什么选择 Kong?
如果您正在为 web、移动或物联网(Internet of Things)构建应用程序,那么您很可能最终需要公共功能来运行实际的软件。Kong 可以通过充当微服务请求的网关(或sidecar)来提供帮助,同时通过插件提供负载平衡、日志记录、身份验证、速率限制、转换等功能。
特性
- 云原生:与平台无关,Kong 可以在裸机或 Kubernetes 运行。
- 动态负载平衡:跨多个上游服务的负载平衡流量。
- 基于散列的负载平衡:具有一致的散列粘性会话的负载平衡。
- 断路器:智能跟踪不健康的上游业务。
- 健康检查:对上游服务的主动和被动监控。
- 服务发现:在第三方DNS解析器(如 Consul)中解析SRV记录。
- 无服务器:直接从 Kong 调用和保护 AWS Lambda 或 OpenWhisk 函数。
- WebSockets :通过 WebSockets 与您的上游服务通信。
- OAuth2.0 :轻松将 OAuth2.0 认证添加到您的 API 中。
- 日志记录:通过 HTTP、TCP、UDP 或磁盘记录系统的请求和响应。
- 安全性:ACL,Bot 检测,白名单/黑名单 IP 等。
- Syslog :将日志记录到系统日志。
- SSL :为底层服务或 API 设置特定的 SSL 证书。
- 监控:实时监视提供关键的负载和性能服务器指标。
- 身份验证:HMAC,JWT,Basic 等。
- 限速:基于多个变量阻塞和节流请求。
- 转换:添加、删除或操作 HTTP 请求和响应。
- 缓存:在代理层缓存和服务响应。
- CLI :从命令行控制 Kong 集群。
- REST API :Kong 可以使用它的 RESTful API 来操作,以获得最大的灵活性。
- 地理复制:配置总是跨不同区域的最新配置。
- 故障检测与恢复:如果您的 Cassandra 节点之一发生故障,Kong 不受影响。
- 集群:所有的 Kong 节点自动加入集群,保持它们的配置跨节点更新。
- 可伸缩性:按性质分布,Kong 通过简单地添加节点进行水平扩展。
- 性能:Kong 通过扩展和在核心使用 NGINX 轻松处理负载。
- 插件:用于向 Kong 和 api 添加功能的可扩展体系结构。
有关插件的更多信息,您可以查看Kong Hub。
基准
我们已经在 AWS 上测试了 Kong 和 Cassandra:您可以查看我们的基准报告 。
发布
Kong 有多种形式。虽然这个存储库包含其核心源代码,但其他repos也在积极开发中:
- Kong Docker :用于在 Docker 中运行 Kong 的 Dockerfile。
- Kong Packages :Debian、Red Hat 和 OS X 发行版的预构建软件包(每个版本附带)。
- Kong Vagrant :为 Kong 提供开发就绪环境的 Vagrant 文件。
- Kong Homebrew :Kong 的 Homebrew Formula。
- Kong CloudFormation : 用于 AWS EC2 的一键式部署 Kong。
- Kong AWS AMI :AWS Marketplace 上的 Kong AMI。
- Kong on Microsoft Azure :使用 Azure Resource Manager 运行 Kong。
- Kong on Heroku :只需点击一下,即可在 Heroku上 部署 Kong。
- Kong and Instaclustr :让 Instaclustr 管理你的 Cassandra 集群。
- 每夜构建:每天早上太平洋标准时间上午9点左右可以建立主分支。
开发
如果您计划在 Kong 上进行开发,则需要进行开发安装。next 分支包含最新未发布的源代码。
(First edition: vz revised at 2019.08.11)
您可以在插件开发指南中阅读有关编写自己的插件的更多信息,或者在插件开发工具包(PDK)参考中浏览Kong的源代码文档的在线版本。
Docker
您可以使用 Docker/Docker-compose 和一个挂载卷,按照关于 Kong/kong-build-tools 的说明来开发 Kong。
Vagrant
你可以使用运行 Kong 和 Postgres 的 Vagrant box,你可以在这里找到它 Mashape/kong-vagrant 。
源代码安装
Kong 主要是由 Lua 源文件构成的 OpenResty 应用程序,但也需要一些额外的第三方依赖项。 我们建议按照 https://docs.konghq.com/install/source/ 上的源安装说明安装它们。
而不是遵循第二步(安装 Kong),克隆此存储库并安装最新的 Lua 源代替当前发布的源代码:
$ git clone https://github.com/Kong/kong $ cd kong/ #你可能想切换到开发分支。请参阅 CONTRIBUTING.md $ git checkout next #安装 Lua 资源 $ luarocks make
运行开发
查看默认配置文件的开发部分,了解要调整的属性,以便简化 Kong 的开发过程。
修改 lua_package_path 和 lua_package_cpath 指令将允许Kong在系统中找到定制插件的源代码。
测试
$ make dev
Kong 依赖于使用busted 测试库的三个测试套件:
- 单元测试
- 集成测试需要 Postgres 和 Cassandra 启动并运行
- 需要 Postgres 运行的插件测试
第一个可以简单地运行后安装 busted 并运行:
$ make test
但是,集成和插件测试将生成一个 Kong 实例并对其执行测试。因此,根据您的需要,可以参考 spec/kong_tests.conf 配置文件,使您的测试实例指向 Postgres/Cassandra 服务器。
您可以使用以下工具运行集成测试(假设 Postgres 和 Cassandra 都在运行并根据 spec/kong_tests.conf 配置):
$ make test-integration
插件测试:
$ make test-plugins
最后,只需使用以下命令即可立即运行所有套件:
$ make test-all
请参阅 run_tests.sh 脚本以获取测试套件和 Makefile 的更高级示例用法。
最后,Lua 开发中的一个非常有用的工具(与许多其他动态语言一样)是执行代码的静态 linting。 您可以使用 luacheck (与 make dev 一起安装):
$ make lint
Makefile
开发时,可以使用 Makefile 来完成以下操作:
名字 | 描述 |
---|---|
install
|
全局安装 Kong luarock |
dev
|
安装开发依赖项 |
lint
|
Lint Lua files in kong/ and spec/
|
test
|
运行单元测试套件 |
test-integration
|
运行集成测试套件 |
test-plugins
|
运行插件测试套件 |
test-all
|
立即运行所有单元+集成+插件测试 |
企业支援及演示
如果您在大型组织工作,您应该了解有关 Kong 企业版 的更多信息。
许可证
Copyright 2016-2019 Kong Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
(First edition: vz revised at 2019.08.11)