文章目录
前言
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:12
docker 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插件时,还需要考虑白名单和自定义错误消息等因素。可以在插件的配置中进行相应的设置。