热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonapi网关_kong服务网关API

kong简介Kong是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。Kong有两个主要组件:KongServer:基

kong简介

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

Kong Server :基于 openresty 的服务器,用来接收 API 请求。

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

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

Kong包可运行在某些 Linux 发行版、Mac OS X 和 Docker 中,无论是本地机还是云端服务器皆可运行。

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

ef656fded6c8

Paste_Image.png

kong安装

官网提供了多种安装方式https://getkong.org/install/,采用yum或者docker安装较为方便。docker安装需要先安装数据库,本文使用PG数据库。

安装过程

因为现场网络不通在家里测试环境安装好save下,在现场load使用即可。使用了export和import装载是报错,因为安装时也没有进行其他配置,索性使用save进行拷贝。

docker save -o kong-database-postgres-docker-9.4.tar.gz docker.io/postgres

docker save -o kong.tar.gz docker.io/kong

docker load -i kong-database-postgres-docker-9.4.tar.gz

docker load -i kong.tar.gz

1. 安装kong

[slview@DEMO:~]$ docker search kong

INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED

docker.io docker.io/kong Open-source Microservice & API Management ... 73 [OK]

docker.io docker.io/pgbi/kong-dashboard Web UI for managing your Kong setup. 14 [OK]

docker.io docker.io/pantsel/konga More than just another GUI to KONG Admin API. 3 [OK]

docker.io docker.io/articulate/kong-wait Waits for Cassandra to be connectable befo... 1 [OK]

docker.io docker.io/galacticfog/kong A fork mashape/kong, with a bias towards p... 1 [OK]

docker.io docker.io/littlebaydigital/kong Extension of official docker kong image wi... 1 [OK]

docker.io docker.io/mesoshq/kong Run Kong clusters on Mesos/Marathon! 1 [OK]

docker.io docker.io/wmzhong/docker-kong For adding solutions for clustering... 1 [OK]

docker.io docker.io/anduin/kong kong 0 [OK]

docker.io docker.io/articulate/kong-monit Adds monit to the base kong image. 0 [OK]

docker.io docker.io/bakstad/kong Extension of the official Docker image for... 0 [OK]

docker.io docker.io/cknowles/kong Fork of official repo to ensure logs work ... 0 [OK]

docker.io docker.io/dasudian/kong Build kong docker image. 0 [OK]

docker.io docker.io/derdiedasjojo/kong kong with piwik-log plugin 0 [OK]

docker.io docker.io/derdiedasjojo/kong-conf create an api in kong by making an api-call 0 [OK]

docker.io docker.io/koudaiii/kong docker-kong 0 [OK]

docker.io docker.io/misfit/kong Kong in Docker 0 [OK]

docker.io docker.io/mrsaints/kong-aws An extension of Kong with a plugin that ca... 0 [OK]

docker.io docker.io/mrsaints/kong-dev A test / development sandbox for Kong, a s... 0 [OK]

docker.io docker.io/sikmi/nendo-docker-kong nendo kong 0 [OK]

docker.io docker.io/sneck/kong Kong(Open-Source API Management and Micros... 0 [OK]

docker.io docker.io/supermp/kong Kong 0 [OK]

docker.io docker.io/vikingco/kong Microservice & API Management Layer (https... 0 [OK]

docker.io docker.io/vikingco/kong-admin Standalone Kong Admin Service 0 [OK]

docker.io docker.io/zymbit/kong Mashape Kong 0 [OK]

[slview@DEMO:~]$

[slview@DEMO:~]$

[slview@DEMO:~]$

[slview@DEMO:~]$

[slview@DEMO:~]$ docker pull kong:0.10

Trying to pull repository 192.168.5.249:5000/kong ...

Pulling repository 192.168.5.249:5000/kong

Trying to pull repository docker.io/library/kong ...

sha256:ff6dd0495f1a5b312bff9fd42f6aee6437200a337e190eb0ddc8e5ca83482995: Pulling from docker.io/library/kong

343b09361036: Pull complete

eb953d76e90b: Pull complete

ebdf6ecbe509: Pull complete

24f20231ced9: Pull complete

Digest: sha256:ff6dd0495f1a5b312bff9fd42f6aee6437200a337e190eb0ddc8e5ca83482995

Status: Downloaded newer image for docker.io/kong:0.10

2. 安装PG

[slview@DEMO:~]$ docker search postgres

INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED

docker.io docker.io/postgres The PostgreSQL object-relational database ... 3552 [OK]

docker.io docker.io/kiasaki/alpine-postgres PostgreSQL docker image based on Alpine Linux 30 [OK]

docker.io docker.io/abevoelker/postgres Postgres 9.3 + WAL-E + PL/V8 and PL/Python... 10 [OK]

docker.io docker.io/macadmins/postgres Postgres that accepts remote connections b... 8 [OK]

docker.io docker.io/jamesbrink/postgres Highly configurable PostgreSQL container. 5 [OK]

docker.io docker.io/eeacms/postgres Docker image for PostgreSQL (RelStorage re... 4 [OK]

docker.io docker.io/blacklabelops/postgres Postgres Image for Atlassian Applications 3 [OK]

docker.io docker.io/azukiapp/postgres Docker image to run PostgreSQL by Azuki - ... 2 [OK]

docker.io docker.io/clkao/postgres-plv8 Docker image for running PLV8 1.4 on Postg... 2 [OK]

docker.io docker.io/publysher/postgres-s3 A Docker-based solution for Postgres backu... 2 [OK]

docker.io docker.io/2020ip/postgres Docker image for PostgreSQL with PLV8 1 [OK]

docker.io docker.io/eccube/postgres Docker image for PostgreSQL extended local... 1 [OK]

docker.io docker.io/steenzout/postgres Steenzout's docker image packaging for Pos... 1 [OK]

docker.io docker.io/1maa/postgres PostgreSQL base image 0 [OK]

docker.io docker.io/beorc/postgres Ubuntu-based PostgreSQL server 0 [OK]

docker.io docker.io/camptocamp/postgres Docker image for PostgreSQL including some... 0 [OK]

docker.io docker.io/coreroller/postgres official postgres:9.4 image but it adds 2 ... 0 [OK]

docker.io docker.io/debezium/postgres PostgreSQL for use with Debezium change da... 0 [OK]

docker.io docker.io/examus/postgres Postgres with change password 0 [OK]

docker.io docker.io/kobotoolbox/postgres Postgres image for KoBo Toolbox. 0 [OK]

docker.io docker.io/opencog/postgres This is a configured postgres database for... 0 [OK]

docker.io docker.io/studionone/postgres Postgres Docker image with postgres uuid-o... 0 [OK]

docker.io docker.io/timbira/postgres Postgres containers 0 [OK]

docker.io docker.io/travix/postgres A container to run the PostgreSQL database. 0 [OK]

docker.io docker.io/vrtsystems/postgres PostgreSQL image with added init hooks, bu... 0 [OK]

[slview@DEMO:~]$

[slview@DEMO:~]$

[slview@DEMO:~]$

[slview@DEMO:~]$ docker pull postgres:9.4

Trying to pull repository 192.168.5.249:5000/postgres ...

Pulling repository 192.168.5.249:5000/postgres

Trying to pull repository docker.io/library/postgres ...

sha256:8988064772fc8a39f0be47f7f2557788559221b27a51cbba595f23868edbc426: Pulling from docker.io/library/postgres

10a267c67f42: Pull complete

e9a920522e33: Pull complete

6888e696bd71: Pull complete

798096eed143: Pull complete

fb58419959b5: Pull complete

97f9ec09cb68: Pull complete

94972b6e82a0: Pull complete

a281bad165d7: Pull complete

080dd452e4af: Pull complete

e04973558177: Pull complete

79155f9ed5e1: Pull complete

010432309d6c: Pull complete

d1d8761b1fae: Pull complete

Digest: sha256:8988064772fc8a39f0be47f7f2557788559221b27a51cbba595f23868edbc426

Status: Downloaded newer image for docker.io/postgres:9.4

安装后启动

启动pg

docker run -d --name kong-database \

-p 5432:5432 \

-e "POSTGRES_USER=kong" \

-e "POSTGRES_DB=kong" \

postgres:9.4

启动kong

docker run -d --name kong \

--link kong-database:kong-database \

-e "KONG_DATABASE=postgres" \

-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \

-e "KONG_PG_HOST=kong-database" \

-p 8000:8000 \

-p 8443:8443 \

-p 8001:8001 \

-p 7946:7946 \

-p 7946:7946/udp \

kong:0.10

API

增加API

strip_uri :When matching an API via one of the uris prefixes, strip that matching prefix from the upstream URI to be requested. Default: true. 默认会删除uris前缀

curl -i -X POST --url http://127.0.0.1:8001/apis/ --data 'name=iot_user_app' --data 'upstream_url=http://127.0.0.1:16666/' --data 'uris=/getuserinfo,/getnatipmapinfo,/getimeibindinfo' --data 'strip_uri=false'

curl -i -X POST --url http://127.0.0.1:8001/apis/ --data 'name=iot_vpdn_app' --data 'upstream_url=http://127.0.0.1:16666/' --data 'uris=/getvpdnuserinfo,/getvpdnservinfo' --data 'strip_uri=false'

删除API

curl -i -X DELETE http://127.0.0.1:8001/apis/iot_user_app

{

data: [

{

uris: [

"/getuserinfo",

"/getnatipmapinfo",

"/getimeibindinfo"

],

id: "65dd8d1a-aea5-449d-a1d4-e705a4c88d1c",

upstream_read_timeout: 60000,

preserve_host: false,

created_at: 1495682904000,

upstream_connect_timeout: 60000,

upstream_url: "http://127.0.0.1:20000/",

strip_uri: false,

https_only: false,

name: "iot_user_app",

http_if_terminated: true,

upstream_send_timeout: 60000,

retries: 5

},

{

uris: [

"/getvpdnuserinfo",

"/getvpdnservinfo"

],

id: "146df495-455d-48dd-a051-eaefacbd7b1e",

upstream_read_timeout: 60000,

preserve_host: false,

created_at: 1495682920000,

upstream_connect_timeout: 60000,

upstream_url: "http://127.0.0.1:16666/",

strip_uri: false,

https_only: false,

name: "iot_vpdn_app",

http_if_terminated: true,

upstream_send_timeout: 60000,

retries: 5

}

],

total: 2

}

访问

-bash-4.4$ curl http://127.0.0.1:8000/getuserinfo?Type=hss\&IMSI=46003xxxxx\&REVLP=1

{

"86xxxxxxx": {

"CDMA_IMSI": "46003xxxxxxxxxx",

"ISDN": "86xxxxxxxxx",

"LTE_IMSI": "46011xxxxxxx",

"TYPE": "2/3/4G"

}

}

插件

kong提供了很多插件,一般使用的是授权和流量控制。

{

enabled_plugins: [

"syslog",

"ldap-auth",

"rate-limiting",

"correlation-id",

"jwt",

"request-termination",

"runscope",

"request-transformer",

"http-log",

"loggly",

"response-transformer",

"basic-auth",

"tcp-log",

"hmac-auth",

"oauth2",

"acl",

"bot-detection",

"udp-log",

"cors",

"file-log",

"ip-restriction",

"datadog",

"request-size-limiting",

"galileo",

"aws-lambda",

"statsd",

"response-ratelimiting",

"key-auth"

]

}

{

data: [

{

api_id: "ff315a1a-d98d-4a62-aad9-7bc6bb063e22",

id: "65146028-c231-4618-82d4-02f8cc2b6e57",

created_at: 1495684427000,

enabled: true,

name: "ip-restriction",

config: {

whitelist: [

"59.43.53.0/24",

"100.66.124.0/24",

"100.66.44.0/24",

"172.16.0.0/18"

]

}

},

{

api_id: "ff315a1a-d98d-4a62-aad9-7bc6bb063e22",

id: "2aa6b021-cf73-4651-9c07-a3d5c60b900f",

created_at: 1495684482000,

enabled: true,

name: "rate-limiting",

config: {

fault_tolerant: true,

limit_by: "consumer",

policy: "cluster",

redis_database: 0,

second: 100,

hour: 6000,

redis_timeout: 2000,

redis_port: 6379

}

},

{

api_id: "ff315a1a-d98d-4a62-aad9-7bc6bb063e22",

id: "c53fa430-1b2a-47e8-a093-3c19a23bd87b",

created_at: 1495684523000,

enabled: true,

name: "request-size-limiting",

config: {

allowed_payload_size: 128

}

}

],

total: 3

}

安全插件

通过设置安全插件可以控制IP白名单、黑名单以及ACL来控制访问范围,多个IP段使用逗号分隔:

curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \

--data "name=ip-restriction" \

--data "config.whitelist=59.43.53.0/24,100.66.124.0/24,100.66.44.0/24,172.16.0.0/18"

访问速率插件

通过设置访问速率插件可以访问速率,防止访问速率过大造成服务器压力,目前支持每秒、每小时进行限制:

curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \

--data "name=rate-limiting" \

--data "config.secOnd=1000" \

--data "config.hour=60000"

访问速率插件

通过设置访问速率插件可以访问速率,防止访问速率过大造成服务器压力,目前支持每秒、每小时进行限制:

curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \

--data "name=rate-limiting" \

--data "config.secOnd=1000" \

--data "config.hour=60000"

访问包大小控制

curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \

--data "name=request-size-limiting" \

--data "config.allowed_payload_size=128"

遗留问题

kong可以做oauth2.0和jwt做鉴权。

未进行压力测试,后面再探索吧。



推荐阅读
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文详细介绍了 Charles 工具的下载、安装、配置及使用方法,特别针对 HTTP 和 HTTPS 协议的数据抓取进行了说明。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 本文深入解析了Spring Cloud路由网关Zuul的核心功能及其典型应用场景。通过对方志朋老师教材的学习和实践,详细探讨了Zuul在微服务架构中的重要作用,包括请求路由、过滤器链管理以及服务动态扩展等关键特性。同时,结合实际案例,展示了Zuul在高并发和复杂业务场景下的应用优势,为读者提供了全面的技术参考。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有