《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 cnblogs.com/sunhongleibibi/p/12024386.html 「Mr.GaO」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

通过konga连接kong实现API接口代理

前言

之前已经对Kong的API做了学习理解,从本文开始,我们将学习如何使用KONG实现API接口代理。为此,您首先需要添加服务;即Kong用来指代其管理的上游API和微服务的名称。

本文中,我们将创建一个指向Mockbin API的服务进行学习测试。

1. ADD NEW SERVICE

[SERVICE]:
抽象层面的服务,他可以直接映射到一个物理服务 (host 指向 ip + port),也可以指向一个 upstream 来做到负载均衡。通俗说,这个service就是后台访问接口配置。

导航到SERVICES页面并添加ADD NEW SERVICE

字段说明

Url参数是一个简化参数,用于一次性添加protocol,host,port和path。另外不要把SERVICE当作后端的具体API,要把它当作一个大的服务,该服务下面有多个API(endpoint or route)。所以创建服务的时候填上该服务的域名就行了。当然也可以是一个带pathUrl,这样每个关联的API (ROUTE)会路由到该path上。

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

添加成功返回SERVICES界面,查看添加的Services信息,两种查看方式:

2. ADD ROUTE

[ROUTE]:
路由的抽象,他负责将实际的 request 映射到 service

返回SERVICES界面,选择example-service服务

选择Routes,然后ADD ROUTE

字段说明:

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

添加成功返回SERVICES界面,点击Routes,查看路由。
又或者,可以从左侧ROUTES导航进入查看路由。

3. 验证API 代理

浏览器验证

Kong API需要通过Routes规则中配置的hosts or path对请求进行API调度控制。

由于我们Routes规则中配置的hosts是虚拟域名,因此,我们需要在本地及服务器hosts列表中添加dns解析,这样在浏览器才可以携带host请求信息去正常访问Kong API。

“WIN +R 输入drivers”,调出hosts
10.122.45.97 test.example.com

请求kong api

$ curl -i -X GET \
--url http://localhost:8000/request \
--header 'Host: test.example.com'

kong使用Admin API实现接口代理

请参阅官方文档

1. 使用Admin API添加Service

$ curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service-2' \
--data 'url=http://mockbin.org'

2. 为Service添加Route

$ curl -i -X POST \
--url http://localhost:8001/services/example-service-2/routes \
--data 'name=test2-api-proxy' \
--data 'hosts[]=test2.example.com' \
--data 'paths[]=/request' \
--data 'strip_path=false'

3. 验证API 代理

我们先查看一下service对应的route信息

$ curl -i -X GET --url http://localhost:8001/services/example-service-2/routes
# 返回数据
{
"updated_at": 1576119679,
"created_at": 1576119679,
"strip_path": false,
"snis": null,
"hosts": [
"test2.example.com"
],
"name": "test2-api-proxy",
"methods": null,
"sources": null,
"preserve_host": false,
"regex_priority": 0,
"service": {
"host": "mockbin.org",
"created_at": 1576118600,
"connect_timeout": 60000,
"id": "23909fa2-04ae-4f45-ab33-184098dce8ac",
"protocol": "http",
"name": "example-service-2",
"read_timeout": 60000,
"port": 80,
"path": null,
"updated_at": 1576118600,
"retries": 5,
"write_timeout": 60000,
"tags": null,
"extras": {}
},
"paths": [
"/request"
],
"destinations": null,
"id": "5906757c-a0c5-4a41-a1a5-723658bc93f1",
"protocols": [
"http",
"https"
],
"tags": null
}

验证Admin API 代理结果:

$ curl -i -X GET \
--url http://localhost:8000/request \
--header 'Host: test2.example.com'
文章目录
  1. 1. 通过konga连接kong实现API接口代理
    1. 1.1. 1. ADD NEW SERVICE
    2. 1.2. 2. ADD ROUTE
    3. 1.3. 3. 验证API 代理
      1. 1.3.1. 浏览器验证
      2. 1.3.2. 请求kong api
  2. 2. kong使用Admin API实现接口代理
    1. 2.1. 1. 使用Admin API添加Service
    2. 2.2. 2. 为Service添加Route
    3. 2.3. 3. 验证API 代理