Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >API 网关 Kong

API 网关 Kong

作者头像
李振
发布于 2021-11-26 01:49:24
发布于 2021-11-26 01:49:24
1.7K00
代码可运行
举报
文章被收录于专栏:乱码李乱码李
运行总次数:0
代码可运行

Kong 简介

Kong 是一款基于 OpenResty 的 API 网关平台,在客户端和(微)服务之间转发 API 通信。Kong 通过插件的方式扩展自己的功能,其中包括身份验证、安全控制、流量控制、熔断机制、日志、黑名单、API 分发等等众多功能。下图是官网给出的传统项目架构和使用 Kong 的架构:

Next-Generation API Platform for Modern Architectures。

可以看到,使用 Kong 之后,内部服务开发者只需要 focus 具体业务的实现,网关层提供 API 分发、管理、维护等功能,开发者只需要简单的配置就可以把自己开发的服务发布出去,同时置于网关的保护之下。

OpenResty 简介

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

Kong 三大组件

  • Kong Server :基于 nginx 的服务器,用来接收 API 请求。
  • Apache Cassandra/PostgreSQL:用来存储操作数据,本文以 PostgreSQL 为例进行讲解。
  • Kong dashboardUI 管理工具。

Kong 特性

  • 可扩展:通过简单地添加机器来进行水平扩展,可以用较低的负载处理任何请求。
  • 模块化:通过 RESTful API 安装和配置插件。
  • 在任何基础设施上运行:Kong 可以部署在云端、机房、或者混合环境,包括单个或多个数据中心

安装以及使用

Kong 可以安装运行在大部分 Linux 分布式平台和 macOS 上。全部安装方式请查看 安装 Kong 社区版

macOS Homebrew

(1) 安装 Kong

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew tap kong/kong
$ brew install kong

(2) 准备数据库

安装 PostgresSQL,在 Kong 启动之前指定数据库和用户。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ CREATE USER kong; CREATE DATABASE kong OWNER kong;

由于对 Postgres 并不熟悉,我使用 GUI 工具 pgAdmin4 完成 User 和 Database 的创建。

(3) 准备 kong 配置文件

kong 默认使用 /etc/kong/kong.conf 作为启动的配置文件,因此我们在 /etc/kong/ 目录下创建 kong.conf 文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
database = postgres
pg_port = 5432
pg_user = kong
pg_password = **** # 如果你刚才设置密码的话

全部 kong 的配置文件你可以查看 kong.conf.default

(4) 启动 kong

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kong migrations up
$ kong start

这个时候 kong 就启动起来了。然后我们可以通过下面的命令测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -i http://localhost:8001/

(5) 更多 kong 的命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kong check /etc/kong/kong.conf # 检验 kong 配置文件是否正确
$ kong migrations up [-c /etc/kong/kong.conf] # 通过配置文件准备数据存储
$ kong start [-c /etc/kong/kong.conf] # 启动 kong
$ kong stop 
$ kong reload

(6) kong 启动后监听了 4 个端口

  • 8000: Kong 监听来自客户端的 HTTP 请求的,并将此请求转发到上游服务。
  • 8443: 与 8000 端口相同,不过只监听 HTTPS 请求。
  • 8001: 管理员对 Kong 进行配置管理的端口。
  • 8444: 管理员监听 HTTPS 请求的端口。

Docker

(1) 创建一个名为 kong-net 的 network

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker network create kong-net

(2) 启动数据库(PostgreSQL)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run -d --name kong-database \
              --network=kong-net \
              -p 5432:5432 \
              -e "POSTGRES_USER=kong" \
              -e "POSTGRES_DB=kong" \
              postgres:9.6

这个时候命令行会显示 Unable to find image 'postgres:9.6' locally,然后会自动帮我买下载 postgres 的 image。

(3) 准备数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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 up

(4) 启动 Kong

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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

(5) 使用 Kong

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -i http://localhost:8001/

更详细的内容可以查看 5 分钟快速开始

kong-dashboard

Kong dashboard 是一个基于 node 实现的管理 Kong 网关设置的 GUI 工具。

使用 npm:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Install Kong Dashboard
npm install -g kong-dashboard

# Start Kong Dashboard
kong-dashboard start --kong-url http://localhost:8001

# Start Kong Dashboard on a custom port
kong-dashboard start \
  --kong-url http://localhost:8001 \
  --port [port]

# Start Kong Dashboard with basic auth
kong-dashboard start \
  --kong-url http://localhost:8001 \
  --basic-auth user1=password1 user2=password2

# See full list of start options
kong-dashboard start --help

使用 Docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Start Kong Dashboard
docker run --rm -p 8080:8080 pgbi/kong-dashboard start --kong-url http://kong:8001

# Start Kong Dashboard on a custom port
docker run --rm -p [port]:8080 pgbi/kong-dashboard start --kong-url http://kong:8001

# Start Kong Dashboard with basic auth
docker run --rm -p 8080:8080 pgbi/kong-dashboard start \
  --kong-url http://kong:8001
  --basic-auth user1=password1 user2=password2

# See full list of start options
docker run --rm -p 8080:8080 pgbi/kong-dashboard start --help

Kong 使用

本质上 Kong 是作用于请求和响应之间的一层代理,我们可以通过 RESTful 的形式管理 API。

添加一个 API

使用 curl 命令行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=example-api' \
  --data 'hosts=example.com' \
  --data 'upstream_url=https://lz5z.com'

或者使用 kong-dashboard

这时,Kong 已经做好了对 HOST 是 example.com 的 api 的代理请求,并且将其代理到 https://lz5z.com 上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: example.com'

总结

以上只是 Kong 简单的安装和工具的使用,由于之前对 docker、PostgresSQL 等周边工具并不熟悉,所以学习起来需要扩展的东西比较多,暂时先写到这里吧。关于 Kong 插件的使用已经编写,用户操作、授权、负载均衡、熔断等信息,这里先埋坑,后面有时间再补上吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务API网关-Kong初探
Kong是一个clould-native、快速的、可扩展的、分布式的微服务抽象层(也称为API网关、API中间件或在某些情况下称为服务网格)框架。更确切地说,Kong是一个在Nginx中运行的Lua应用程序,并且可以通过lua-nginx模块实现。Kong不是用这个模块编译Nginx,而是与OpenResty一起发布,OpenResty已经包含了lua-nginx-module。OpenResty 不是 Nginx的分支,而是一组扩展其功能的模块。
KaliArch
2019/09/29
5.4K2
微服务API网关-Kong初探
微服务网关Kong系列文章之二:Kong安装
如我们在术语部分的介绍,服务是上游服务的抽象,可以是一个应用,或者具体某个接口。Kong 提供了管理接口,我们可以通过请求 8001 管理接口直接创建,也可以通过安装的管理界面,实现的效果是一样的。
mervinwang
2021/01/20
8380
微服务网关Kong系列文章之二:Kong安装
kong接入网关
Kong(8000端口) 是请求进入端口,用户发送请求先到 Kong 项目的 8000 端口,kong根据配置的规则转发到真实的后台服务地址。
友儿
2022/09/11
5170
Docker 安装 KONG 带你玩转 API 网关
在当今的软件开发中,API 网关已成为微服务架构中不可或缺的一环。它不仅简化了服务间的通信、提供了统一的入口,还能在安全、监控、限流等方面发挥巨大作用。
南山竹
2024/07/11
4140
Docker 安装 KONG 带你玩转 API 网关
API Gateway Kong在Rainbond上的部署
Kong是一个可扩展的开源API平台(也称为API网关,API中间件或微服务服务网格)。Kong最初是由Kong Inc.(以前称为Mashape)实现的,用于为其API Marketplace维护、管理和扩展超过15,000个微服务,这些微服务每月产生数十亿个请求。
Rainbond开源
2020/01/02
1.3K0
云原生微服务网关 Kong 和Kong 管理UI Konga快速安装攻略
上一文我们对Kong网关的简单介绍,今天我们来搭建Kong的环境。以便于以后对Kong的进一步了解和学习。
码农小胖哥
2019/12/10
2.2K0
云原生微服务网关 Kong 和Kong 管理UI Konga快速安装攻略
Kong Api 初体验
个人博客纯净版:https://www.fangzhipeng.com/%E6%9E%B6%E6%9E%84/2017/09/17/kong-api-gateway.html
方志朋
2022/05/07
5170
KONG网关 — 介绍安装
网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证,但是除了JAVA的spring cloud之外,公共网关屈指可数,其中最受关注的就是KONG了,笔者半年前就已经在使用kong的那时候使用的是0.11.2-bate版本(之前还被官方坑了一次),前不久终于等到了1.X的正式版发布了,笔者就在这里给大家分享一下kong网关的基本情况以及使用安装的方式。
喵了个咪233
2019/05/26
2.1K1
在Docker中运行kong和kong dashboard
https://github.com/Kong/docker-kong/tree/d4cec3dc46c780a916a40963309554ca81da2b46/alpine 需要修改Dockerfile,增加执行权限,否则会报错: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"/docker-entrypoint.sh\\\": permission denied\"\n".
星哥玩云
2022/07/28
7520
网关神器Kong( 二 ):安装
上一篇我们已经已经了解了什么是 Kong,本篇就来带领大家了解如何安装 Kong。 接下来我们将使用 Docker 安装。如果你有其他的特殊要求,请参照 官方文档 。
拿我格子衫来
2022/01/24
1.6K0
网关神器Kong( 二 ):安装
云原生架构下的 API 网关实践: Kong (二)
Kong 是 Mashape 开源的一款云原生架构下的分布式 API 网关,其性能和可扩展性在同类组件中,表现都很优异。Kong 官方提供了很多直接可用的插件,此外,Kong 还可以通过插件扩展已有功能。
aoho求索
2019/08/28
2.2K0
API 网关 Kong
所谓网关,主要作用就是连接两个不同网络的设备,而今天所讲的 API 网关是指承接和分发客户端所有请求的网关层。
平也
2020/05/22
2.4K0
手把手教你实现一个Kong网关插件
Kong Gateway 是一个轻量、快速、灵活的基于Nginx开发云原生 API 网关。在云原生领域,Kong Gateway 越来受欢迎。
windealli
2023/10/12
2.3K0
手把手教你实现一个Kong网关插件
【玩转Lighthouse】使用Docker部署云原生API网关Kong
Kong是一款云原生(cloud-native)、平台无关(platform-agnostic)、可扩展(scalable)的 API 网关,以通过插件实现的高性能和可扩展性而著称。
用户1358150
2022/04/16
1.2K0
【玩转Lighthouse】使用Docker部署云原生API网关Kong
无外网环境下docker安装kong、postgresql、konga (二)
您需要创建一个自定义网络,以允许容器相互发现和通信。在此示例中kong-net是网络名称,您可以使用任何名称。
编程那点事
2023/02/25
5810
Kong网关:入门、实战与进阶-重读
Kong、OpenResty都是基于Nginx打造的新一代服务器。它们兼具Web服务器的功能,但侧重于网关层特性的延伸
yeedomliu
2023/12/21
7.4K0
Kong网关:入门、实战与进阶-重读
kong网关架构_kong网关性能
Kong是一个使用了lua-nginx-module运行在Nginx之上的Lua应用。Kong是一个成熟的API网关解决方案。API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。
全栈程序员站长
2022/10/01
1.9K0
kong网关架构_kong网关性能
Kong入门学习实践(2)实验环境搭建
最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。
Edison Zhou
2023/07/09
3200
Kong入门学习实践(2)实验环境搭建
kong 网关教程入门[通俗易懂]
1. 方便客户端维护– 每个请求方不用管理多个api url,统一访问api-gateway即可
全栈程序员站长
2022/09/13
3.4K0
Kong入门学习实践(5)API网关路由转发
最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。
Edison Zhou
2023/07/09
8520
Kong入门学习实践(5)API网关路由转发
相关推荐
微服务API网关-Kong初探
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验