Kong01-Kong 介绍
概述
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 进行安装。
当前 Kong 的最新版本是 1.3.0 。
下载软件包可以从官方地址下载
https://bintray.com/kong/kong-rpm/download_file?file_path=centos/7/kong-1.3.0.el7.amd64.rpm
也可以使用yum 仓库进行下载,
修改 yum 仓库的 repo 文件的 baseurl 路径为:
baseurl=https://kong.bintray.com/kong-rpm/centos/7
我们接下来使用 yum 的 epel 源来进行安装。
安装 rpm 包
yum install epel-release
yum install kong-1.3.0.*.noarch.rpm --nogpgcheck
安装数据存储的数据库
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 一切正常,启动以后会默认监听如下端口
:8000Kong 监听来自客户端的传入 HTTP 请求,并将其转发到上游服务。:8443Kong 监听来自 HTTPS 流量,这个端口的行为类似于:8000,只是用来监控 HTTPS 的请求,没有转发功能,这个端口可以在配置文件里关闭。:8001Admin API 接口用来对 Kong 的监听服务进行配置。:8444Admin API 监听 HTTPS 的流量。
小结
本文描述了 Kong 是什么,以及如何在 CentOS 下和 Docker 下进行安装。Kong 是 OpenResty 的一个应用组件,如果要从源码安装 Kong 的话,需要先安装 OpenResty,具体参考 Compile Source
Kong01-Kong 介绍的更多相关文章
- HTTP API网关选择之一Kong介绍
为什么需要 API 网关 在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度.如上图左所示,在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要在每个服务中单 ...
- kong介绍-个人分享
kong简介 背景 我们在提供api或微服务时,通常借助openresty nginx进行流量转发或者添加一些规则或功能,但是随着服务数量和引用增多,复杂的网络环境, 使维护变得困难,不容易扩展,一些 ...
- 单机闭环 使用Nginx+Lua开发高性能Web应用
[西域骆驼D1532101213]西域骆驼(VANCAMEL)D1532101213 休闲套脚鞋 卡其43[行情 报价 价格 评测]-京东 http://item.jd.com/1856564.htm ...
- OpenResty api 网关
1,Orange网关 Orange是一个基于OpenResty的API网关.除Nginx的基本功能外,它还可用于API监控.访问控制(鉴权.WAF).流量筛选.访问限速.AB测试.动态分流等.它有以下 ...
- 1-Kong文章记录
参考: https://www.cnblogs.com/duanxz/p/9770645.html 系列博客可参考: 开源API网关系统(Kong教程)入门到精通 https://www.cnblog ...
- API网关系列之Kong的介绍以及安装
一.API网关产生背景 在微服务的架构中,一个大的应用会被拆分成多个小的单一的服务提供出来,这些小的服务有自己的处理,有自己的数据库(也可以共用),也许语言也是不一样的,他们可以部署在一个或多个服务器 ...
- Kong网关介绍与安装小记
本文主要为kong安装小记,系统环境为centos 6.7 本文转载请注明出处 —— xiaoEight 介绍 Kong 是在客户端和(微 ...
- API gateway 之 kong 基本介绍 (一)
一.API网关概念介绍 API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能.高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务, ...
- 网关服务Kong和konga介绍安装使用教程
介绍 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用.易扩展的,由Mashape公司开源的API Gateway项目.Kong是基于NGINX和Apache Cassa ...
- MySQL备份还原——AutoMySQLBackup介绍
AutoMySQLBackup是一个开源的MySQL备份脚本.可以说它是一个轻量级的备份方案,AutoMySQLBackup的安装.配置非常简单.方便.AutoMySQLBackup的sourcefo ...
随机推荐
- Redis开发与运维:数据迁移
问题 最近项目重构,提前想把一台上的redis实例转移到另一台redis实例上. 源redis数据库:阿里云Redis.VPC网络.Server版本2.8.19 目标数据库:阿里云Redis.VPC网 ...
- JAVA-JDBC-c3p0连接池配置
配置c3p0数据源的方式有三种,分别是手动配置,xml文件配置和properties文件配置,这三种配置方式存在一种即可. 通常来讲,用文件配置更方便书写和阅读 配置如下: 注:*号部分写自己的配置 ...
- SoapUI 的几种常用参数化方式
今天给大家来梳理下soapui这款工具关于参数化的几种方式以及具体的应用场景 1.properties 官方文档:https://www.soapui.org/docs/functional-test ...
- kali切换到西电源
准备研究kali的openvas,打开发现居然没有.apt-get更新一下结果各种报错,换成中科大源.阿里源还是始终报错,气到吐血.最后上西电开源社区换成了西电的kali源,更新速度2m多,一气呵成~ ...
- web前端体系-了解前端,深入前端,架构前端,再看前端。大体系-知识-小细节
1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-2. ...
- 在chrome浏览器安装各种前端,后台插件
如果想要在chrome安装插件,首先得先有应用chrome的商城,但是默认情况下是没有应用商店: 默认情况下下面这个界面是空白的,没有任何东西,第一步就先安装[谷歌访问助手] 安装步骤 第一步: 下载 ...
- e课表项目第二次冲刺周期第三天
昨天干了什么? 昨天和我们组的组员商量,确定了第二个界面的框架内容,即内容的输入和完成按钮,然后通过在网上搜索图片资源,然后我们利用ps软件,将图片通通设置了大小,进行了裁剪,最后为我们所利用,实现第 ...
- Kubernetes快速入门
二.Kubernetes快速入门 (1)Kubernetes集群的部署方法及部署要点 (2)部署Kubernetes分布式集群 (3)kubectl使用基础 1.简介 kubectl就是API ser ...
- Java学习笔记之基础语法(顺序,条件,循环语句)
顺序结构:自上而下 条件分支选择结构: if条件语句 1,一旦某一个分支确定执行以后,其他分支就不会执行.if后面的条件必须是boolean类型 2,if 后面如果不加大括号,默认相邻的下一 ...
- HTML5远程工具
因为有从网页直接远程其他windows电脑的需求,于是通过网上搜索找到下面几个解决方案,分享一下: 1.windows的远程桌面web连接tsweb 下载地址https://www.microsoft ...