Kong是一个基于Apache License 2.0的开源项目,是一个云原生的快速可扩的分布式微服务抽象层,应用场景为微服务的API网关,类似于spring cloud的zuul。

概要信息

项目 说明
官方网站 https://konghq.com/
开源/闭源 开源
License类别 Apache License 2.0
代码管理地址 https://github.com/Kong/kong
开发语言 Lua
支持平台 提供官方镜像,可运行于容器之中,可以运行于多种设备中
当前版本 0.13.1(2018/04/24)
更新频度 平均每月1-2次版本更新

Why Kong

提供类似的API网关不止一家,Kong侧重于解决如下传统方式的四大痛点:

痛点 说明
重复多 在多个微服务中,共通的功能重复,比如认证或者日志相关共通模块
巨石化 单个服务仍然后变成尾大不掉的巨石应用的趋势
影响大 影响较大,很难做到扩展功能而能不影响其他服务
效率低 由于系统限制,导致生产性低下

功能特色

kong在openresty基础上进行的开发,而openresty基于nginx,所以kong的很多概念和用法都是nginx特色,包括对功能进行描述的词汇,比如upstream services就是nginx设定的upstream。kong很好地封装了nginx,并对外提供了如下的功能接口:
- 云原生:具有平台无关性,kong即可以运行在物理设备也可以运行在kubernetes上
- 动态负载均衡:在多个upstream services基础上进行负载均衡设定
- 基于hash的负载均衡:基于hashing/sticky session的负载均衡
- 断路器:能追踪不健康的upstream services
- 健康检测:对upstream services进行主动或者被动地监控
- 服务发现:可结合consul提供服务注册等功能
- WebSockets:通过WebSockets和upstream service进行通信
- OAuth2.0:可对API方便地添加OAuth2.0进行授权
- 日志:通过HTTP/TCP/UDP等方式进行日志相关操作
- 安全:ACL,机器人检测,黑白名单IP等
- 系统日志:日志可输入到系统日志中
- 监控:提供实时监控功能
- 认证:HMAC/JWT以及基本认证方式
- 限流(Rate-Limiting):基于多变量对请求进行阻塞或者限制
- 转换:对TTP请求和相应进行添加/删除/操纵等操作
- 缓存:在代理层进行缓存和响应处理
- CLI:通过命令行对kong的集群进行控制
- REST API:可灵活地通过RESTful API对kong进行操作
- 失败检测与恢复:Cassandra某一节点停止也不会影响kong的功能
- 集群:所有的kong节点都能自动加入集群,并保证配置在整个节点间得到更新
- 可扩展性:kong可以通过添加节点很容易地实现横向扩展
- 性能:使用nginx作为内核,kong具有nginx的高性能
- plugin:可以对kong和API进行扩展

安装方式

支持多种安装方式如下:

安装:Step1: 启动数据库

这里采用docker方式进行安装, kong的运行需要数据库的支持,目前官方支持postgresql和cassandra,版本要求如下

数据库 版本要求
cassandra >=3
postgresql >=9.5

使用如下任意一种方式启动数据库服务

数据库服务启动:postgresql

docker run -d –name kong-database \
-p 5432:5432 \
-e “POSTGRES_USER=kong” \
-e “POSTGRES_DB=kong” \
postgres:9.5

数据库服务启动:cassandra

docker run -d –name kong-database \
-p 9042:9042 \
cassandra:3

安装:Step2: 设定数据库

使用如下对应的方式设定数据库

postgresql

docker run –rm \
–link kong-database:kong-database \
-e “KONG_DATABASE=postgres” \
-e “KONG_PG_HOST=kong-database” \
-e “KONG_CASSANDRA_CONTACT_POINTS=kong-database” \
kong:latest kong migrations up

cassandra

docker run –rm \
–link kong-database:kong-database \
-e “KONG_DATABASE=cassandra” \
-e “KONG_PG_HOST=kong-database” \
-e “KONG_CASSANDRA_CONTACT_POINTS=kong-database” \
kong:latest kong migrations up

安装:Step3: 启动kong服务

postgresql关联方式

docker run -d –name kong \
–link kong-database:kong-database \
-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” \
-e “KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444” \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest

cassandra关联方式

docker run -d –name kong \
–link kong-database:kong-database \
-e “KONG_DATABASE=cassandra” \
-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” \
-e “KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444” \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest

安装确认

镜像信息

[root@kong ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
docker.io/postgres   9.5                 4e52a7b17957        24 hours ago        233 MB
docker.io/kong       latest              b9dbcf499414        4 weeks ago         91.6 MB
[root@kong ~]#

服务启动确认

[root@kong ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                NAMES
b5620c04b3a9        kong:latest         "/docker-entrypoin..."   9 hours ago         Up 2 seconds        0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp   kong
06c8a53ee9af        postgres:9.5        "docker-entrypoint..."   9 hours ago         Up 6 seconds        0.0.0.0:5432->5432/tcp                                               kong-database
[root@kong ~]# 

通过如下/status可以确认服务端口的kong服务的状态是否正常

[root@kong ~]# curl http://localhost:8001/status
{"database":{"reachable":true},"server":{"connections_writing":1,"total_requests":2,"connections_handled":2,"connections_accepted":2,"connections_reading":0,"connections_active":1,"connections_waiting":0}}
[root@kong ~]#

微服务之API网关:Kong:概要与安装相关推荐

  1. AspNetCore微服务下的网关-Kong(一)

    Kong是Mashape开源的高性能高可用API网关和API服务管理层.它基于OpenResty,进行API管理,并提供了插件实现API的AOP.Kong在Mashape 管理了超过15,000 个A ...

  2. 微服务之API网关接口设计

    微服务之API网关接口设计 API网关,顾名思义,就是外部到内部的一道门,其主要功能: 服务路由:将前段应用的调用请求路由定位并负载均衡到具体的后端微服务实例,对于前端应用看起来就是1个应用提供的服务 ...

  3. 《企业IT架构转型之道》随笔之SOA、ESB、微服务、API网关(2019-08-07)

    <企业IT架构转型之道>随笔之SOA.ESB.微服务.API网关(2019-08-07) 名词注释 为什么会进化 展望 作者在本章中提到的"烟筒式"系统建设模式,在目前 ...

  4. 微服务体系流量网关Kong简介

    前言 在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务.甚至有时候需要对请求进行一些安全.负载均衡.限流.熔断.灰度等中间操 ...

  5. java net包 网关_Net分布式系统之六:微服务之API网关

    本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件"API网关&q ...

  6. 深度好文 — 微服务和API网关限流熔断实现关键逻辑思路

    来源:https://www.toutiao.com/i6853970319745483275/?group_id=6853970319745483275 今天准备谈下微服务架构和API网关中的限流熔 ...

  7. .net core 微服务之API网关 开源中间件 Ocelot 笔记

     一夫当关万夫莫开 一:源起: 当我们的应用不再是单体架构时,微服务将原先单体下的功能组件分割后,产生了许多个微服务,实际上我们还是以前那样的操作,访问服务接口,达到我们的目的,而这次不过是换成了ht ...

  8. 微服务中API网关的作用是什么?

    目录 什么是API网关? 为什么要用API网关? API网关架构 API网关是如何实现这些功能的? 协议转换 链式处理 异步请求 什么是API网关? Api网关是微服务的重要组成部分,封装了系统内部的 ...

  9. 微服务API网关-kong初探

    一 概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.更确切地说,Kong是一个在Nginx中运行 ...

最新文章

  1. Fail to find the dnn implementation. [Op:CudnnRNN]解决办法
  2. 西人马聂泳忠:打造机器神经系统,成为中国的特斯拉
  3. arduino 智能车组装步骤_【本周福利】arduino从入门、进阶到精通学习资料包(免费滴)...
  4. (6)timedatetime(时间模块)
  5. hdu3714 水三分
  6. 火出圈的1688,能扣响C2M的扳机吗?
  7. 我的第一个Github项目上线了
  8. 引用一个网络图片作为样式的致命悲剧
  9. 大数据简介,技术体系分类整理
  10. java sleep唤醒_JAVA wait(), notify(),sleep详解(转)
  11. 生产环境-linux-tomcat宕掉-乌龙事件
  12. 阿里云热修复Sophix接入
  13. Bootstrap自定义上传文件图标样式并使用ajax及formData进行上传
  14. uva 10158 War
  15. 卸载xampp并重装mysql
  16. 商城小程序线上线下结合能带来什么优势?
  17. 青春不负韶光,梦想再次起航——记JavaEE班毕业典礼
  18. 台式计算机多少g的显卡怎么看,怎样看电脑配置|怎样看电脑显卡配置?
  19. 使用opencv和python实现图像的智能处理pdf_机器学习:基于OpenCV和Python的智能图像处理...
  20. 抵押贷款经纪市场现状及未来发展趋势

热门文章

  1. 【SealDEV 倾情奉献】Android APK 安装过程详解
  2. BCD码-8421码、5421码、2421码、余3码
  3. Freshman Here~
  4. 攻城略地mysql充值_攻城掠地充值有巨惠!平台折扣5.0超划算
  5. scrapy 保存到mysql_Scrapy保存数据到mysql
  6. 接电路要用计算机测试嘛,ZY6502-PC型消防接口、水枪水压性能试验机
  7. 圈排序——python
  8. Flink大数据实时计算系列-Flink的Operator Chains的优化机制
  9. 《软件开发与创新:ThoughtWorks文集:续集》
  10. 金山办公:订阅为王?