Kong01- Kong 介绍

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 概述 Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。 Kong 的官方网站,https://konghq.com/kongKong 的官方 Github 站点:https://github.com/kong/kongKong 有两个主要组件: Kong Server :基于 nginx 的服务器,用来接收 API 请求。

概述

Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。

Kong 的官方网站,https://konghq.com/kong
Kong 的官方 Github 站点:https://github.com/kong/kong
Kong 有两个主要组件:

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

Kong 的数据存储支持两个组件,Cassandra 和 PostgreSQL 。

Kong 官方推荐的 GUI 工具叫 Kong-Dashboard,但是友好度不太好。

Kong 还有一个 GUI 的工具叫做 KongA,GitHub 地址是 https://github.com/pantsel/konga

你可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器分发请求。根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。

对于开源社区来说,Kong 中最诱人的一个特性是可以通过插件扩展已有功能,这些插件在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写,而且 Kong 还有如下几个基础功能:HTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。

Kong 包可运行在部分的 Linux 发行版(包括CentOS、RHEL、Debian、Ubuntu)、Mac OS X 和 Docker 、Kubernetes、AWS-cloud、Google-Cloud 中,无论是本地机还是云端服务器皆可运行。

除了免费的开源版本,Mashape 还提供了付费的企业版,其中包括技术支持、使用培训服务以及 API 分析插件。

基于 rpm 安装

当前基于 CentOS 7 进行安装。

下载软件包可以从官方地址下载

https://konghq.com/install/

CentOS 7 的 rpm 包可以从以下地址找到

https://kong.bintray.com/kong-rpm/centos/7/

比如最近发布的 1.4.0 版本

https://kong.bintray.com/kong-rpm/centos/7/kong-1.4.0.el7.noarch.rpm

yum install kong-1.4.0.el7.noarch.rpm

安装数据存储的数据库

Kong 在运行过程中可以有数据库,也可以没有数据库。

如果你要使用数据库,你需要使用 kong.conf 配置文件中去配置启动数据库作为数据存储的方式,以及相应的路由或者 Kong 的代理。

如果你不需要使用数据数据库,那么你在 kong.conf 文件中指定一个 kong.yml的声明式配置文件来作为数据存储的文件。

Kong 支持 PostgreSQL 9.5+ 和 Cassandra 3.xx 来作为他的数据存储数据库。

如果使用数据库:

如果你使用 PostgreSQL ,需要初始化一个数据库和一个用户,例如:

CREATE USER kong; CREATE DATABASE kong OWNER kong;

现在 运行 Kong migrations

kong migrations bootstrap [-c /path/to/kong.conf]

如果不使用数据库:

如果要以无db模式运行Kong,应该首先生成声明性配置文件。使用下面的命令在当前的文件夹下,生成一个普通的 kong.yml

kong config init 

在生成好 kong.yml 文件后,编辑你的 kong.conf 文件,设置如下参数:

database = off
declarative_config = /path/to/kong.yml

启动 kong

kong start [-c /path/to/kong.conf]

如果要停止,请使用如下命令来停止

kong stop

重载命令是

kong reload

使用 Kong

Kong 默认运行在本地的 8001 端口

curl -i http://localhost:8001/

基于 Docker 安装 Kong

使用数据库

接下来可以快速的连接到 Kong 容器以及他的数据库容器。

创建 Docker 网络

需要创建一个自定义的网络,运行容器发现并且彼此之间通信,接下来创建一个名称为 kong-net 的网络,也可以使用其他名称。

docker network create kong-net

启动数据库

如果你想要使用 Cassandra 容器

docker run -d --name kong-database \
              --network=kong-net \
              -p 9042:9042 \
              cassandra:3

如果你想要使用 PostgreSQL 容器

docker run -d --name kong-database \
              --network=kong-net \
              -p 5432:5432 \
              -e "POSTGRES_USER=kong" \
              -e "POSTGRES_DB=kong" \
              postgres:9.6

初始化数据库

运行 migrations 使用一个短暂的 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_DATABASE 参数。

启动 Kong

当 migration 已经执行,并且数据库已经准备好,启动 Kong 容器来连接数据库容器,比如:

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

使用 Kong

Kong 运行在 8001

curl -i http://localhost:8001/

无数据库模式

创建 Docker 网络

需要创建一个自定义的网络,运行容器发现并且彼此之间通信,接下来创建一个名称为 kong-net 的网络,也可以使用其他名称。

docker network create kong-net

在没有数据库的模式下,不一定需要创建一个专用的网络,但是创建以后可以更好的用来添加其他内容,比如 Redis 集群支持的限速插件。

创建 Docker 卷

对于本指南的目的,Docker 卷是主机内的一个文件夹。可以将其映射到容器中的文件夹,我们给卷起一个名字,叫 kong-vol

docker volume create kong-vol

使用 如下命令查看 卷的 挂载点路径

 $ docker volume inspect kong-vol
 [
     {
         "CreatedAt": "2019-05-28T12:40:09Z",
         "Driver": "local",
         "Labels": {},
         "Mountpoint": "/var/lib/docker/volumes/kong-vol/_data",
         "Name": "kong-vol",
         "Options": {},
         "Scope": "local"
     }
 ]

记录 MountPoint 的路径,下边会用到。

初始化配置文件

按照声明是配置文件的规范进行修改配置文件,添加必要的配置项,比如 serveice、route、plugins、consumer 等等,保存配置文件在 MountPoint 的路径下,本文会放在 /var/lib/docker/volumes/kong-vol/_data/kong.yml

在无数据库模式下启动 Kong

使用如下命令启动 Kong ,并且使用 -v 参数挂载数据卷,使用 -e 参数指定必须的环境变量。

$ 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

使用 Kong

Kong 启动后,就可以使用了,可以使用如下方式来访问 Kong

curl -i http://localhost:8001/

比如,获取一个service 的列表

curl -i http://localhost:8001/services

Kong 的默认端口

Kong 一切正常,启动以后会默认监听如下端口

  • :8000 Kong 监听来自客户端的传入 HTTP 请求,并将其转发到上游服务。
  • :8443 Kong 监听来自 HTTPS 流量,这个端口的行为类似于 :8000,只是用来监控 HTTPS 的请求,没有转发功能,这个端口可以在配置文件里关闭。
  • :8001 Admin API 接口用来对 Kong 的监听服务进行配置。
  • :8444 Admin API 监听 HTTPS 的流量。

小结

本文描述了 Kong 是什么,以及如何在 CentOS 下和 Docker 下进行安装。Kong 是 OpenResty 的一个应用组件,如果要从源码安装 Kong 的话,需要先安装 OpenResty,具体参考 Compile Source

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
30天前
|
负载均衡 应用服务中间件 API
Nginx、Kong、Apisix、Gateway网关比较
Nginx、Kong、Apisix、Gateway网关比较
43 1
Nginx、Kong、Apisix、Gateway网关比较
|
负载均衡 Java 应用服务中间件
基于 nginx 部署 gateway 集群环境|学习笔记
快速学习基于 nginx 部署 gateway 集群环境
801 0
|
前端开发 NoSQL 关系型数据库
Kong网关介绍以及在Docker上部署容器以及Dashboard
Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能
1728 0
Kong网关介绍以及在Docker上部署容器以及Dashboard
|
Linux API 数据安全/隐私保护
|
5月前
|
Kubernetes 应用服务中间件 Linux
kubernetes 部署 nginx-ingress-controller
kubernetes 部署 nginx-ingress-controller
151 0
|
9月前
|
Ubuntu API 数据库
kong网关插件开发初探
kong插件开发初探
248 0
|
Kubernetes 容器
国内-eks-nlb+ nginx-ingress-controller部署
国内-eks-nlb+ nginx-ingress-controller部署
381 0
|
算法 API
kong gateway 插件使用
kong 插件使用, 其中限流插件是默认安装的
211 0
kong gateway 授权插件配置
kong gateway 授权插件配置 auth
230 0
|
关系型数据库 API PostgreSQL
kong 网关docker部署步骤
kong apigateway docker
506 0