共计 2289 个字符,预计需要花费 6 分钟才能阅读完成。
1、Kong 使用
kong 的使用起来很简单,对于熟悉 Nginx 的大神来说,就更不在话下了。不过在使用前先来介绍下其内的一些基本概念,以便我们在使用时不会感到懵逼。
2、管理方式
从上图中可以看出其中 8000/8443 分别是 Http 和 Https 的转发端口,等介于 Nginx 的 80 端口,而 8001 端口便是默认的管理端口,我们可以通过 Http Restful API 来动态管理 Kong 的配置。
如:我们来看一个典型的 Nginx 的配置对应在 Kong 上是怎么样的
下面是一个典型的 Nginx 配置
upstream helloUpstream {server localhost:3000 weight=100;}
server {
listen 80;
location /hello {proxy_pass http://helloUpstream;}
}
这是一个典型的 Nginx 转发配置我在就不多啰嗦了。
下面我们来看看其对应 Kong 中的配置
# 配置 upstream
curl -X POST http://localhost:8001/upstreams
--data "name=helloUpstream"
# 配置 target
curl -X POST http://localhost:8001/upstreams/hello/targets
--data "target=localhost:3000" --data "weight=100"
# 配置 service
curl -X POST http://localhost:8001/services
--data "name=hello" --data "host=helloUpstream"
# 配置 route
curl -X POST http://localhost:8001/routes
--data "paths[]=/hello"
--data "service.id=8695cc65-16c1-43b1-95a1-5d30d0a50409"
curl -X POST http://localhost:8001/routes
--data "hosts[]=a.com,b.com,*.abc.com"
--data "service.id=8695cc65-16c1-43b1-95a1-5d30d0a50409"
这一切配置都是通过其 Http Restful API 来动态实现的,无需我们在手动的 reload Nginx.conf。开发的同学看到这是不是感觉到很幸福了。
在上述的配置中涉及到了几个概念:upstrean、target、service、route 等概念,它们是 Kong 的几个核心概念,也是我们在使用 Kong Api 时经常打交道的,下面我们就其几个核心概念做一下简单的说明。
3、关键名词解析
- Upstream
Upstream 对象表示虚拟主机名,可用于通过多个服务(目标)对传入请求进行负载均衡。例如:service.v1.xyz 为 Service 对象命名的上游 host 是 service.v1.xyz 对此服务的请求将代理到上游定义的目标。
- Target
目标 IP 地址 / 主机名,其端口表示后端服务的实例。每个上游都可以有多个 target, 并且可以动态添加 Target。
由于上游维护 Target 的更改历史记录,因此无法删除或者修改 Target。要禁用目标,请发布一个新的 Targer weight=0, 或者使用 DELETE 来完成相同的操作。
- Service
顾名思义,服务实体是每个上游服务的抽象。服务的示例是数据转换微服务,计费 API 等。
服务的主要属性是它的 URL(其中,Kong 应该代理流量),其可以被设置为单个串或通过指定其 protocol,host,port 和 path。
服务与路由相关联(服务可以有许多与之关联的路由)。路由是 Kong 的入口点,并定义匹配客户端请求的规则。一旦匹配路由,Kong 就会将请求代理到其关联的服务。
- Route
路由实体定义规则以匹配客户端的请求。每个 Route 与一个 Service 相关联,一个服务可能有多个与之关联的路由。与给定路由匹配的每个请求都将代理到其关联的 Service 上。
Service 和 Route 的组合(以及它们之间的关注点分离)提供了一种强大的路由机制,通过它可以在 Kong 中定义细粒度的入口点,从而使基础架构路由到不同上游服务。
- Consumer
Consumer 对象表示服务的使用者或者用户。您可以依靠 Kong 作为主数据库存储,也可以将使用者列表与数据库映射,以保持 Kong 与现有的主数据存储之间的一致性。
- Plugin
插件实体表示将在 HTTP 请求 / 响应生命周期期间执行的插件配置。它是如何为在 Kong 后面运行的服务添加功能的,例如身份验证或速率限制。
将插件配置添加到服务时,客户端向该服务发出的每个请求都将运行所述插件。如果某个特定消费者需要将插件调整为不同的值,您可以通过创建一个单独的插件实例,通过 service 和 consumer 字段指定服务和消费者。
4、对应关系
- Upstream : target -> 1:n
- Service:Upstream -> 1:1 or 1:0 (Service 可以直接指向具体的 Target,相当于不做负载均衡)
- Service : Route -> 1:n
5、总结
这一章读起来比较枯燥,主要介绍了以下几个知识点。
1: Kong 的转发和路由端口:8000 和 8443
2: 介绍了 Kong 中的几个核心概念,Upstream、Route、Service、Consumer、Targe、Plugin 的作用。
3: 介绍了 核心组件的对应的关系
想了解更多关于 Kong 网关的请移步 >>>>> 企业级 API 网关 Kong