微服务Kong(八)——代理参考

Kong侦听四个端口的请求,默认情况是:

  8000:此端口是Kong用来监听来自客户端的HTTP请求的,并将此请求转发到您的上游服务。这也是本教程中最主要用到的端口。

  8443:此端口是Kong监听HTTP的请求的端口。该端口具有与8000端口类似的行为,但是它只监听HTTPS的请求,并不会产生转发行为。可以通过配置文件来禁用此端口。

  8001:用于管理员对KONG进行配置的端口。

  8444:用于管理员监听HTTPS请求的端口。

  在本文中,我们将介绍Kong的路由功能,并详细说明8000端口上的客户端请求如何根据请求头、URI或HTTP被代理到配置中的上游服务。

基础术语:

  API:指Kong的API实例。您可以通过管理员身份配置您的API。

  Plugin:他指的是Kong的“插件”,它们是在代理生命周期中运行的业务逻辑。可以通过管理员身份进行全局配置,也可针对每个API进行分别配置。

  Client:指向Kong的代理端口发出请求的下游客户,即第三方客户端。

  Upstream service:指的是位于Kong后面的您自己的API服务,客户端请求被转发的最终目的地。nginx中的上游服务器。

概述

  从整体上来看,Kong侦听其配置的代理端口上的HTTP请求(默认为8000),并识别正在请求的是哪个上游服务,然后运行在该API上的配置插件(如果没有则不执行),并将上游的HTTP请求转发到您自己的API服务。

  当客户端向代理端口发出请求时,Kong将根据API在KONG里的配置情况,来决定将请求传入到哪个上游服务中。 您可以在KONG里对每个API添加许多属性,但是有三个是必须要配置的,他们是hosts、uris和methods。如果KONG无法确定API请求的上游服务地址,则会返回一下内容:

HTTP/1.1 404 Not Found
Content-Type: application/json
Server: kong/<x.x.x>

{
    "message": "no API found with those values"
}

  回忆下:如何向KONG添加一个API

    在之前的添加一个API的指南中,有学习过如何使用8001端口,在KONG服务中添加一个API的操作:

$ curl -i -X POST http://localhost:8001/apis/ \
    -d ‘name=my-api‘     -d ‘upstream_url=http://my-api.com‘     -d ‘hosts=example.com‘     -d ‘uris=/my-api‘     -d ‘methods=GET,HEAD‘
HTTP/1.1 201 Created
...

    该代码表示用户成功在Kong里注册一个名为“my-api”的API,可通过访问“http://example.com”发送请求。它还指定了一些HTTP请求的属性,但请注意,这里有且只有一个HOST,URIS和METHODS属性。当完成此配置后,以后所有的符合此host、uris和methods的请求,都将由KONG来代理过滤转发。Kong是一个透明的代理,它会将请求转发给您的上游服务,除了添加诸如Connection之类的各种标题。

  路由功能

    现在我们来讨论一下,一个HTTP请求是如何与API配置属性(如host、uris、methods)相匹配的。需要注意的是,这三个字段(h、u、m)都是可选的,但至少要有一个被指定。对于客户端请求与API的匹配:

    · 请求必须包含所有已配置的字段

    · 请求中的字段值必须与至少一个已配置的值相匹配(尽管字段配置接受一个或多个值,请求只需要考虑匹配其中之一)

    让我们来看几个例子。请看如下一个API配置:

{
    "name": "my-api",
    "upstream_url": "http://my-api.com",
    "hosts": ["example.com", "service.com"],
    "uris": ["/foo", "/bar"],
    "methods": ["GET"]
}

    与该API相匹配的一些请求可能是:

GET /foo HTTP/1.1
Host: example.com

GET /bar HTTP/1.1
Host: service.com

GET /foo/hello/world HTTP/1.1
Host: example.com

    以上的三个请求都满足API定义中设置的条件。但是,以下的几个请求则与配置的条件不匹配:

GET / HTTP/1.1
Host: example.com

POST /foo HTTP/1.1
Host: example.com

GET /foo HTTP/1.1
Host: foo.com

    以上的三个请求只满足两个配置条件。第一个请求的URI不匹配,第二个请求的HTTP方法不匹配,第三个请求的Host头不匹配。

    现在我们了解了hosts、uris、methods是如何一起工作的。下面我们来逐个了解他们是如何单独工作的。

    1. 请求的HOST头:

      

  

时间: 2024-12-23 15:14:31

微服务Kong(八)——代理参考的相关文章

微服务Kong(九)——认证参考

客户端访问上游API服务,通常由Kong的认证插件及其配置参数来控制. 通用认证 一般情况下,上游API服务都需要客户端有身份认证,且不允许错误的认证或无认证的请求通过.认证插件可以实现这一需求.这些插件的通用方案/流程如下: 1.向一个API或全局添加AUTH插件(此插件不作用于consumers): 2.常见一个consumer对象: 3.为consumer提供指定的验证插件方案的身份验证凭据: 4.现在,只要有请求进入Kong,都将检查其提供的身份验证凭据(取决于auth类型),如果该请求

微服务Kong(七)——CLI参考

KONG提供了一套CLI(命令行界面)命令,您可以通过它来启动.停止和管理您的Kong实例.CLI管理您的本地节点(如在当前机器上). 全局配置 所有命令都采用一组指定的可选标志作为参数: --help:显示命令行帮助信息 --v:启动详情模式 --vv:启动debug模式(noisy) 可用的命令符 kong check: Usage: kong check <conf> Check the validity of a given Kong configuration file. <c

微服务Kong(四)——添加插件

在本节中,您将学习到,如何配置使用KONG的插件来管理您的API.KONG的核心原则之一就是通过插件来实现API的扩展.插件可以使您更为简单的扩展和管理您的API. 在以下的步骤中,您将通过配置key-auth插件为您的API添加一个认证的功能.在添加此插件之前,您的所有API都被将代理到上游头.添加并配置此插件后,只有具有正确API密钥的请求会被代理 - 所有其他请求将被KONG拒绝,从而保护您的上游服务免受未经授权的使用,从而实现权限认证功能. 1. 为您的API配置 key-auth 插件

一个可供中小团队参考的微服务架构技术栈

一个可供中小团队参考的微服务架构技术栈 聊聊架构 2018-05-07 作者 杨波 作者 |  杨波编辑 |  张浩 近年,Spring Cloud 俨然已经成为微服务开发的主流技术栈,在国内开发者社区非常火爆.我近年一直在一线互联网公司(携程,拍拍贷等)开展微服务架构实践,根据我个人的一线实践经验和我平时对 Spring Cloud 的调研,我认为 Spring Cloud 技术栈中的有些组件离生产级开发尚有一定距离.比方说 Spring Cloud Config 和 Spring Cloud

微服务实践(总)-原文

本系列文章为 dockone.io 首发,转载请标明出处,以示尊重!! http://dockone.io/people/hokingyang   希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂单体式应用,日常开发和部署经验非常缓慢和痛苦,而微服务看起来是远方一个极乐世界.幸运的是,有可以参考的脱离苦海的策略,本篇文章中,我将描述如何逐步将单体式应用迁移到微服务架构. 本系列七篇文章列表如下: 微服务实战

微服务技术选型之路

本文以笔者个人经历讲述关于微服务方面的技术选型和相关知识点.微服务模式的项目从初建到上线部署应用,每一个环节都会涉及到相当多的技术细节(上线后的性能调优更需要).本文着重介绍一套微服务搭建流程中面临的一些技术选型,战略性的技术方案及相关技术的简要介绍,不做每一项技术的深入说明. ?微服务简介 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上.微服务也指一种种松耦合的.有一定的有界上下文的面向服务架构. 微服务是系统架构上的一种设计

微服务架构下的数据一致性:可靠事件模式

主页:http://www.howardliu.cn/ 博客:微服务架构下的数据一致性:可靠事件模式 在<微服务架构下的数据一致性:概念及相关模式>中介绍了在微服务中实现数据一致性的三种方式,包括可靠事件模式.业务补偿模式.TCC模式.本文重点说一下可靠事件投递. 1. 可靠事件模式 可靠事件模式属于事件驱动架构,微服务完成操作后向消息代理发布事件,关联的微服务从消息代理订阅到该事件从而完成相应的业务操作,关键在于可靠事件投递和避免事件重复消费. 可靠事件投递有两个特性:1)每个服务原子性的完

微服务实践(五):微服务的事件驱动数据管理

[编者的话]本文是使用微服务创建应用系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点:第二和第三篇描述了微服务架构模块间通讯的不同方面:第四篇研究了服务发现中的问题.本篇中,我们从另外一个角度研究一下微服务架构带来的分布式数据管理问题. 1.1 微服务和分布式数据管理问题 单体式应用一般都会有一个关系型数据库,由此带来的好处是应用可以使用 ACID transactions,可以带来一些重要的操作特性: 原子性 – 任何改变都是原子性的 一致性 – 数据库状态一直是

13个最热开源微服务 Java 框架

经过长期发展,Java 最终在服务器领域找到一席之地,不同芯片架构和操作系统对"一次编写,到处运行"的承诺很感兴趣.与此同时,JavaScript 一直在挑战 Java 的地位,前者因为高吞吐量和速度快接管了大批网络流量.Node.js 不仅提高了速度和资源效率,还简化了客户端和服务器运行代码的复杂度. 尽管竞争激烈,许多负责微服务架构开发的团队依旧在继续使用 Java,这可能有多方面原因,比如 Java 经过多年测试,Sun 创建了稳定的虚拟机,Oracle 大力培养和支持,用户使用