Kong 服务管理和Konga 图形页面管理

2020-09-15 1 By admin

一、Kong 服务管理

Kong 服务的管理端口为 8001,可以通过 HTTP Restful API 来动态管理 Kong 的配置。

Kong 服务配置好API网关后,其访问请求的数据流过程:
Request -> Kong API(核心) -> Route (匹配域名、访问地址等信息,转发给绑定的Service) -> Service(服务的抽象对象,汇总和转发功能,转发给绑定的Upstream) -> Upstream(抽象的上游对象,丰富target 对象的功能配置) -> target(设置上游服务器的IP地址和端口信息)

1.1、Nginx 示例配置信息

upstream helloUpstream {
    server localhost:3000 weight=100;
}
server {
    listen 80;
    location /hello {
        proxy_pass http://helloUpstream;
    }
}

1.2、通过 Kong 管理端口动态配置

如上这个简单的 Nginx 配置,便可以转换为如下的 Http 请求。
# 配置 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"

1.3、四大核心对象

通过上面的配置过程,我们接触到 Kong 的四大核心对象:upstream,target,service,route。

Kong 服务的配置原理(四大核心对象)和 Nginx 服务的配置原理有较大的差别,所以请不要强制将两者的配置过程,做对应映射理解;而应该跳出 Nginx 配置的思维模式,接受一种新的配置模式。总而言之:他们的目的是相同的,但是实现过程和实现对象不同。

  1. upstream 是对上游服务器的抽象;包括target对象和一些 upstream 对象的特性设置。
  2. target 定义上游服务器的连接IP地址和端口;是重要的 upstream 对象的子对象
  3. service 是抽象层面的服务对象;用于和 upstream 对象进行绑定,也可以直接转发到某个host+ip配置的服务中。
  4. route 是路由对象的抽象;用于和 Service 对象绑定,设置访问域名、访问路径、头信息、访问方式等匹配项,匹配成功后转发给Service。

二、Konga 图形页面管理

Konga 的图形管理界面中一般需要配置的内容有:Services、Routes和Upstreams三个对象。在配置过程中,可以按照Upstreams、Services然后Route的先后顺序进行。

2.1、Upstreams 配置(配置上游服务器信息)

在 Konga 中配置 Upstreams 选项卡,主要是配置 Upstreams 和 Targets。
Upstreams 对象和Nginx 服务中的概念相同。
Targets 对象用于设置上游节点的IP地址和端口信息;和 nginx 服务中 Proxy_pass 指令的效果相似。

Upstreams 配置项可以分为:Upstreams基本信息、健康状态主动检查、健康状态被动检查和 Targets 信息配置。

Targets 对象配置可以使用IP地址、域名信息等;如果同一个Upstream 配置多个 Targets 对象,就可以实现负载均衡的效果。

2.2、Services 配置(绑定Upstream对象)

抽象层面的服务;通过 Host 配置字段,绑定Upstream 对象。另外也提供了一些用于丰富Service 对象配置的字段。

Service 对象配置字段:

  1. name(必填):服务名称.
  2. tags(可选):可选地向服务添加标记
  3. url(可选):将协议、主机、端口和路径立即设置成简短的属性。这个属性是只写的(管理API从来不“返回”url)
  4. protocol(必填):该协议用于与upstream通信。它可以是http(默认)或https。
  5. host(必填):upstream服务器的主机。
  6. port(必填):upstream服务器端口。默认为80
  7. path(可选):在向upstream服务器请求中使用的路径。默认为空。
  8. retries(可选):在代理失败的情况下执行的重试次数。默认值是5。
  9. connect_timeout(可选):建立到upstream服务器的连接的超时时间。默认为60000。
  10. write_timeout(可选):将请求发送到upstream服务器的两个连续写操作之间的超时时间。默认为60000。
  11. read_timeout(可选):将请求发送到upstream服务器的两个连续读取操作之间的超时时间。默认为60000。

2.3、Routes 配置(绑定Service 对象)

抽象的路由对象;将接受到的访问请求,通过一些匹配规转发到绑定的Service对象。在Route 对象上设置对某个请求的匹配方式,也就是请求的域名、请求路径、请求方式等。

Route 对象配置字段:

  1. name(可选) :定义名称
  2. tags(可选) :向路由添加标记
  3. protocols(可选) : 这条路线应该允许的协议列表。
  4. methods(半可选) :与此路由相匹配的HTTP方法列表。例如: [“GET”, “POST”].至少有一个主机、路径或方法必须被设置。用表单编码参数是methods[]=GET&methods[]=OPTIONS。使用JSON,使用数组。
  5. hosts(半可选):与此路径匹配的域名列表。例如:example.com. 至少有一个主机、路径或方法必须被设置。用表单编码参数是 hosts[]=foo.com&hosts[]=bar.com。使用JSON,使用数组。
  6. paths(半可选):与此路径相匹配的路径列表。例如: /my-path.至少有一个主机、路径或方法必须被设置。用表单编码参数是 paths[]=/foo&paths[]=/bar. 使用JSON,使用数组。
  7. Regex priority(可选) : 当多个路由同时使用正则表达式匹配某个给定请求时,用来选择哪个路由解析该请求的数字。当两个路由匹配路径并且具有相同的regex_优先级时,将使用较旧的路由(最低创建位置)。注意,非regex路由的优先级不同(较长的非regex路由在较短的路由之前匹配)。默认为0。
  8. strip_path(可选) :当通过其中一条路径匹配路由时,从上游upstream请求URL中去掉匹配前缀。默认值为true。
  9. preserve_host(可选) :当通过一个主机域名匹配一条路由时,在upstream请求头中使用请求主机头。默认设置为false,upstream主机头将是服务主机的主机头。

三、Konga 服务的其他管理选项卡

Konga 服务的图形管理界面中,除了 Services、Routes 和 Upstreams 以外,还有一些管理选项卡;这里简单介绍一下,可以增加对 Konga 服务的理解。

3.1、Application(Konga 的应用管理)

  1. Users:设置 Konga 服务的用户信息。
  2. Connections : 设置konga 连接kong 服务,用于管理kong。
  3. Snapshots : 对konga中的配置设置快照,备份配置信息。
  4. Settings : konga 服务的基本设置,如端口号,用户注册方式,权限和告警等。

3.2、API Gateway (Kong 管理)

  1. Services : 抽象的服务对象,之前已经介绍了。
  2. Routes : 抽象的路由对象,之前已经介绍了。
  3. Consumers : 用户对象,可以实现nginx 中的ngx_http_auth_basic_module 模块中的用户认证功能。其他使用方式没有研究。
  4. Plugins : Konga 支持很多插件,这些插件主要是对nginx功能的扩展。
  5. Upstreams : 抽象的上游服务器对象,之前已经介绍了。
  6. Certificates : 在配置https 服务时,在这里配置证书信息。