微服务之API网关:Kong:概要与安装
发布日期:2021-06-30 20:26:15
浏览次数:2
分类:技术文章
本文共 4343 字,大约阅读时间需要 14 分钟。
Kong是一个基于Apache License 2.0的开源项目,是一个云原生的快速可扩的分布式微服务抽象层,应用场景为微服务的API网关,类似于spring cloud的zuul。
概要信息
项目 | 说明 |
---|---|
官方网站 | |
开源/闭源 | 开源 |
License类别 | Apache License 2.0 |
代码管理地址 | |
开发语言 | 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/postgres 9.5 4e52a7b17957 24 hours ago 233 MBdocker.io/kong latest b9dbcf499414 4 weeks ago 91.6 MB[root@kong ~]#
服务启动确认
[root@kong ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb5620c04b3a9 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 kong06c8a53ee9af 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 ~]#
转载地址:https://liumiaocn.blog.csdn.net/article/details/80442222 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月21日 19时06分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Parallels Desktop 16 不能联网的解决办法
2019-04-30
SLAM中TUM数据集更改图片名字
2019-04-30
synchronized和CAS锁的区别【图文教程】
2019-04-30
配置nginx只允许域名访问,禁止ip访问【图文教程】
2019-04-30
Java代理【图文教程】_第1章_静态代理
2019-04-30
Java代理【图文教程】_第2章_jdk动态代理
2019-04-30
AOP面向切面编程【图文教程】_第1章
2019-04-30
AOP面向切面编程【图文教程】_第2章
2019-04-30
二叉树之前序、中序、后序和层次遍历【图文教程】
2019-04-30
java类的构成
2019-04-30
创建安装linux:centOS
2019-04-30
Xshell连接CentOS及安装hadoop的准备
2019-04-30