文章目录

  • 前言
  • 一、API网关选型和Kong的安装
    • 1. 什么是API网关
    • 2. API网关技术选型
    • 3. 安装postgresql和migrations
    • 4. 安装kong
    • 5. 安装konga
  • 二、基本的路由转发配置
    • 1. kong的8001、8000和1337端口号的关系
    • 2. 基本的路由转发配置
    • 3. kong集成consul实现服务发现和负载均衡
    • 4. kong配置jwt实现登录校验
    • 5. kong配置反爬和ip黑名单

前言

Kong是一个开源的API网关和微服务管理平台,它提供了一系列的工具和技术来管理和监控分布式应用程序中的API。Kong被设计为一个高度可扩展的平台,它提供了一系列的核心功能,例如API路由、认证、流量控制、日志记录、监控、插件等等

Kong的核心是一个Nginx服务器,它被设计为一个可扩展的平台,通过安装和配置不同的插件,可以将其扩展为适合各种需求的API网关和微服务管理平台。Kong提供了一系列的官方和第三方插件,包括OAuth2认证、IP白名单、HMAC签名、CORS、限流、缓存、Websocket支持等等。

除了提供API网关和微服务管理功能之外,Kong还支持多种部署模式,包括单节点、多节点和分布式部署。Kong还提供了丰富的监控和日志记录功能,包括实时流量监控、指标收集、错误日志等等。

Kong可以轻松地集成到现有的应用程序中,无论是使用Docker容器还是裸机部署,都能够快速部署和配置。Kong还提供了一个简单易用的RESTful API,可以用来管理API网关和微服务。

总之,Kong是一个强大的API网关和微服务管理平台,提供了许多核心功能和丰富的插件,可以帮助企业构建和管理高效、可扩展的分布式应用程序。


一、API网关选型和Kong的安装

1. 什么是API网关

API网关(API Gateway)是一种用于构建和管理现代应用程序的中间层服务。它充当了客户端和后端服务之间的转换器,将来自客户端的请求转发给相应的后端服务,并将后端服务的响应返回给客户端。

API网关为应用程序提供了一种标准化和统一的方式来管理多个后端服务。通过将请求和响应处理逻辑集中在一个中心位置,API网关可以简化应用程序的开发和维护,并提供一系列的功能,如负载均衡、缓存、认证和授权、请求转换、API分组、监控和日志记录等。

API网关可以作为一个独立的服务,也可以作为微服务架构中的一个微服务。它通常使用RESTful API或GraphQL API来与客户端和后端服务进行通信,并可以与容器编排工具(如Kubernetes)和持续集成/持续部署(CI/CD)工具集成。

作用:

  • 负载均衡:通过将请求分发到多个后端服务实例,实现负载均衡以提高应用程序的可伸缩性和性能。
  • 缓存:可以对响应进行缓存,以减少后端服务的负载和提高响应速度。
  • 认证和授权:API网关可以处理用户身份验证和授权,并在访问后端服务之前验证用户的凭据,以确保只有经过身份验证的用户才能访问API。
  • 请求转换:API网关可以对请求进行转换和格式化,以适应不同的后端服务接口。
  • API分组:API网关可以将多个API分组,并为每个API设置不同的路由和策略。
  • 监控和日志记录:API网关可以收集API使用情况的数据,并记录API请求和响应的详细信息,以便进行故障排除和性能优化。
  • 安全性:API网关可以提供一些安全性功能,如防火墙、DDoS攻击防护、IP过滤、加密和解密、数据保护等。
  • API文档:API网关可以生成API文档,并为开发人员提供API使用说明和代码示例。
  • 协议转换:API网关可以将一种协议转换为另一种协议,以适应不同的客户端需求。

总之,API网关在应用程序开发和运维中具有非常重要的作用,可以大大简化应用程序的开发、部署、管理和维护。

2. API网关技术选型


Kong是一个开源的API网关,它是一个针对API的一个管理工具。你可以在那些上游服务之前,额外地实现一些功能。

Kong本身是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的

API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的

RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

3. 安装postgresql和migrations

docker run -d --name kong-database \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
-e "POSTGRES_DB=kong" postgres:12docker run --rm \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=(这里填自己的IP)"
-e "KONG_PG_PASSWORD=kong" \
-e "POSTGRES_USER=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong kong migrations bootstrap

4. 安装kong

下载和安装:

官网下载rpm:https://download.konghq.com/gateway-2.x-centos-7/Packages/k/

sudo yun install 你下载的rpm

编辑kong配置
关闭防火墙、重启docker – 很重要

systemctl stop firewalld.service
systemctl restart docker

直接重启也行
修改配置 后续使用配置启动kong

cp /etc/kong/kong.conf.default /etc/kong/kong.conf
vim /etc/kong/kong.conf
#修改如下内容
database = postgres
pg_host = 192.168.1.102 # 这⾥得配置对外ip地址 不能是127.0.0.1
pg_port = 5432 # Port of the Postgres server.
pg_timeout = 5000 # Defines the timeout (in ms), for connecting,# reading and writing.
pg_user = kong # Postgres user.
pg_password = kong # Postgres user's password.
pg_database = kong # The database name to connect to.
dns_resolver = 自己的IP:8600 #这个配置很重要,配置的是consul的dns端⼝,默认是8600 可以⾃
admin_listen = 0.0.0.0:8001 reuseport backlog=16384, 127.0.0.1:8444 http2 ssl reu
proxy_listen = 0.0.0.0:8000 reuseport backlog=16384, 0.0.0.0:8443 http2 ssl reuse
kong start -c /etc/kong/kong.conf

然后在浏览器中访问: http://你的ip地址:8001/ 来确定kong是否启动成功

5. 安装konga

Konga是Kong API网关的一个可视化管理界面,它允许用户管理Kong API网关中的各种资源,例如API、插件、服务、路由等。

Konga提供了一个用户友好的界面,使得管理Kong变得更加容易。通过Konga,用户可以轻松地创建、编辑和删除API、插件、服务、路由等资源,也可以查看API的使用情况、服务的性能等信息。

除了基本的管理功能,Konga还提供了许多高级功能,例如自定义插件、权限管理、多租户支持等。Konga还提供了RESTful API,可以方便地与其他应用程序集成。

总之,Konga是一个非常强大的工具,可以帮助用户轻松管理Kong API网关,并提供了许多高级功能和扩展性。

docker run -d -p 1337:1337 --name konga pantsel/konga


二、基本的路由转发配置

1. kong的8001、8000和1337端口号的关系

  • 8001:kong的管理的端口
  • 8000:用户访问
  • 1337:konga 地址

Services:
Service顾名思义,就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方,Service可以与下面的Route进行关联,一个Service可以有很多Route,匹配到的Route就会转发到Service中,当然中间也会通过Plugin的处理,增加或者减少一些相应的Header或者其他信息.

Routes:
Route路由相当于nginx配置中的location
Route实体定义匹配客户端请求的规则.每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由.每一一个匹配给定路线的请求都将被提交给它的相关服务.
路由和服务的组合(以及它们之间的关注点分离)提供了一-种强大的路由机制,可以在Kong中定义细粒度的入口点,从而引导您的访问到不同upstream服务.

2. 基本的路由转发配置

当使用Kong作为API网关时,可以通过Kong的管理界面或API来进行路由转发的配置。

以下是基本的路由转发配置详解:

创建服务:
在Kong中,服务(Service)表示你的API或应用程序的一个实例。要创建服务,可以通过以下步骤:

  • 登录Kong的管理界面,选择"Services"选项卡,然后点击"Add Service"按钮。
  • 在弹出的表单中填写服务的基本信息,例如名称和目标URL。
  • 点击"Save"按钮保存服务。

创建路由:
路由(Route)将请求路由到服务的特定实例。要创建路由,可以通过以下步骤:

  • 在服务的管理页面,选择"Routes"选项卡,然后点击"Add Route"按钮。
  • 在弹出的表单中填写路由的基本信息,例如路径和协议。
  • 点击"Save"按钮保存路由。

测试路由:
要测试路由,可以使用HTTP客户端工具,例如curl或Postman。
根据路由的配置,构建HTTP请求,包括请求的路径和Host头部。例如,如果路由的路径为"/example",服务的目标URL为"http://example.com",则请求的URL应该为"http://localhost:8000/example",Host头部应该为"example.com"。
发送HTTP请求,并查看响应是否正确。如果响应正确,则路由配置成功。

注意: 在使用Kong进行路由转发时,还需要考虑负载均衡、健康检查、认证授权等因素。可以在Kong的管理界面或API中配置这些功能。

3. kong集成consul实现服务发现和负载均衡

只需要设置service的Name为:consul里的名称.service.consul

4. kong配置jwt实现登录校验

在Kong中,可以使用JWT插件来实现基于JSON Web Token (JWT)的登录校验。下面是使用Kong配置JWT插件的详细步骤:

安装JWT插件:
Kong提供了JWT插件,因此不需要单独安装。可以通过以下步骤启用插件:

  • 登录Kong的管理界面,选择"Plugins"选项卡,然后点击"Add Plugin"按钮。
  • 在弹出的表单中选择"jwt"插件,并填写插件的配置信息。
  • 点击"Save"按钮保存插件。

配置路由:

要实现登录校验,需要配置一个路由,将未经授权的请求重定向到认证服务。可以通过以下步骤创建路由:

  • 登录Kong的管理界面,选择"Routes"选项卡,然后点击"Add Route"按钮。
  • 在弹出的表单中填写路由的基本信息,例如路径和协议。
  • 在"Plugins"选项卡中启用"jwt"插件,并配置插件的参数,例如密钥和有效期。
  • 点击"Save"按钮保存路由。

配置认证服务:
可以使用任何支持JWT的身份验证服务来实现登录校验。常见的认证服务包括Keycloak和Auth0。以下是使用Keycloak配置认证服务的示例步骤:

  • 在Keycloak中创建一个新的Realm,并配置客户端和用户。
  • 在Kong的管理界面,选择"Consumers"选项卡,然后点击"Add Consumer"按钮。
  • 在弹出的表单中填写用户的基本信息,例如用户名和密码。
  • 在"Plugins"选项卡中启用"jwt"插件,并配置插件的参数,例如密钥和有效期。
  • 点击"Save"按钮保存用户。


解析jwt认证:https://jwt.io/

测试登录校验:
要测试登录校验,可以使用HTTP客户端工具,例如curl或Postman。
构建HTTP请求,并将JWT令牌作为Authorization头部的Bearer令牌发送到Kong的API。
如果JWT令牌有效,则请求将被路由到相应的服务。如果JWT令牌无效,则请求将被拒绝,并返回HTTP 401错误。

注意: 在使用Kong配置JWT插件时,还需要考虑令牌的生成和刷新等因素。可以在认证服务中配置这些功能。
需要结合你的加密逻辑在后端做一定的修改认证规则

5. kong配置反爬和ip黑名单

在Kong中,可以使用Access插件和IPRestriction插件来实现反爬和IP黑名单功能。下面是使用Kong配置这两个插件的详细步骤:

安装Access和IPRestriction插件:
Kong提供了Access和IPRestriction插件,因此不需要单独安装。可以通过以下步骤启用插件:

  • 登录Kong的管理界面,选择"Plugins"选项卡,然后点击"Add Plugin"按钮。
  • 在弹出的表单中选择"access"插件或"ip-restriction"插件,并填写插件的配置信息。
  • 点击"Save"按钮保存插件。

配置路由:
要实现反爬和IP黑名单功能,需要配置一个路由,并将相应的插件应用于该路由。可以通过以下步骤创建路由:

  • 登录Kong的管理界面,选择"Routes"选项卡,然后点击"Add Route"按钮。
  • 在弹出的表单中填写路由的基本信息,例如路径和协议。
  • 在"Plugins"选项卡中启用"access"插件或"ip-restriction"插件,并配置插件的参数,例如最大请求数、限速和IP地址范围。
  • 点击"Save"按钮保存路由。

测试反爬和IP黑名单:
要测试反爬和IP黑名单功能,可以使用HTTP客户端工具,例如curl或Postman。
构建HTTP请求,并发送到Kong的API。
如果请求的频率超过了最大请求数或被限速,则请求将被拒绝,并返回HTTP 429错误。
如果请求的IP地址在黑名单中,则请求将被拒绝,并返回HTTP 403错误。

注意: 在使用Kong配置Access和IPRestriction插件时,还需要考虑白名单和自定义错误消息等因素。可以在插件的配置中进行相应的设置。

【API网关】Kong安装和基本操作相关推荐

  1. 开源API网关Kong基本介绍和安装验证

    本文将介绍开源API网关Kong.在GitHub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选项的时候基本也会选择Kong网 ...

  2. 开源syslog服务器_开源API网关Kong基本介绍和安装验证

    今天准备介绍下开源API网关Kong,在Gtihub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选型的时候基本也会选择Kon ...

  3. 开源API网关Kong

    开源API网关Kong Kong 是一个在 Nginx 运行的 Lua 应用程序,由 lua-nginx-module 实现.Kong 和 OpenResty 一起打包发行,其中已经包含了 lua-n ...

  4. API 网关 Kong 实战

    1.Kong 介绍 Kong 是一款基于 OpenResty(Nginx + Lua 模块)编写的高可用.易扩展的,由 Mashape 公司开源的 API Gateway 项目.Kong 是基于 NG ...

  5. API网关Kong(二):Kong与Kubernetes集成的方法

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018-09-30 16:07:13 +0800 说明 先说组成 控制平面与数据平面 CustomResourceDefinitions 开始 ...

  6. API网关Kong(三):功能梳理和插件使用-基本使用过程

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018-10-10 14:37:53 +0800 说明 Kong的Admin API Kong定义的资源之间的关联关系 使用过程了解 先了解下 ...

  7. 原 docker(22):使用docker 搭建网关,Mashape API 网关 Kong,安装dashboard,和pgadmin4

    [其他docker相关分类]: https://blog.csdn.net/freewebsys/article/category/3103827 本文的原文连接是: http://blog.csdn ...

  8. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

     1622219047536 写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下 ...

  9. 企业安全建设之API网关kong的搭建

    背景: 1.近年来,微服务架构在大中型企业中的应用越来越广泛.在解决了单体架构所带来的负责性高.部署慢.创新性低的问题的同时,也带来了一些新的安全问题.在微服务的架构中,一个大的应用会被拆分成多个小的 ...

最新文章

  1. R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间
  2. Kali Linux下运行Sniffjoke出错的解决
  3. itext转html为pdf 锚点,ITEXT输出pdf..docx
  4. Kafka 常用命令记录
  5. hive 的分隔符、orderby sort by distribute by的优化
  6. oracle 12c安装psu,Oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
  7. [EULAR文摘] 在总人群中监测ACPA能否预测早期关节炎
  8. 阿里有一帮吃货工程师,在食堂玩起了“黑科技”
  9. 分享21款漂亮的WordPress高级主题
  10. javascript日历插件
  11. java反射机制及使用案例
  12. 2017.8.7 序列计数 思考记录
  13. 【find】Linux中find常见用法示例
  14. 按时间抽取的基-2 FFT算法 C语言实现(快速傅里叶变换,蝶形算法)
  15. Goonie企业竞争情报系统评为选中国优秀网络应用软件奖
  16. uvm transaction
  17. linux c解决多个第三方so动态库包含不同版本openssl造成的符号冲突
  18. 2007武汉房地产数据分析报告
  19. 倍福控制电机耦合运动
  20. 【动态】雷电网络预览:以太坊扩容解决方案发布开发者演示

热门文章

  1. 最新阿里P7技术体系:拼多多三面惨败,2021最新版!
  2. Flink——有界流VS无界流
  3. 项目13 路由器与网桥的设置
  4. MySQL Day01
  5. 电脑远程软件哪个好用
  6. 如何查看DLL的函数声明
  7. 土木工程计算机软件应用考试,土木工程计算机应用技术(12年4月)试题及答案
  8. linux 创建逻辑卷命令,Linux对逻辑卷的创建与管理基本命令
  9. PAT——1006 换个格式输出整数
  10. 英语四级关于计算机阅读理解,大学英语四级阅读解题技巧—选词填空篇