服务和路由

news2024/11/14 21:18:30

Kong Gateway管理员使用对象模型来定义其期望的流量管理策略。在该模型中,两个重要的对象是服务(services)和路由(routes)。服务和路由被协调地配置,以定义请求和响应在系统中经过的路由路径。

下面的高级概述显示请求到达路由(routes),并将其转发到服务(services),响应则沿相反路径进行返回:

服务是什么 

在Kong Gateway中,服务是对现有上游应用程序的抽象。服务可以存储插件配置、策略等一系列对象,并且它们可以与路由关联。

在定义一个服务时,管理员需要提供一个名称和与上游应用程序的连接信息。连接细节可以在url字段中以单个字符串的形式提供,也可以单独提供协议、主机、端口和路径的值。

服务与上游应用程序之间存在一对多的关系,这使得管理员能够创建复杂的流量管理行为。

路由是什么

 路由是指向上游应用程序内部资源的路径。将路由添加到服务中可以允许对底层应用程序进行访问。在Kong Gateway中,路由通常映射到通过Kong Gateway应用程序公开的端点。路由还可以定义匹配请求到相关服务的规则。因此,一个路由可以引用多个端点。基本的路由应该具有名称、路径或路径列表,并引用现有的服务。

您还可以使用以下选项配置路由:

  • 协议(Protocols):用于与上游应用程序进行通信的协议。
  • 主机(Hosts):与路由匹配的域名列表。
  • 方法(Methods):与路由匹配的HTTP方法。
  • 头部(Headers):请求头部中预期出现的值列表。
  • 重定向状态码(Redirect status codes):HTTPS状态码。
  • 标签(Tags):可选的一组字符串,用于对路由进行分组。

管理服务和路由 

以下教程将通过Kong Gateway管理员API来管理和测试服务和路由。Kong Gateway还提供其他配置管理选项,包括Kong Konnect和decK。

在本教程的这个部分中,您将完成以下步骤:

  • 创建一个指向httpbin API的服务,该API提供了对HTTP请求和响应进行测试的功能。
  • 通过提供一个URL路径来定义路由,客户端可以在运行中的Kong Gateway上访问该路径。
  • 使用新的httpbin服务来回显一个测试请求,帮助您了解Kong Gateway是如何代理API请求的。

管理服务

 1. 创建服务

要添加一个新的服务,请向Kong Gateway的Admin API的/services路由发送一个POST请求:

curl -i -s -X POST http://localhost:8001/services \
 --data name=example_service \
 --data url='http://httpbin.org'

这个请求指示Kong Gateway创建一个新的服务,映射到上游URL http://httpbin.org。

在我们的示例中,请求体包含两个字符串:

  • name: 服务的名称
  • url: 用于填充服务的主机、端口和路径属性的参数

如果您的请求成功,您将从Kong Gateway收到一个201的响应头,确认您的服务已创建,响应正文将类似于:

{
 "host": "httpbin.org",
 "name": "example_service",
 "enabled": true,
 "connect_timeout": 60000,
 "read_timeout": 60000,
 "retries": 5,
 "protocol": "http",
 "path": null,
 "port": 80,
 "tags": null,
 "client_certificate": null,
 "tls_verify": null,
 "created_at": 1661346938,
 "updated_at": 1661346938,
 "tls_verify_depth": null,
 "id": "3b2be74e-335b-4f25-9f08-6c41b4720315",
 "write_timeout": 60000,
 "ca_certificates": null
}

 没有在创建请求中显式提供的字段将根据当前Kong Gateway配置自动赋予默认值。

2. 查看服务配置

当您创建一个服务时,Kong Gateway会为它分配一个唯一的ID,如上面的响应中所示。id字段或创建服务时提供的名称可以用于在后续请求中标识该服务。这是服务的URL,其形式为/services/{服务名称或ID}。

要查看服务的当前状态,请向服务URL发送一个GET请求。

curl -X GET http://localhost:8001/services/example_service

 一个成功的请求将在响应正文中包含您的服务的当前配置,如以下片段所示:

{
 "host": "httpbin.org",
 "name": "example_service",
 "enabled": true,
 ...
}

 3. 更新服务

可以通过向服务URL发送PATCH请求来动态更新现有的服务配置。

要将服务的重试次数从5更改为6,请发送以下PATCH请求:

curl --request PATCH \
 --url localhost:8001/services/example_service \
 --data retries=6

 响应正文包含了完整的服务配置,包括更新后的值:

{
 "host": "httpbin.org",
 "name": "example_service",
 "enabled": true,
 "retries": 6,
 ...
}

 4. 列出服务

 您可以通过向基本的/services URL发送GET请求来列出所有当前的服务。

curl -X GET http://localhost:8001/services

Admin API文档提供了完整的服务更新规范。

您还可以通过在浏览器中导航到以下URL来查看Kong Manager UI中的服务配置:

Kong Manager OSS:http://localhost:8002/services
Kong Manager Enterprise:http://localhost:8002/default/services,其中default是工作区名称。

管理路由

1. 创建路由 

路由定义了Kong Gateway如何代理请求。您可以通过向服务URL发送POST请求来创建与特定服务关联的路由。

在/mock路径上配置一个新的路由,将流量定向到之前创建的example_service服务:

curl -i -X POST http://localhost:8001/services/example_service/routes \
 --data 'paths[]=/mock' \
 --data name=example_route

 如果路由成功创建,API将返回一个201响应代码和一个类似于以下的响应正文:

{
 "paths": [
   "/mock"
 ],
 "methods": null,
 "sources": null,
 "destinations": null,
 "name": "example_route",
 "headers": null,
 "hosts": null,
 "preserve_host": false,
 "regex_priority": 0,
 "snis": null,
 "https_redirect_status_code": 426,
 "tags": null,
 "protocols": [
   "http",
   "https"
 ],
 "path_handling": "v0",
 "id": "52d58293-ae25-4c69-acc8-6dd729718a61",
 "updated_at": 1661345592,
 "service": {
   "id": "c1e98b2b-6e77-476c-82ca-a5f1fb877e07"
 },
 "response_buffering": true,
 "strip_path": true,
 "request_buffering": true,
 "created_at": 1661345592
}

2. 查看路由配置

与服务一样,当您创建一个路由时,Kong Gateway会为其分配一个唯一的ID,如上面的响应中所示。id字段或创建路由时提供的名称可以用于在后续请求中标识路由。路由 URL 可以采用以下两种形式之一:

  • /services/{服务名称或ID}/routes/{路由名称或ID}
  • /routes/{路由名称或ID}

要查看example_route路由的当前状态,请向路由URL发送一个GET请求:

curl -X GET http://localhost:8001/services/example_service/routes/example_route

 响应正文包含了您的路由的当前配置:

{
 "paths": [
   "/mock"
 ],
 "methods": null,
 "sources": null,
 "destinations": null,
 "name": "example_route",
 "headers": null,
 "hosts": null,
 "preserve_host": false,
 "regex_priority": 0,
 "snis": null,
 "https_redirect_status_code": 426,
 "tags": null,
 "protocols": [
   "http",
   "https"
 ],
 "path_handling": "v0",
 "id": "189e0a57-205a-4f48-aec6-d57f2e8a9985",
 "updated_at": 1661347991,
 "service": {
   "id": "3b2be74e-335b-4f25-9f08-6c41b4720315"
 },
 "response_buffering": true,
 "strip_path": true,
 "request_buffering": true,
 "created_at": 1661347991
}

 3. 更新路由

与服务一样,可以通过向路由URL发送PATCH请求来动态更新路由。

标签是一个可选的字符串集合,可以与路由关联用于分组和过滤。您可以通过向服务端点发送PATCH请求并指定一个路由来分配标签。

通过为路由分配一个值为tutorial的标签来更新路由:

curl --request PATCH \
 --url localhost:8001/services/example_service/routes/example_route \
 --data tags="tutorial"

上面的示例使用了服务和路由名称字段作为路由URL。

如果成功应用了标签,响应正文将包含以下JSON值:

...
"tags":["tutorial"]
...

 4. 列出路由

Admin API还支持列出当前配置的所有路由:

curl http://localhost:8001/routes

 该请求将返回HTTP 200状态码和一个JSON响应正文,其中包含在此Kong Gateway实例上配置的所有路由的对象数组。您的响应应该如下所示:

{
 "next": null,
 "data": [
   {
     "paths": [
       "/mock"
     ],
     "methods": null,
     "sources": null,
     "destinations": null,
     "name": "example_route",
     "headers": null,
     "hosts": null,
     "preserve_host": false,
     "regex_priority": 0,
     "snis": null,
     "https_redirect_status_code": 426,
     "tags": [
       "tutorial"
     ],
     "protocols": [
       "http",
       "https"
     ],
     "path_handling": "v0",
     "id": "52d58293-ae25-4c69-acc8-6dd729718a61",
     "updated_at": 1661346132,
     "service": {
       "id": "c1e98b2b-6e77-476c-82ca-a5f1fb877e07"
     },
     "response_buffering": true,
     "strip_path": true,
     "request_buffering": true,
     "created_at": 1661345592
   }
 ]
}

Admin API文档中提供了管理路由对象的完整规范。

您还可以通过在浏览器中导航到以下URL来查看Kong Manager UI中的路由配置:http://localhost:8002/default/routes,其中default是工作区名称。

代理请求

Kong是一个API网关,它接收来自客户端的请求,并根据当前的配置将它们路由到适当的上游应用程序。使用之前配置的服务和路由,您现在可以通过http://localhost:8000/mock访问https://httpbin.org/。

默认情况下,Kong Gateway的Admin API在端口8001上监听管理请求,这有时被称为控制平面。客户端使用端口8000进行数据请求,这通常被称为数据平面。

Httpbin提供了一个/anything资源,它会将关于发送给它的请求的信息回复给客户端。通过Kong Gateway代理一个请求到/anything资源上。

curl -X GET http://localhost:8000/mock/anything

 您应该会看到类似以下的响应:

{
 "startedDateTime": "2022-08-24T13:44:28.449Z",
 "clientIPAddress": "172.19.0.1",
 "method": "GET",
 "url": "http://localhost/anything",
 "httpVersion": "HTTP/1.1",
 "cookies": {},
 "headers": {
   "host": "httpbin.org",
   "connection": "close",
   "accept-encoding": "gzip",
   "x-forwarded-for": "172.19.0.1,98.63.188.11, 162.158.63.41",
   "cf-ray": "73fc85d999f2e6b0-EWR",
   "x-forwarded-proto": "http",
   "cf-visitor": "{\"scheme\":\"http\"}",
   "x-forwarded-host": "localhost",
   "x-forwarded-port": "80",
   "x-forwarded-path": "/mock/anything",
   "x-forwarded-prefix": "/mock",
   "user-agent": "curl/7.79.1",
   "accept": "*/*",
   "cf-connecting-ip": "00.00.00.00",
   "cdn-loop": "cloudflare",
   "x-request-id": "1dae4762-5d7f-4d7b-af45-b05720762878",
   "via": "1.1 vegur",
   "connect-time": "0",
   "x-request-start": "1661348668447",
   "total-route-time": "0"
 },
 "queryString": {},
 "postData": {
   "mimeType": "application/octet-stream",
   "text": "",
   "params": []
 },
 "headersSize": 588,
 "bodySize": 0
}

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

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

相关文章

【数据结构 05】双链表

一、原理 双链表又称双向链表&#xff0c;通常情况下是带头循环结构&#xff0c;在CSTL标准模板库中封装的<list.h>头文件就是带头双向循环链表。 特性&#xff1a;增删灵活且高效&#xff0c;支持随机增删但不支持随机访问 设计思路&#xff1a; 链表包含一个头节点h…

webassembly003 whisper.cpp的main项目-1

参数设置 /home/pdd/le/whisper.cpp-1.5.0/cmake-build-debug/bin/main options:-h, --help [default] show this help message and exit-t N, --threads N [4 ] number of threads to use during computation-p N, --processors …

Linux:进度条的创建

目录 使用工具的简单介绍&#xff1a; \r &#xff1a; fflush &#xff1a; 倒计时的创建&#xff1a; 倒计时的工作原理&#xff1a; 进度条的创建&#xff1a; 不同场景下、打印任意长度的进度条&#xff1a; main .c procbor.c 测试效果&#xff1a; 使用工具…

EasyExcel通用导入 | 简单封装

0. 前言&#xff1a;1. 基本思路&#xff1a;2. 调用代码&#xff1a; 0. 前言&#xff1a; 之前做了好几个导入&#xff0c;用EasyExcel每次都要定义监听器去处理&#xff0c;就想能不能做个通用的方式&#xff0c;如下 1. 基本思路&#xff1a; 导入无非主要就是参数校验和数…

TypeScript(八) number和string

1. TypeScript number 1.1. 描述 Number对象是原始数值的包装对象。 1.2.语法 var num new Number(value);;注意&#xff1a;如果一个参数值不能转换为一个数字&#xff0c;将返回NaN&#xff08;非数字值&#xff09;。 1.3. 对象属性 属性描述MAX_VALUE可表示的最大的数…

阿尔泰科技—创新解决农业环境监测难题!

引言 “农业是人类生活中不可或缺的重要领域&#xff0c;而农业环境的监测与保护对于农作物的生长和农业生产的可持续发展至关重要。为了解决农业环境参数监测的难题&#xff0c;阿尔泰科技提供了一套先进的解决方案&#xff0c;利用USB5630-D数据采集卡搭配传感器测试方案&a…

计算机毕业设计 | SpringBoot+vue学生成绩管理系统教务管理系统

1 需求分析 为了满足现代大学教学的需求&#xff0c;本章节将对教务系统平台的选课系统进行深入的需求分析。 1.1 功能模块需求概述 1.1.1 网页功能需求概述 本教务系统平台项目开发了电脑网页端&#xff0c;基于上海大学的教学计划&#xff0c;面向教师和学生两个不同的角…

二、防御保护---防火墙基础知识篇

二、防御保护---防火墙基础知识篇 一、什么是防火墙二、防火墙的发展史1.包过滤防火墙(一个严格的规则表)2.应用代理防火墙(每个应用添加代理)3.状态检测防火墙(首次检查建立会话表)3.入侵检测系统(IDS)-----网络摄像头4.入侵防御系统(IPS)-----抵御2-7层已知威胁5.防病毒网关(…

【解决方案_中国银行滑动拼图验证,只有拖动了滑块之后,才会显示背景框的验证码】

中国银行滑动拼图验证&#xff0c;只有拖动了滑块之后&#xff0c;才会显示背景框的验证码&#xff0c;怎么解决&#xff1f;&#xff1a; 答&#xff1a; 将目标元素显示出来就可以了。 第二条指令&#xff1a;第二条指令里面填&#xff1a;//*[id"dx_captcha_basic_co…

鸿蒙系统扫盲(七):勘误补充总结,收个尾

这是笔者鸿蒙扫盲系列的最后一篇了&#xff0c;准备对过去的六篇扫盲系列文章&#xff0c;错误的地方做一些勘误&#xff0c;并且补充更新一些朋友们感兴趣的知识&#xff0c;最后收个尾。 1.勘误&#xff0c;编译型语言和解释型语言 在鸿蒙系统扫盲&#xff08;五&#xff0…

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇2)

目录 T1工作在方式2时 T0工作在方式3时 四种工作方式的总结 定时计数器对输入信号的要求 定时计数器对的编程的一个要求 关于初值计算的问题 4种工作方式的最大定时时间的大小 关于编程方式的问题 实例分析 实例1 实例2 T1工作在方式2时 51单片机&#xff0c;有两个…

全新开源AI代码工具诞生!超越谷歌DeepMind旗下AlphaCode

‍ 听说&#xff0c;谷歌DeepMind开发出的AlphaCode&#xff0c;和上个月刚刚由Gemini推出的AlphaCode 2两位“老大哥”被超越了&#xff1f; 没错&#xff0c;全新开源人工智能代码生成工具AlphaCodium&#xff0c;诞生了&#xff01; 其开发不得不说受到了两位老大哥的启发…

MySQL行格式原理深度解析

MySQL中的行格式&#xff08;Row Format&#xff09;是指存储在数据库表中的数据的物理格式。它决定了数据是如何在磁盘上存储的&#xff0c;以及如何在查询时被读取和解析的。MySQL支持多种行格式&#xff0c;每种格式都有其特定的优点和适用场景。 提升编程效率的利器: 解析…

vector(顺序表)

vector容器就相当于一个顺序表&#xff0c;只不过他把一些功能分装到了容器里 常用接口及语法 构造&#xff1a;vectro<数据类型> 对象名 输出&#xff1a;和顺序表一样我们需要遍历打印&#xff0c;而不能直接用cout打印 对象.push_back () 尾插 对象.pop_back() 尾删…

3款最好用的tron钱包解读:TronLink,Ledger,Bitget钱包

电子钱包是用户连接到区块链网络的重要媒介。除了接收和发送功能外&#xff0c;它还可用于传输虚拟货币。它也是使用分散应用程序&#xff08;DApp&#xff09;的必要工具&#xff01;无论您是想在ON上使用以太坊&#xff0c;EOS还是任何DApp&#xff0c;您都必须先拥有钱包。因…

springboot2.7继承swagger knif4j

maven pom依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.4.0</version></dependency> yml配置 knife4j:enable: trueopenapi:title: …

C++ 入门(二)— 基础知识

文章目录 语句和程序的结构对象和变量变量赋值和初始化cout、cin 和 endl 语句和程序的结构 语句 语句是迄今为止 C 程序中最常见的指令类型。这是因为它们是 C 语言中最小的独立计算单元。在这方面&#xff0c;它们的行为很像自然语言中的句子。 C 中的大多数&#xff08;但…

在Windows11的WSL上运行Llama2-7b-chat 上

最近在玩大模型&#xff0c;玩了ChatGLM3感觉不过瘾&#xff0c;又去玩了Llama2&#xff08;在Windows上简直难的离谱&#xff09;&#xff0c;下边我讲为大家讲一下我的心路历程。 心路历程 第一天&#xff1a;GLM那么简单&#xff0c;有手就行啊&#xff0c;最近Llama2开源…

Android中下载 HAXM 报错 Intel® HAXM installation failed,如何解决?

最近在搭建 Flutter 环境&#xff0c;但是在 Android Studio 中安装 Virtual Device 时&#xff0c;出现了一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructio…

ES6.8.6 Java客户端发起 增删改查 query (bool)、update、delete

文章目录 环境测试数据增单个新增批量新增 删通过delete by api删除通过delete by query api删除删除索引中指定字段&#xff08;script&#xff09; 改单个修改update by api通过_bulk批量修改批量修改update by query api使用script脚本修改 查完全匹配&#xff08;term&…