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

Nginx在微服务中的应用NginxKong:微服务网关简述

Kong是一款开源的API平台,它是基于Nginx扩展版OpenResty的Lua应用,其将Nginx的配置解构成多个Lua应用模块,通过Lua应用实现了Ngin

Kong 是一款开源的 API 平台,它是基于 Nginx 扩展版 OpenResty 的 Lua 应用,其将 Nginx 的配置解构成多个 Lua 应用模块,通过 Lua 应用实现了 Nginx 中各请求阶段的操作。Kong 把 Nginx 操作的配置存储在外部数据库中,并提供了 REST 风格的管理接口,用户可以通过管理接口实现 Kong 所有功能的动态操作。

Kong 支持 PostgreSQL 和 Cassandra 两种数据库,可以通过数据库的主从同步或分布式部署实现配置数据的高可用,多台 Kong 服务器通过数据库共享配置数据,实现对多台 Kong 服务器的统一配置管理。Kong 提供了基于 Lua 脚本实现的多种功能插件,在将用户请求转发给后端服务之前,用户可使用这些插件实现用户请求的认证、访问限流、链路跟踪、日志处理等各种操作。

Kong 是一个微服务网关平台,它作为微服务 API 的统一入口对外提供服务,为方便 API 的管理,定义了如下术语。


1、消费者

Kong 系统中,把访问微服务 API 的用户定义为消费者,用户可以通过消费者对象定义消费者身份,并可通过相关插件实现消费者访问路由规则或服务的授权。


2、消费者接口

消费者接口是消费者访问微服务 API 的接口,用于实现后端被代理目标的访问转发。


3、管理接口

管理接口是进行 Kong 功能配置的接口,可通过管理接口对操作对象进行配置,其约定了 REST 风格的语法,用户可以很容易地通过管理接口实现对 Kong 的功能配置。


4、操作对象

Kong 为方便实现 Nginx 配置的动态管理,定义了多个操作对象和对象参数,通过管理接口对不同的操作对象按照该对象的对象参数进行配置,可以非常快速地完成 Kong 的管理操作。Kong 常用的操作对象有目标(target)对象、上游(upstream)对象、服务(service)对象、路由(route)对象、消费者(consumer)对象、插件(plugin)对象、证书(certificate)对象、CA 证书(CA Certificate)对象、SNI 对象。

目标对象和上游对象构成真实的被访问服务器集群,可通过上游对象实现目标对象的负载均衡、会话保持等配置。路由对象和服务对象构成了 Nginx 虚拟主机的访问入口路由和转发目标的配置,服务对象可以直接代理一个外部主机域名,也可以直接关联上游对象实现用户请求的转发。

插件对象由不同的功能插件脚本组成,其可以与路由对象、服务对象及消费者对象关联,实现消费者对象请求转发给后端服务之前的各种功能操作。消费者对象用于描述客户端标识,通过认证及 ACL 插件可以对其进行访问认证和访问路由对象或服务对象的授权。证书对象、CA 证书对象、SNI 对象均用于 SSL 相关配置。

由于管理工具 Konga 基于管理接口提供了更加方便的 Web 化操作方式,这里为方便读者理解和操作,便直接使用 Konga 配置界面的对象参数介绍 Kong 的相关操作对象和对象参数。


1) 目标对象

目标对象等同于 Nginx 配置中上游服务器的主机,一个上游对象可以关联多个目标对象,目标对象的配置是动态即时生效的。由于上游对象需要维护目标对象的变更记录,因此目标对象只能手动或通过管理接口 DELETE 方法设置权重为 0。目标对象的对象参数说明如下表所示。

















参数名

参数说明

Target

被访问的真实服务器,可以是 IP:Port,默认端口为 8000,也可以是域名

Weight

当前目标对象在上游对象中的权重,默认为 100,取值范围为 0~1000


2) 上游对象

Kong 的上游对象用于描述 Nginx 配置指令域 upstream 的配置内容,Kong 支持对其所关联的目标对象进行主动或被动健康检测的设置。Kong 为方便上游对象及其关联目标对象的管理,通过 Lua 脚本实现了加权轮询(round-robin)、一致性哈希(consistent-hashing)、最少连接(least-connections)负载均衡算法,默认为轮询。

一个上游对象由多个目标对象组成,可以通过管理接口实现目标对象的动态变更。通常在一致性哈希算法和加权轮询负载策略下,目标对象数量的动态变化会引起负载策略的重新计算,虽然这种影响无法避免,但为了降低因负载算法重新计算产生的影响,Kong 为每个上游对象定义了一个环平衡器(ring-balancer),每个环平衡器有预先定义好数量的插槽(slot),上游对象中的每个目标对象将根据其权重被分配到相应数量的插槽,当目标对象数量变化时,只需对部分目标对象重新分配插槽而不需要负载策略的重新计算。

环平衡器只有在上游对象更改总插槽数时才会进行负载策略的重新计算,目标对象初始分配的插槽数官方建议至少为 100 个,当上游对象预期为 8 个时,即使初始时为两个目标也至少应将总插槽数定义为 800。上游对象的对象参数说明如下表所示。









































参数名

参数说明

Name

上游对象实例的名称

Hash on

设置是否启用一致性哈希负载,选项为 none 及哈希类型 consumer、ip、header 或 COOKIE,默认为 none,即仅使用加权轮询对目标对象实现负载

Hash on header

当哈希类型被设置为 header 时,此参数用于指定请求头字段的名称

Hash on COOKIE

当哈希类型被设置为 COOKIE 时,此参数用于指定 COOKIE 字段的名称,如果请求的 COOKIE 中无此字段,Kong 将为该字段生成一个值并在响应头中设置客户端 COOKIE

Hash on COOKIE path

当哈希类型被设置为 COOKIE 时,此参数用于指定 COOKIE 路径的值,默认为 /

Hash fallback

如果启用一致性哈希负载策略,若用户的请求无法计算哈希值时,此处可指定一个备份哈希类型,选项为 none、consumer、ip、header 或 COOKIE,默认为 none。如果哈希类型设置为 COOKIE,则参数无效

Hash fallback header

当备份哈希类型被设置为 header 时,此参数用于指定请求头字段的名称

Slots

上游对象环平衡器的总插槽数,取值范围为 10-65536,默认值为 1000


3) 服务对象

Kong 中的服务(Service)对象是指被代理的服务目标,既可以是一个域名,也可以是一个上游对象的名称,区别在于是否由 Kong 实现负载均衡。每个服务对象可以关联多个路由对象。一个服务对象只能关联一个上游对象或被代理的主机域名。服务对象的对象参数说明如下表所示。

























































参数名

参数说明

Name

服务对象实例名称

Description

服务对象实例描述

Tags

服务对象实例标签

Url

为方便配置,通过 URL 形式描述被代理主机的通信协议(Protocol)、主机(Host)、端口(Port)及路径(Path)的配置

Protocol

与被代理服务目标的通信协议。可选项为 http 或 https

Host

上游对象名或被代理的主机域名

Port

当前主机端口。默认为 80

Path

被代理主机的访问路径。默认为空

Retries

访问失败时执行重试的次数。默认为 5

Connect timeout

与被代理主机的连接超时时间,单位为毫秒。默认为 60000

Write timeout

与被代理主机的连续写超时时间,单位为毫秘。默认为 60000

Read timeout

与被代理主机的连续读超时时间,单位为毫秒。默认为 60000


4)路由对象

路由(Route)对象用于表示 Nginx 配置中虚拟主机的配置,对应 Nginx 的指令域 Server 及其包含的 location 配置。Kong 配置结构中,因为服务对象用于关联被代理的目标,而路由对象单独存在没有意义,所以其必须与服务对象关联使用。路由对象的对象参数说明如下表所示。









































参数名

参数说明

Name

路由规则名称

Hosts

当前路由规则匹配的虚拟主机名称,同 Nginx 配置指令 server name 的设置。该指令值是个列表值,可以输入多个

Paths

当前路由规则匹配的路径,同 Nginx 配置指令 location 的配置。该指令值是个列表值,可以输入多个

Regex priority

在同一虚拟主机下,当用户请求的路径被正则匹配到多个时,将只匹配该设定值最低的路由规则,默认值为0

Methods

当前路由规则允许的 HTTP 请求方法。它是个列表值,可以输人多个

Strip Path

当用户请求匹配当前规则时,设置是否在转发给服务对象的请求 URL 中包含当前路由规则匹配的路径。默认值为 false,表示保持用户请求的 URL 不变。当指令值为 true 时,相当于把用户请求 URL 中的当前路由规则匹配的路径替换为空。当代理协议为 GRPC 或 GRPCS 时不能使用该参数

Preserve Host

设置是否将用户请求当前虚拟主机的域名作为转发给服务对象的请求头中 Host 的值。默认为 false,当设置为 true 时,Kong 发送给服务对象请求头中 Host 的值为当前用户请求的域名

Protocols

当前路由规则支持的用户访问协议,该参数选项是个列表值,默认为 ["http","https"],可以输入选项为 http 和 https,当只选 https 时,所有 HTTP 请求都将跳转到 HTTPS


5) 插件对象

插件对象用于对用户在消费接口的请求/响应闭环中的不同插件执行方法进行配置,不同的插件与路由对象、服务对象及消费者对象关联,实现对消费者对象在 Nginx 中各请求阶段的相关操作。

Kong 的插件对象既可以关联到服务对象,实现所有该服务的请求控制,也可以关联到路由对象,仅对某些路由接口的请求进行控制,甚至是更细粒度的,仅对指定的消费者进行控制。一个插件在一个请求的生命周期中只运行一次,当一个插件被与多个操作对象关联时,与路由对象、服务对象及消费者对象这3个对象关联的越具体则执行优先级最高,插件的全局配置优先级最低。


6) 消费者对象

消费者对象是描述用户身份的对象,通过认证及 ACL 插件可以对其进行访问认证和访问路由对象或服务对象的授权。


7) 证书对象

证书对象表示 HTTPS 域名关联的证书,证书对象用于存储 SSL 证书的公共证书/私钥对。Kong 使用这些对象来处理加密请求的 SSL 终止。


8) CA证书对象

CA 证书对象表示受信任的 CA。Kong 使用这些对象来验证客户端或服务器证书的有效性。


9) SNI对象

Kong 的 SNI(Server Name Indication)对象可与证书对象进行关联,将证书/密钥对绑定到一个或多个域名。SNI 是一种改善 SSL/TLS 的技术,用于对客户端请头中 Host 字段进行处理,通过对 Host 字段的识别解决了当一个服务器绑定多个域名时 SSL 证书选择的问题,服务器将根据 Host 字段的域名返回该域名的 SSL 证书。


推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
author-avatar
郭洁蓉4071_878
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有