通过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'

[sleepy↓]

kong配置service和route实现简单API代理的更多相关文章

  1. KONG -- 配置 service 并添加 key-auth

    默认情况下, KONG 监听下面几个端口: 8000   这个端口用于监听客户端的 HTTP 请求,并转发给上游服务 8443   这个端口用于监听客户端的 HTTPS 请求,并转发给上游服务 800 ...

  2. kong网关: service+route+upstream

    对于刚开始学习kong网关,总是一脑子浆糊迷迷糊糊.虽然已经安装好,但却不知道接下来如何下手, 因为包含项太多:service.routes.upstream.consumer.plugins等等.一 ...

  3. kong配置upstream实现简单的负载均衡

    目录 通过konga实现 1. 配置upstream 2. 配置Service发布 3. 配置Route,匹配规则 4. 验证结果 通过 Kong Admin API实现 1. 配置upstream ...

  4. Kong配置参考

    kong配置的官网说明:https://docs.konghq.com/1.0.x/configuration/ 1. 配置加载 如果您通过其中一个官方软件包安装了Kong,Kong会附带默认配置文件 ...

  5. Update-Package : Unable to load the service index for source https://api.nuget.org/v3/index.json.

    由于更改了项目"属性"的"目标框架"(原来的框架是".NET Frameword4.5"改为了".NET Frameword4&q ...

  6. ServiceStack Web Service 创建与调用简单示列

    目录 ServiceStack 概念 ServiceStack Web Service 创建与调用简单示列 上篇文章介绍了ServiceStack是什么,本章进入主题,如何快速简单的搭建Service ...

  7. struts2+hibernate+spring配置版框架搭建以及简单测试(方便脑补)

    为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->M ...

  8. TopShelf 自动配置Service测试

    在开发中经常会遇到后台定时处理数据和任务的情况,处理这些事情大概有以下几种方案: 1.使用数据库的job功能.优点是在数据库中可以完成的就在数据库中完成,配置等基础设施数据库都提供,简单快捷.缺点是如 ...

  9. HDFS基本命令行操作及上传文件的简单API

    一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据 ...

随机推荐

  1. VirtualBox安装配置CentOS7(含网络连接配置)

    最近需要用到CentOS7,特地在虚拟机上安装一遍,中间走了很多弯路,特地在此处进行记录 前置条件: 1.本地完成Oracle VM VirtualBox,我安装的是6.1版本 2.下载CentOS安 ...

  2. Go语言网络通信---TCP通信上传一个小文件

    server: package main import ( "fmt" "net" "os" ) func SHandleError(err ...

  3. GO语言基础---值传递与引用传递

    package main import ( "fmt" ) /* 值传递 函数的[形式参数]是对[实际参数]的值拷贝 所有对地址中内容的修改都与外界的实际参数无关 所有基本数据类型 ...

  4. C# MVC(File)控件多张图片上传加预览

    刚来公司实习,老板叫我写一个积分商城网站.用的是公司的框架结构搭建的后台,所以后台的图片上传不需要自己写.但是前台的评价图片就需要自己手写了,在网上找了很多代码发现都用不了.问了很多人也都没有实现! ...

  5. 浅谈:Redis持久化机制(二)AOF篇

    浅谈:Redis持久化机制(二)AOF篇 ​ 上一篇我们提及到了redis的默认持久化方式RDB,是一种通过存储快照数据方式持久化的机制,它在宕机后会丢失掉最后一次更新RDB文件后的数据,这也是由于它 ...

  6. GStreamer跨平台多媒体框架

    GStreamer跨平台多媒体框架 Gstreamer基本概念 GStreamer是用于构造媒体处理组件图的库.它支持的应用程序范围从简单的Ogg / Vorbis回放,音频/视频流到复杂的音频(混合 ...

  7. 使用Tensorize评估硬件内部特性

    使用Tensorize评估硬件内部特性 这是有关如何在TVM中执行张量的入门文档. 通过使用调度原语tensorize,人们可以用相应的内部函数代替计算单元,从而轻松利用handcrafted mic ...

  8. python_selenium_PO模式下显示等待、隐式等待封装,结合Excel读取元素可取默认等待时间配置

    basepage中等待的封装 def implicitly_wait(self): self.driver.implicitly_wait(5)def wait(self): time.sleep(5 ...

  9. JAVA 进行图片中文字识别(准确度高)!!!

    OCR 识别文字项目 该项目 可以进行两种方式进行身份证识别 1. 使用百度接口 1.1 application-dev.yml配置 ocr: # 使用baiduOcr 需要有Ocr服务器 使用百度需 ...

  10. 尚硅谷Java——宋红康笔记【day25-day29】

    day25 Map接口 一.Map的实现类的结构: |----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) |----HashMap:作为Map的主要实现 ...