kong - SERVICE API, ROUTE路由, API对象, CONSUMER消费者, 入门示例 Linux教程


# SERVICE API 详解

服务(SERVICE)实体,正如其名称所示,是您自己的UPSTREAM服务的抽象。服务的示例将会是数据转换微服务、计费API等。服务的主要属性是它的URL(在这里,Kong应该代理流量),它可以被设置为单个字符串,或者通过单独指定其协议、主机、端口和路径。服务与路由相关联(服务可以有许多与之相关联的路由)。路由是在Kong的入口点,并定义了匹配客户端请求的规则。一旦匹配了路由,Kong就会将请求委托给它的相关服务。


1、添加service

请求地址:/service/
请求方法:POST
请求主体:

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

2、查找service

请求地址:/services/{name or id}
请求方法:GET
PATH参数:

属性描述
name or id(必填)检索的唯一标识符或服务名称。

请求地址:/routes/{route id}/service
PATH方法:GET
请求参数:

属性描述
route id(必填)属于要检索的服务的路由的唯一标识符。

3、查找service列表

请求地址:/services/
请求方法:GET
请求参数:

属性描述
offset(可选)用于分页的游标。偏移量是定义列表中的位置的对象标识符。
size(可选,默认是100 max是1000)每个页面返回的对象数量的限制。

4、更新service

请求地址:/services/{name or id}
请求方法:PATCH
PATH参数:

属性描述
name or id(必填)要更新的服务的id或name属性。

请求地址:/routes/{route id}/service
请求方法:PATCH
PATH参数:

属性描述
route id(必填)要更新服务的路由的id属性。

请求主体:同1、新增service

5、删除service

请求地址:/services/{name or id}
请求方法:DELETE
PATH参数:

属性描述
name or id(必填)要删除的服务的id或name属性。


# ROUTE路由

Route实体定义匹配客户端请求的规则。每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由。每一个匹配给定路线的请求都将被提交给它的相关服务。路由和服务的组合(以及它们之间的关注点分离)提供了一种强大的路由机制,可以在Kong中定义细粒度的入口点,从而引导你的访问到不同upstream服务。


ROUTE API 详解:

1、添加route

请求地址:/routes/
请求方法:POST
请求主体:

属性描述
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,使用数组。
strip_path(可选)当通过一条路径匹配一条路径时,从upstream请求URL中剥离匹配的前缀。默认值为true。
preserve_host(可选)当通过一个主机域名匹配一条路由时,在upstream请求头中使用请求主机头。默认设置为false,upstream主机头将是服务主机的主机头。
service这条路线的服务是相关的。这是路由代理通信的地方。用表单编码参数是service.id=<service_id>。如果是JSON,则使用"service":{"id":"<service_id>"}

2、检索route

请求地址:/routes/{id}
请求方法:GET
PATH参数:

属性描述
id(必填)检索路由的id属性。

3、route列表

请求地址:/routes
请求方法:GET
请求参数:

属性描述
offset(可选)用于分页的游标。偏移量是定义列表中的位置的对象标识符。
size(可选,默认是100 max是1000)每个页面返回的对象数量的限制。

4、列出与service相关的route

请求地址:/services/{service name or id}/routes
请求方法:GET
PATH参数:

属性描述
service name or id(必填)要检索路由的服务的id或name属性。当使用这个API时,只有属于指定服务的路由才会被列出。

4、更新route

请求地址:/routes/{id}
请求方法:PATCH
PATH参数:

属性描述
id(必填)更新路由的id属性。

请求主体:同 1、添加route

4、删除route

请求地址:/routes/{id}
请求方法:DELETE
PATH参数:

属性描述
id(必填)删除路由的id属性。


# API对象

API对象描述了一个由Kong公开的API。当使用者从代理端口调用它时,Kong需要知道如何检索API。每个API对象必须指定主机、uri和方法的一些组合。Kong将把所有对API的请求委托给指定的upstream URL。


1、添加API

请求地址:/apis/
请求方法:POST
请求主体:

属性描述
nameAPI的名称.
hosts(半可选)指向您的API的逗号分隔的域名列表。例如:example.com。至少应该指定主机、uri或方法中的一个。
uris(半可选)一个逗号分隔的uri前缀列表,指向您的API。例如: /my-path。至少应该指定主机、uri或方法中的一个。
methods(半可选)一个以逗号分隔的HTTP方法列表,指向您的API。例如: GET,POST。至少应该指定主机、uri或方法中的一个。
upstream_url指向您的API服务器的基本目标URL。这个URL将用于代理请求。例如: https://example.com.
strip_uri(可选)当通过一个URI前缀匹配一个API时,要从upstream URI中去掉匹配的前缀。默认值:真的。
preserve_host(可选)当通过一个主机域名匹配一个API时,请确保请求主机头被转发到upstream服务。默认false,upstream主机头将从配置的upstream_url中提取出来。
retries(可选)在代理失败的情况下执行的重试次数。默认值是5。
upstream_connect_timeout(可选)建立连接到upstream服务的连接的超时时间。默认为60000。
upstream_send_timeout(可选)在两个连续的写操作之间的时间间隔内,将请求发送到upstream服务的默认值为60000。
upstream_read_timeout(可选)在两个连续读取操作之间的毫秒间隔,将请求发送到upstream服务的默认值为60000。
https_only(可选)如果您希望仅通过HTTPS在适当的端口上提供API(默认情况下是8443),那么就可以启用该API。默认值:false。
http_if_terminated(可选)在执行HTTPS通信时,考虑一下X-Forwarded-Proto header. 默认: false

注:通用但非标准的HTTP头(通常,非标准的头域都是用“X-”开头)

X-Forwarded-Proto:记录一个请求一个请求最初从浏览器发出时候,是使用什么协议。因为有可能当一个请求最初和反向代理通信时,是使用https,但反向代理和服务器通信时改变成http协议,这个时候,X-Forwarded-Proto的值应该是https

2、检索API

请求地址:/apis/{name or id}
请求方法:GET
PATH参数:

属性描述
name or id(必填)要检索的API的唯一标识符或名称。

3、API列表

请求地址:/apis/
请求方法:GET
请求参数:

属性描述
id(可选)基于api id字段的过滤器。
name(可选)基于api name字段的过滤器。
upstream_url(可选)基于api upstream_url字段的过滤器。
retries(可选)基于api retries字段的过滤器。
offset(可选)用于分页的游标。偏移量是定义列表中的位置的对象标识符。
size(可选,默认是100)每个页面返回的对象数量的限制。

4、更新API

请求地址:/apis/{name or id}
请求方法:GET
PATH参数:

属性描述
name or id(必填)要更新的API的唯一标识符或名称。

请求主体:与 1、添加API 请求主体相同

5、更新或创建API

请求地址:/apis/
请求方法:PUT
请求主体:与 1、添加API 请求主体相同

PUT接口的行为如下:如果请求的payload(AJAX请求)不包含实体的主键(APIs的id),则该实体将使用给定payload创建。如果请求的payload确实包含一个实体的主键,有效负载将“替换”给定主键指定的实体。如果主键不是现有实体的,则不会返回404。

6、删除API

请求地址:/apis/{name or id}
请求方法:DELETE
PATH参数:

属性描述
name or id(必填)唯一的标识符或要删除的API的名称。

# CONSUMER消费者

消费者对象表示服务的消费者或使用者。您既可以依赖于Kong作为主数据存储,也可以使用数据库映射消费者列表,以保持Kong和现有主数据存储之间的一致性。


CONSUMER API 详解:

1、创建Consumer

请求地址:/consumers/
请求方法:POST
请求表单参数:

属性描述
username(半可选)用户的唯一用户名。usernamecustom_id二选一。
custom_id(半可选)消费者存储唯一ID - 用于现有数据库中的用户进行映射。usernamecustom_id二选一。

2、检索Consumer

请求地址:/consumers/{username or id}
请求方法:GET
PATH参数:

属性描述
username or id(必选)要检索的消费者的唯一标识符或用户名。

3、Consumer列表

请求地址:/consumers/
请求方法:GET
请求参数:

属性描述
id(可选)基于消费者id字段的过滤器。
custom_id(可选)基于消费者custom_id字段的过滤器。
username(可选)基于消费者username字段的过滤器。
offset(可选)用于分页的游标。偏移量是定义列表中的位置的对象标识符。
size(可选,默认是100)每个页面返回的对象数量的限制。

4、更新Consumer

请求地址:/consumers/{username or id}
请求方法:PATCH
PATH参数:

属性描述
username or id(必选)更新的唯一标识符或用户名。

请求主体:同1、添加Consumer

5、更新或创建Consumer

请求地址:/consumers/
请求方法:PUT
请求主体:同1、添加Consumer

6、删除Consumer

请求地址:/consumers/{username or id}
请求方法:DELETE
PATH参数:

属性描述
username or id(必选)更新的唯一标识符或用户名。


# 入门示例

先做一个最简单的转发。当访问8000端口时,自动转发到http://api01.bitspaceman.com:8000/news/qihoo

1、先创建两个Service:

curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=example-service' \
  --data 'url=http://api01.bitspaceman.com:8000/news/qihoo'
curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=163-service' \
  --data 'url=http://3g.163.com/touch/jsonp/sy/recommend'

2、然后,添加两个Route:

curl -i -X POST \
  --url http://localhost:8001/services/example-service/routes \
  --data 'hosts[]=news.com'
curl -i -X POST \
  --url http://localhost:8001/services/163-service/routes \
  --data 'paths[]=/news'  \
  --data 'hosts[]=news.com'

3. 最后访问一下:

http://192.168.1.12:8000?apikey=123

http://192.168.1.12:8000/news/0-9.html


# 入门示例

先来个简单的示例:

1、添加一个服务(service)

curl -i -X POST \

--url http://192.168.1.12:8001/services/ \

--data 'name=example-service' \

--data 'url=http://mockbin.org'

2、为服务添加一个路由(route)

说明:一个IP地址可以对应多个域名,服务器根据Host这一行中的值来确定本次请求的是哪个具体的网站。

curl -i -X POST \

--url http://192.168.1.12:8001/services/example-service/routes \

--data 'hosts[]=example.com'

3、使用Kong做一个请求转发

curl -i -X GET \

--url http://192.168.1.12:8000/ \

--header 'Host: example.com'



签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回