Kong 介绍

news2024/11/27 8:28:03

1 官方:Installing Kong Gateway (Enterprise) on Kubernetes - v2.5.x | Kong Docs

2 github: GitHub - pantsel/konga: More than just another GUI to Kong Admin API

  1. 什么是kong
    1. API 网关和 API 服务管理层,它基于 Nginx 和 OpenResty 开发的一个具有分布式、高性能、高并发、可伸缩、可拓展,同时提供动态负载均衡、动态配置、服务注册、服务发现、授权认证、日志收集、插件拓展等特性和功能的 API 网关服务。
    2. Kong 支持三种数据存储的方式,分别是PostgreSQL、Cassandra 和 DB-less。我们本次课程使用的是和 PostgraSQL 的组合方式。
  2. Kong 主要的三个组件:
    1. Kong Server :基于 Nginx 的服务器,用来接收 API 请求。
    2. PostgraSQL :用来存储数据。
    3. Kong Dashboard :官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api,也有开源的,比较不错的 Web 管理平台 konga。
  3. Kong 的基础对象主要是分为以下 8 大类:
    1. 路由
      1. 路由就是客户端请求到服务的匹配规则,它是请求入口,支持精确匹配、模糊匹配以及正则匹配,后面我们会一一演示。
      2. 路由与服务的关系都是多对一的,也就是说,每个服务可以对应一个或多个与之相关联的路由。每个路由都将被代理到对应的服务。
      3. 名称

        描述

        name路由名称,不填写则 Kong 自动生成。
        protocols允许的协议列表,默认值:http、https,若仅设置为 https,则 http 请求将升级为 https。
        methodshttp 方法列表,例如:GET、POST、PUT、DELETE 等。
        hosts域名列表,支持精确匹配域名及泛域名。
        paths路径列表,支持精确前缀匹配及正则匹配。
        headers请求头列表。
        https_redirect_status_code若匹配到路由的所有属性,但请求的协议是 http,则该 http 状态码响应为指定值,并且可将 http 强行切换成 https。默认值:426。
        regex_priority优先级,若路由属性匹配相同,则根据优先级高低匹配。若优先级也相同则按照路由创建时间选择。默认值:0。
        strip_path当请求匹配到此路由中的某一条时,则先从请求的URL中删除此路径前缀,再将请求转发至上游服务。默认值:true。
        preserve_host当请求匹配到路由中的域名时,则在请求头中使用此域名,如果将该值设置为false,则请求头中的域名为上游服务的域名。
        snis使用流路由时,与此路由相匹配的SNI列表。
        sources使用流路由时,与此路由相匹配的传入连接的IP源地址列表。
        destinations使用流路由时,与此路由相匹配的请求连接的IP目的地址列表。
        tags与路由关联的一组可选字符串,用于分组和过滤。即标签。
        service路由所关联的服务。
    2. 服务
      1. 服务是用户管理上游微服务的入口,用于将对应的请求流量,分发给对应的上游服务器。

        客户端会先请求路由,若匹配成功,则 Kong 将请求,代理到该路由相关联的服务上。

      2. 名称

        描述

        client_certificate在与上游服务进行TLS握手时,所使用的客户端证书。
        connect_timeout从请求到上游服务建立连接的超时时间,默认为 60000 毫秒。
        host上游服务的名称或域名或upstream名称。
        name服务名称,不填写则 Kong 自动生成。
        path请求到上游服务之间要附加使用的路径。
        port上游服务的端口号,默认值:80。
        protocol与上游服务通信的协议,默认值:http。
        read_timeout从上游服务接收数据的超时时间,默认为 60000 毫秒
        retries代理失败后重试的次数,默认值:5。
        tags与服务关联的一组可选字符串,用于分组和过滤。即标签。
        url简写属性,一次性设置 protocol、host、port 和 path。
        write_timeout将请求发送到上游服务的超时时间,默认为 60000 毫秒
    3. 上游
      1. 上游服务可以表示为一个虚拟的服务,我们可以对上游服务配置多个目标节点进行负载均衡及健康检查。

        健康检查有主动和被动两种模式,当检查到不健康的目标节点的时候,则将该目标节点禁用,使其不参与负载,也可以将已经处理好的目标节点加入到负载中。

      2. 名称

        描述

        algorithm使用的负载均衡算法。可接受值:consistent-hashing(一致性散列)、least-connections(最少连接)、round-robin(轮询),默认值:round-robin。
        hash_fallback如果主hash_on没有返回hash(例如。header丢失,或没有consumer识别).consumer,ip,header或cookie其中之一。如果hash_on设置为cookie,则不可用。默认为 "none"。
        hash_fallback_header标头名称,用于将值作为hash输入。仅在hash_fallback设置为header时才需要。
        hash_on什么用hash输入:none(导致加权循环方案没有hash),consumer,ip,header或cookie。默认为 "none"。
        hash_on_cookiecookie名称从哈希输入中获取值。仅当hash_on或hash_fallback设置为cookie时才需要。如果指定的cookie不在请求中,Kong将生成一个值并在响应中设置cookie。
        hash_on_cookie_path要在响应标头中设置的cookie路径。仅当hash_on或hash_fallback设置为cookie时才需要。默认为 "/"。
        hash_on_headerheader名称,用于将值作为hash输入。仅在hash_on设置为标头时才需要。
        healthchecks.active.concurrency在活动主动健康检查中同时检查的目标数。默认为10。
        healthchecks.active.healthy.http_statuses一组HTTP状态,用于在主动健康检查中由探针返回时考虑成功,指示健康状况。默认[200, 302] 。使用 form-encoded 参数为http_statuses[]=200&http_statuses[]=302 ; 使用JSON,参数使用数组即可。
        healthchecks.active.healthy.interval健康目标的主动健康检查之间的间隔(以秒为单位)。值为零表示不应执行健康目标的活动探测。默认为0。
        healthchecks.active.healthy.successes活动探针中的成功次数(由healthchecks.active.healthy.http_statuses定义)以考虑目标健康。默认为0。
        healthchecks.active.http_path在GET HTTP请求中使用的路径,作为活动运行状况检查的探测运行。默认为 "/"。
        healthchecks.active.https_sni使用HTTPS执行主动健康检查时用作SNI(服务器名称标识)的主机名。当使用IP配置目标时,这尤其有用,因此可以使用正确的SNI验证目标主机的证书。
        healthchecks.active.https_verify_certificate使用HTTPS执行活动运行状况检查时是否检查远程主机的SSL证书的有效性。默认为true。
        healthchecks.active.timeout活动运行状况检查的套接字超时(以秒为单位)。默认为1。
        healthchecks.active.type是使用HTTP还是HTTPS执行活动运行状况检查,还是仅尝试TCP连接。可能的值为tcp,http或https。默认为 "http"。
        healthchecks.active.unhealthy.http_failures活动探测器中的HTTP故障数(由healthchecks.active.unhealthy.http_statuses定义)以考虑目标运行状况不佳。默认为0。
        healthchecks.active.unhealthy.http_statuses一组HTTP状态,用于在活动运行状况检查中由探测器返回时考虑失败,指示不健康。默认[429, 404, 500, 501, 502, 503, 504, 505] , 用 form-encoded 的时候,参数http_statuses[]=429&http_statuses[]=404;使用JSON,参数使用数组即可
        healthchecks.active.unhealthy.interval不健康目标的活动健康检查之间的间隔(以秒为单位)。值为零表示不应执行不健康目标的活动探测。默认为0。
        healthchecks.active.unhealthy.tcp_failures活动探测器中用于考虑目标不健康的TCP故障数。默认为0。
        healthchecks.active.unhealthy.timeouts活动探测器中用于考虑目标不健康的超时次数。默认为0。
        healthchecks.passive.healthy.http_statuses一组HTTP状态,表示由代理流量生成的健康状况,如被动健康检查所观察到的那样。默认[200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 304, 305, 306, 307, 308],使用 form-encoded,参数为http_statuses[]=200&http_statuses[]=201 ,使用 JSON,参数为数组即可。
        healthchecks.passive.healthy.successes代理流量的成功次数(由healthchecks.passive.healthy.http_statuses定义)以考虑目标健康,如被动健康检查所观察到的那样。默认为0。
        healthchecks.passive.type是否执行解释 HTTP/HTTPS 状态的被动运行状况检查,或仅检查TCP连接是否成功。可能的值是tcp,http或https(在被动检查中,http和https选项是等效的。)。默认为 "http"。
        healthchecks.passive.unhealthy.http_failures代理流量,(由healthchecks.passive.unhealthy.http_statuses 定义),中的HTTP故障数,以考虑目标不健康,如被动运行状况检查所观察到的那样。默认为0.
        healthchecks.passive.unhealthy.http_statuses当被动健康检查的探针返回值是 http 状态数组中的某一个值时,代表不健康的状态是由代理流量产生的。默认值:[429, 500, 503]
        healthchecks.passive.unhealthy.tcp_failures通过被动运行状况检查观察到的代理流量中考虑目标不健康的TCP故障数。默认为0。
        healthchecks.passive.unhealthy.timeouts通过被动运行状况检查观察到的代理流量中考虑目标不健康的超时次数。默认为0。
        host_header通过 Kong 代理请求时,主机头所使用的名称
        name这是主机名,必须等于Service的host。
        slots负载均衡器算法中的插槽数(10-65536)。默认为10000。
        tags与上游关联的一组可选字符串,用于分组和过滤。即标签。
    4. 目标
      1. 目标节点代表一个真实的物理服务,通常为IP地址和端口的组合,每个目标节点都是上游服务的一个具体的节点实例,上游服务与目标节点则是一对多的对应关系。在运行过程中,可动态的添加或者删除目标节点。

        此外,每个目标节点还可以设置权重,接收不同比例的请求流量。

      2. 名称

        描述

        target目标地址(IP地址或主机名)和端口。
        weight权重,0 ~ 1000。默认值:100。
        tags与目标关联的一组可选字符串,用于分组和过滤。即标签。
    5. 消费者
      1. 消费者代表一个具体的用户,是客户端请求的发起者。消费者ID可以作为主要的数据存储,可以与业务数据库的用户信息进行映射、关联。并为身份授权和鉴权功能提供更多的策略。
      2. 名称

        描述

        username唯一用户名。
        tags与消费者关联的一组可选字符串,用于分组和过滤。即标签。
        custom_id存储实际业务消费者的唯一标识,包括但不限于:用户名、ID等。
    6. 插件
      1. 有的时候,我们会需要在请求或者响应的生命周期中,去执行一些钩子动作。那么在 Kong 中,我们就可以使用插件的机制来在我们的路由和服务上添加、配置和扩展自定义功能,例如第三方的身份验证、限频以及其他的定制化需求。

        在向服务或者路由添加了插件后,则客户端请求这个服务的时候,都会先去执行插件。

        同时插件也是支持应用于某些特定的消费者,以及可以配置为全局插件。

      2. 下面我们就来说下它的插件运行顺序的优先级,依次为优先级从高到低。需注意,涉及到消费者的都是需要通过身份认证的:

        1. 路由、服务、消费者(身份验证)

        2. 路由、消费者(身份验证)

        3. 服务、消费者(身份验证)

        4. 路由、服务

        5. 消费者(身份验证)

        6. 路由

        7. 服务

        8. 全局插件

        9. 名称

          描述

          name插件的名称。
          route当此属性指定的路由接收请求时,插件才会运行。默认值:null。
          service当指定服务中某一个路由在接收请求时候,插件才会运行。默认值:null。
          consumer当此属性匹配到指定的消费者时,插件才会运行。默认值:null。
          config插件配置的外部属性。
          run_on控制插件在哪些 Kong 节点上运行,常用与服务网格,接受的值如下: 1. first:在请求到的第一个 Kong 节点上运行插件。 2. second:在请求到的第二个 Kong 节点上运行插件。 3. all:在所有 Kong 节点上运行插件。
          protocols触发此插件的协议列表。
          enabled是否启用插件。默认值:true。
          tags与插件关联的一组可选字符串,用于分组和过滤。即标签。
    7. 证书
      1. CA 证书对象表示受信任的 CA。Kong 使用这些对象来验证客户端或服务器证书的有效性。

        证书可以选择与 SNI 对象关联,并将证书 / 密钥对绑定到一个或多个主机域名上。

      2. 名称

        描述

        tags与证书关联的一组可选字符串,用于分组和过滤。即标签。
        snis与此证书关联的零个或多个主机名的数组,如SNI。这是一个糖参数,为方便起见,它将创建一个SNI对象并将其与此证书相关联。
        keySSL密钥对的PEM编码格式私钥。
        certPEM编码格式的SSL密钥对的公共证书。
    8. SNI(Server Name Indication 服务器名称指示)
      1. SNI 对象表示域名/主机名与证书的多对一映射。也就是说,证书对象可以有许多与之关联的域名/主机名。

        当 Kong 收到 SSL 请求时,它使用与其中的域名属性相关联的 SNI 来查找对应的泛域名证书对象。

      2.  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化运维,国产化信创替代方案

IT国产化体系庞杂,整个产业链涉及网络基础设施、服务器、存储、数据库、中间件、操作系统等众多环节,近年来IT行业各领域国产化技术日趋成熟,但各厂商技术耦合性不高,依然存在兼容适配问题。 北京智和信通技术有限公司作为国产化…

矩阵的等价、相似、合同

文章目录矩阵等价相似合同等价、相似、合同的关系矩阵等价 1.定义:A,B均为mn型矩阵,若r(A)r(B)r(A)r(B)r(A)r(B) ,则矩阵A、B等价 【型同,秩等】 相似 1.定义:n阶方阵A,B,若ョ可逆矩阵P,使得 …

如何设计一个安全的对外接口,老司机总结了这几点

博主之前做过恒丰银行代收付系统(相当于支付接口),包括现在的oltpapi交易接口和虚拟业务的对外提供数据接口。总之,当你做了很多项目写了很多代码的时候,就需要回过头来,多总结总结,这样你会看到…

企业选择适合的云存储的4个技巧

免费和廉价的个人和小型企业云存储无处不在,因此人们需要选择一种更适合自己的云存储。 而面对越来越多的选择,如何选择更适合自己的云存储产品呢?在以往,大多数人根据所获得的存储量多少而决定,这种方法虽然简单,但无…

C语言作用域与内存布局

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 C语言作用域与内存布局作用域1. 局部变量2. 静态局部变量3. 全局变量4. 静态全局变量5. extern声明全局…

[附源码]Python计算机毕业设计SSM基于RationalRose的教务管理系统开发(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

css flex布局 —— 项目属性 align-self

align-self属性定义 flex 子项单独在侧轴(纵轴)方向上的对齐方式,可覆盖 align-items 属性。 默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。 语法 .item {align-…

Web3中文|跑路的NFT项目Frosties,是如何被“绳之以法”?

本文,我们将深入探讨传说中的NFT项目Frosties跑路过程,以及该项目的创始人在私吞超100 万美元后是如何被抓获的。 Frosties NFT跑路过程 Frosties是一个由8888幅作品组成的NFT系列,具有Doodles的轻松、有趣的风格。该系列于2022年1月9日上线…

Talk预告 | 阿里巴巴达摩院算法工程师许贤哲:DAMO-YOLO:兼顾速度与精度的高效目标检测框架

本期为TechBeat人工智能社区第463期线上Talk! 北京时间12月15日(周四)20:00,阿里巴巴达摩院算法工程师——许贤哲的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “DAMO-YOLO:兼顾速度与精度的高效目标检测框架”…

mysql索引的使用详解

一、 普通索引 ALTER TABLE 表名 ADD INDEX index_store_id索引名 ( 字段名 ) 二、唯一索引 它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。 ALTER TABLE table_name ADD UNIQUE (column)三、 组合索引…

实用干货| 教你一键实现微信小程序转APP

自有APP不但有利于企业品牌推广,同时还更有利于收集用户相关数据,从而帮助企业及时调整发展方向和目标。而从0到1进行自有APP的开发其实是一项耗时耗力的工程,为了节约时间和成本,不少企业考虑直接将其现有微信小程序转换成商用AP…

21--Django-后端开发-Web开发模式、API接口以及Restful规范

一、Web开发模式 前后端混合开发模式 前后端分离 二、API接口 1.定义: 通过网络,规定了前后台信息交互规则的url链接,是前后台信息交互的媒介。 2.特点: 1)url:长得像返回数据的url链接 https://api.map.baidu.com/place/v2/search 2)请求方式:get、post、put、patc…

大一学生《Web前端网课作业》基于HTML+CSS自我介绍网页设计与制作

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Usaco Trainning刷怪旅第一层第三题:Friday the Thirteenth

Usaco Training网站 关注我持续更新usaco training题目 Is Friday the 13th really an unusual event? That is, does the 13th of the month land on a Friday less often than on any other day of the week? To answer this question, write a program that will compute …

构造哈夫曼树以及求哈夫曼编码、树的带权路径长度

我们先搞清楚这几个概念 构造哈夫曼树的方法 将每种字符出现的频率先收集起来放在最上方,然后选择两个频率最小的增加到图中,并将他们的和作为他们的父节点,增加到图中,在最上方删除选择的两个节点(4和2)&a…

尚硅谷的项目---尚医通 前端模块 vue-element-admin

我的node版本是16的版本,一开始我使用的老师提供的压缩包 一直出现错误 无法 npm install 其实后来发现是node版本过高的原因,小伙伴们可以讲版本调到跟老师的版本一样 我是嫌麻烦,我就直接从github上下载了一个新的版本 网站是&#xff1…

java中的反射和Class类

动态语言 VS 静态语言: 动态语言是一类在运行时可以改变其结构的语言,例如:新的函数对象甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化,通俗点说就是在运行时,代码可以根据某些条件改变自…

【AI with ML】第 4 章 :使用公共数据集和TensorFlow 数据集

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

Web前端105天-day43-JSCORE

JSCORE03 目录 前言 一、复习 二、块级作用域 三、声明提升 四、模板字符串 五、箭头函数 六、箭头函数的this 七、数组高阶函数 7.1.every 7.2.some 7.3.filter 7.4.map 7.5.join 八、ajax 九、作业 总结 前言 JSCORE学习开始 一、复习 函数的触发方式 call: 临…

跑步用头戴式耳机好吗、五款最适合跑步用的耳机推荐

无论您是为即将举行的运动进行训练的经验丰富的运动员,还是喜欢慢跑的人,一副好的运动型耳机都可以让您的日常锻炼变得与众不同。我们测试过市面上220多种蓝牙耳机,以下是我们针对跑步和锻炼的最佳耳机选择建议: 1、南卡Runner P…