Kong API Gateway 管理API详解
Kong API Gateway 管理API详解
一、前言
安装好了Kong,那么如何使用和管理它呢?Kong附带了一个管理的API接口,我们通过这个API接口来管理所有的API以及其他的资源,这个接口具有最高的权限,所以在生产环境中我们要特别注意这个接口的权限,通常我们不会将这个接口暴露在外网中。
如果Kong是以集群的状态的运行的,那么你只需要将管理API的请求发送到其中的一个节点中,Kong会自动同步信息到其他的节点。Kong默认监听8001
和8444
两个端口用接受管理API的请求,8001
为http端口,8444
为https端口
Kong支持application/x-www-form-urlencoded
和application/json
两种类型,POST的数据我们需要以json的格式发送。
Kong大概有以下几个管理对象:
- 节点信息
- 服务
- 路由
- 用户
- 插件
- 证书
- SNI
- 上游信息
- 目标
在Kong0.13.0版本以前,有API对象,但是从0.13.0之后开始逐步抛弃API对象,使用路由和服务组合来取代API对象,这提高了Kong的灵活性。基于此本文也将不介绍有关API对象的操作
本文约定:
- 我使用的是Kong_0.14.1版本
- 节点管理地址为 http://192.168.0.184:8001
- 使用curl请求接口,并且将得到的结果通过管道送给python进行格式化
例如:
linuxops@deepin:~$curl -s http://192.168.0.184:8001/status | python -m json.tool
{"database": {"reachable": true},"server": {"connections_accepted": 112,"connections_active": 1,"connections_handled": 112,"connections_reading": 0,"connections_waiting": 0,"connections_writing": 1,"total_requests": 65}
}
在以上的示例中,-s
参数表示静默模式,curl将不输入信息,这样我们就可以不打印我们不需要关注的信息。
然后将得到的结果通过管道送给python进行格式化,这样打印出来的就是格式化的json,方便我们查看。
下面我们一起看一下每一种对象的操作
二、节点信息
1、查看节点信息
接口信息:
接口名称 | 查看节点详细信息 |
---|---|
请求端点 | / |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001 | python -m json.tool
返回值:
查询节点详细信息返回的信息非常多,这里就显示了。
2、查看节点状态
这个接口查询节点的状态,主要是显示nginx进程处理连接的情况,以及数据库连接的情况。
如果Kong是以集群的方式运行,那么如果要查看其他节点的情况,必须要要一个一个访问节点的此接口。
因为Kong是基于nginx的,你也可以直接使用Nginx的监控工具。
接口信息:
接口名称 | 查看节点状态 |
---|---|
请求端点 | /status |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001/status | python -m json.tool
返回值:
{"database": {"reachable": true},"server": {"connections_accepted": 111,"connections_active": 1,"connections_handled": 111,"connections_reading": 0,"connections_waiting": 0,"connections_writing": 1,"total_requests": 64}
}
在返回的数据中,各个值的含义如下::
- total_requests:客户端请求的总数。
- connections_active:当前活动客户端连接数,包括等待连接。
- connections_accepted:已接受的客户端连接总数。
- connections_handled:已处理连接的总数。通常,参数值与accept相同,除非已达到某些资源限制。
- connections_reading:Kong正在读取请求标头的当前连接数。
- connections_writing:nginx将响应写回客户端的当前连接数。
- connections_waiting:等待请求的当前空闲客户端连接数。
三、服务
服务是每一个后端真实接口的抽象,它与路由关联,客户端发起请求,如果路由匹配到了,那么会将这个请求代理到与匹配路由相关联的服务中。
1、添加服务
接口信息:
接口名称 | 添加服务 |
---|---|
请求端点 | /services/ |
请求方法 | POST |
返回状态 | HTTP 201 Created |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
name | string | 否 | 服务名称,全局唯一 | |
protocol | string | http | 是 | 和上游通讯的协议取值http 或https |
host | string | 是 | 上游服务器的主机 | |
port | int | 80 | 是 | 上游服务器的端口 |
path | string | 否 | 上游服务器请求中的路径,必须以/ 开头 | |
retries | int | 5 | 否 | 代理失败时要执行的重试次数 |
connect_timeout | int | 60000 | 否 | 与上游连接的超时时间,单位毫秒 |
write_timeout | int | 60000 | 否 | 向上游发送请求两次连续写操作的超时时间 ,单位毫秒 |
read_timeout | int | 60000 | 否 | 用于向上游服务器发送请求的两次连续读取操作之间的超时 ,单位毫秒 |
请求示例:
curl -s -X POST --url http://192.168.0.184:8001/services/ \
-d 'name=linuxops_server' \
-d 'protocol=http' \
-d 'host=www.baidu.com'\
| python -m json.tool
返回值:
{"connect_timeout": 60000,"created_at": 1537924532,"host": "www.baidu.com","id": "27f30248-fef1-4ddc-9fdc-4ca73f354c64","name": "linuxops_server","path": null,"port": 80,"protocol": "http","read_timeout": 60000,"retries": 5,"updated_at": 1537924532,"write_timeout": 60000
}
如果在创建服务的时候没有指定name
,那么Kong并不会自动创建name
,但是会创建UUID形式的ID
,Kong在调用、匹配等等的操作都是可以基于这个ID,所以这个ID绝对是全局唯一的。
在其他的对象管理中,name
字段可能是必须的,通常这个name资源也是全局唯一的,即便如此,Kong也会创建ID
字段,也可以通过这个ID字段来匹配。
在服务对象中,能组合起来成为上游服务也是唯一的,也就是说,在一个服务中无法同时存在 http
和https
,如果上游提供http和https服务,同时也需要Kong代理它们的话,那必须要设置两个服务。
2、查询服务
接口信息:
接口名称 | 查询服务 |
---|---|
请求端点 | /services/{name or id} |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s --url http://192.168.0.184:8001/services/27f30248-fef1-4ddc-9fdc-4ca73f354c64 | python -m json.tool
返回值:
{"connect_timeout": 60000,"created_at": 1537986798,"host": "www.baidu.com","id": "27f30248-fef1-4ddc-9fdc-4ca73f354c64","name": "linuxops_server","port": 80,"protocol": "http","read_timeout": 60000,"retries": 5,"updated_at": 1537986798,"write_timeout": 60000
}
查询服务的接口我们可以通过id来查询,也可以通过name来查询,在创建服务的时候可以不指定name
字段,在系统中显示为null
,这种服务就无法通过指定name
来查询了,必须要使用id
来查询,所以,强烈建议在创建服务的时候指定name
,这是一个好习惯。
3、查询所有服务
接口信息:
接口名称 | 查询所有服务 |
---|---|
请求端点 | /services/ |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
offset | string | 否 | 分页偏移,用于定义列表中的唯一 | |
size | int | 100 | 否 | 每页返回的对象的数量 |
请求示例:
curl -s --url http://192.168.0.184:8001/services/?size=1 | python -m json.tool
返回值:
{"data": [{"connect_timeout": 60000,"created_at": 1537986798,"host": "www.baidu.com","id": "27f30248-fef1-4ddc-9fdc-4ca73f354c64","name": "linuxops_server","path": null,"port": 80,"protocol": "http","read_timeout": 60000,"retries": 5,"updated_at": 1537986798,"write_timeout": 60000}],"next": "/services?offset=WyIyN2YzMDI0OC1mZWYxLTRkZGMtOWZkYy00Y2E3M2YzNTRjNjQiXQ","offset": "WyIyN2YzMDI0OC1mZWYxLTRkZGMtOWZkYy00Y2E3M2YzNTRjNjQiXQ"
}
在上面的请求示例中,我们带了一个size
的参数来限定每一页的数量,在返回的结果中有两个字段,next
表示下一页的端点,offset
是本页的偏移。
当然,如果你在读取下一页的时候还需要限定返回的数据,还是依然要使用size
的参数
4、更新服务
接口信息:
接口名称 | 查询所有服务 |
---|---|
请求端点 | /services/{name or id} |
请求方法 | PATCH |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
name | string | 否 | 服务名称,全局唯一 | |
protocol | string | http | 是 | 和上游通讯的协议取值http 或https |
host | string | 是 | 上游服务器的主机 | |
port | int | 80 | 是 | 上游服务器的端口 |
path | string | 否 | 上游服务器请求中的路径,必须以/ 开头 | |
retries | int | 5 | 否 | 代理失败时要执行的重试次数 |
connect_timeout | int | 60000 | 否 | 与上游连接的超时时间,单位毫秒 |
write_timeout | int | 60000 | 否 | 向上游发送请求两次连续写操作的超时时间 ,单位毫秒 |
read_timeout | int | 60000 | 否 | 用于向上游服务器发送请求的两次连续读取操作之间的超时 ,单位毫秒 |
请求示例:
curl -s -X PATCH --url http://192.168.0.184:8001/services/linuxops_server \
-d 'name=linuxops_server_patch' \
-d 'protocol=http' \
-d 'host=www.baidu.com' \| python -m json.tool
返回值:
{"connect_timeout": 60000,"created_at": 1537986798,"host": "www.baidu.com","id": "27f30248-fef1-4ddc-9fdc-4ca73f354c64","name": "linuxops_server_patch","path": null,"port": 80,"protocol": "http","read_timeout": 60000,"retries": 5,"updated_at": 1537989418,"write_timeout": 60000
}
和查看服务的接口一样,接入点是需要带上id
或者name
的,只不过方法变成了PATCH
,参数和添加的参数一样。
在上面的示例中,我修改了一个服务的name
,从返回值中可以可能出来id
是不会变化的。
5、更新或者创建服务
接口信息:
接口名称 | 更新或者创建服务 |
---|---|
请求端点 | /services/{name or id} |
请求方法 | PUT |
返回状态 | HTTP 201 Created or HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
name | string | 否 | 服务名称,全局唯一 | |
protocol | string | http | 是 | 和上游通讯的协议取值http 或https |
host | string | 是 | 上游服务器的主机 | |
port | int | 80 | 是 | 上游服务器的端口 |
path | string | 否 | 上游服务器请求中的路径,必须以/ 开头 | |
retries | int | 5 | 否 | 代理失败时要执行的重试次数 |
connect_timeout | int | 60000 | 否 | 与上游连接的超时时间,单位毫秒 |
write_timeout | int | 60000 | 否 | 向上游发送请求两次连续写操作的超时时间 ,单位毫秒 |
read_timeout | int | 60000 | 否 | 用于向上游服务器发送请求的两次连续读取操作之间的超时 ,单位毫秒 |
请求示例:
curl -s -X PUT --url http://192.168.0.184:8001/services/linuxops_server_put \
-d 'name=linuxops_server_patch' \
-d 'protocol=http' \
-d 'host=www.baidu.com' \| python -m json.tool
返回值:
{"connect_timeout": 60000,"created_at": 1537991524,"host": "www.baidu.com","id": "7242306f-3a55-46b5-9cda-cfb6c25a421c","name": "linuxops_server_put","path": null,"port": 80,"protocol": "http","read_timeout": 60000,"retries": 5,"updated_at": 1537991524,"write_timeout": 60000
}
这个接口是更新或者创建一个服务,接入点和查询、更新是一样的,不一样的是用了PUT
的方法。
此接口带了{name or id}
,Kong会根据{name or id}
的信息查询数据库,如果对应的数据存在,那么更新,如果对于的数据不存在,那么就新增。
在更新服务的接口中,我们也是可以带{name or id}
,无论是带了id还是name,服务中的name字段都是能被更新到的,但是这个接口就有点不一样了。
有以下几种情况:
1.如果这个接口带的是name
,例如/services/linuxops_server
Kong会判断name为”linuxops_server“的服务存不存在,如果存在,则更新,这个时候POST到Kong的数据中name
字段无效,Kong并不会修改。 如果不存在”linuxops_server“这个服务存,那么会创建name为"linuxops_server"的服务,并且Kong会生成UUID形式的id,此时POST上来的数据中的name字段依然无效。
2.如果这个接口带的是id
,例如/services/ca4f16bc-1562-4ab8-b201-131c7ac393f0
Kong会判断id为"ca4f16bc-1562-4ab8-b201-131c7ac393f0"的服务是否存在,如果存在,那么更新它,这个时候如果POST上来的数据中有name字段,那么Kong会更新name。 如果id为"ca4f16bc-1562-4ab8-b201-131c7ac393f0"的服务不存在,那么Kong会创建name为"ca4f16bc-1562-4ab8-b201-131c7ac393f0"的服务,并且Kong会生成UUID形式的id,这个时候POST上来的数据中如果有name字段,那么这个字段无效。
6、删除服务
接口信息:
接口名称 | 删除服务 |
---|---|
请求端点 | /services/{name or id} |
请求方法 | DELETE |
返回状态 | HTTP 204 No Content |
请求参数:
无
请求示例:
curl -i -X DELETE --url http://192.168.0.184:8001/services/b6094754-07da-4c31-bb95-0a7caf5e6c0b
返回值:
无
此接口没有返回值
四、路由
路由用来匹配客户端请求的规则,每一个路由都要与一个服务相关联,当一个请求到达Kong的时候,会先给路由匹配,如果匹配成功,那么会将请求转发给服务,服务再去后端请求数据。所以路由是Kong的入口。
在Kong0.13.0之前的版本有API实体,因为API实体使用用起来并不方便,所以将API实体拆分成路由和服务,这样提供了最大的自由度。
Kong的一个API实体必须是路由和服务的组合。
1、添加路由
接口信息:
接口名称 | 添加路由 |
---|---|
请求端点 | /routes/ |
请求方法 | POST |
返回状态 | HTTP 201 Created |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
protocols | string or list | ["http", "https"] | 否 | 此路由允许的协议,取值http 或https |
methods | string or list | null | *否 | 此路由允许的方法 |
hosts | string or list | null | *否 | 此路由允许的域名 |
paths | string or list | null | *否 | 此路由匹配的path |
strip_path | bool | true | 否 | 匹配到path时,是否删除匹配到的前缀 |
preserve_host | bool | false | 否 | 匹配到hosts时,使用请求头部的值为域名向后端发起请求,请求的头部为"host",例如"host:api.abc.com" |
service | string | 是 | 关联的服务id。 这里需要特别注意,如果是以表达的形式发送的,需要以 service.id=<service_id> 形式发送,如果是json,需要以"service":{"id":"<service_id>"} 形式发送 |
请求示例:
curl -s -X POST --url http://192.168.0.184:8001/routes \
-d 'protocols=http' \
-d 'methods=GET' \
-d 'paths=/weather' \
-d 'service.id=43921b23-65fc-4722-a4e0-99bf84e26593' \
| python -m json.tool
返回值:
{"created_at": 1538089234,"hosts": null,"id": "cce1a279-d05a-4faa-8c10-1f9d27b881c9","methods": ["GET"],"paths": ["/weather"],"preserve_host": false,"protocols": ["http"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538089234
}
在上面的示例中,我们创建了一个路由并且关联了一个服务,在创建路由的时候并没有指定hosts
,路由匹配到host的时候会允许所有,因为默认值为null
。当然如果不指定其他的也是一样的。
值得注意的是,methods
,hosts
,paths
这三个参数必须要指定一个,否则无法创建路由。
路由和服务组合的规则相对比较复杂,我们将会重新开一篇文章来专门讲解这个,本文仅仅关注管理API的使用。
2、查看路由
接口信息:
接口名称 | 查看路由 |
---|---|
请求端点 | /routes/{id} |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001/routes/6c6b7863-9a05-4d51-bf7e-8e4e5866a131 | python -m json.tool
返回值:
{"created_at": 1538089668,"id": "6c6b7863-9a05-4d51-bf7e-8e4e5866a131","paths": ["/weather"],"preserve_host": false,"protocols": ["http","https"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538089668
}
路由中没有name
字段,所以只能通过ID来查看。
3、查询所有路由
接口信息:
接口名称 | 查询所有路由 |
---|---|
请求端点 | /routes |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
offset | string | 否 | 分页偏移,用于定义列表中的唯一 | |
size | int | 100 | 否 | 每页返回的对象的数量 |
请求示例:
curl -s --url http://192.168.0.184:8001/routes/?size=1 | python -m json.tool
返回值:
{"data": [{"created_at": 1538004899,"hosts": [],"id": "19377681-ba1c-43dc-9eb6-ff117467ce96","methods": ["GET","POST"],"paths": [],"preserve_host": false,"protocols": ["http","https"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538071225}],"next": "/routes?offset=WyIxOTM3NzY4MS1iYTFjLTQzZGMtOWViNi1mZjExNzQ2N2NlOTYiXQ","offset": "WyIxOTM3NzY4MS1iYTFjLTQzZGMtOWViNi1mZjExNzQ2N2NlOTYiXQ"
}
在上面的请求示例中,我们带了一个size
的参数来限定每一页的数量,在返回的结果中有两个字段,next
表示下一页的端点,offset
是本页的偏移。
当然,如果你在读取下一页的时候还需要限定返回的数据,还是依然要使用size
的参数
4、更新路由
接口信息:
接口名称 | 更新路由 |
---|---|
请求端点 | /routes/{id} |
请求方法 | PATCH |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
protocols | string or list | ["http", "https"] | 否 | 此路由允许的协议,取值http 或https |
methods | string or list | null | *否 | 此路由允许的方法 |
hosts | string or list | null | *否 | 此路由允许的域名 |
paths | string or list | null | *否 | 此路由匹配的path |
strip_path | bool | true | 否 | 匹配到path时,是否删除匹配到的前缀 |
preserve_host | bool | false | 否 | 匹配到hosts时,使用请求头部的值为域名向后端发起请求,请求的头部为"host",例如"host:api.abc.com" |
service | string | 是 | 关联的服务id。 这里需要特别注意,如果是以表达的形式发送的,需要以 service.id=<service_id> 形式发送,如果是json,需要以"service":{"id":"<service_id>"} 形式发送 |
请求示例:
curl -s -X PATCH --url http://192.168.0.184:8001/routes/6c6b7863-9a05-4d51-bf7e-8e4e5866a131 \
-d 'protocols=http' \
-d 'methods=GET' \
-d 'paths=/weather' \
-d 'service.id=43921b23-65fc-4722-a4e0-99bf84e26593' \
| python -m json.tool
返回值:
{"created_at": 1538089668,"hosts": null,"id": "6c6b7863-9a05-4d51-bf7e-8e4e5866a131","methods": ["GET"],"paths": ["/weather"],"preserve_host": false,"protocols": ["http"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538090658
}
此接口的参数和添加路由的参数一样,接入点带了路由的id,路由没有name字段,所有的匹配都是以ID匹配的。
5、更新或者添加路由
接口信息:
接口名称 | 更新或者添加路由 |
---|---|
请求端点 | /routes/{id} |
请求方法 | PUT |
返回状态 | HTTP 201 Created or HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
protocols | string or list | ["http", "https"] | 否 | 此路由允许的协议,取值http 或https |
methods | string or list | null | *否 | 此路由允许的方法 |
hosts | string or list | null | *否 | 此路由允许的域名 |
paths | string or list | null | *否 | 此路由匹配的path |
strip_path | bool | true | 否 | 匹配到path时,是否删除匹配到的前缀 |
preserve_host | bool | false | 否 | 匹配到hosts时,使用请求头部的值为域名向后端发起请求,请求的头部为"host",例如"host:api.abc.com" |
service | string | 是 | 关联的服务id。 这里需要特别注意,如果是以表达的形式发送的,需要以 service.id=<service_id> 形式发送,如果是json,需要以"service":{"id":"<service_id>"} 形式发送 |
请求示例:
curl -s -X PUT --url http://192.168.0.184:8001/routes/6c6b7863-9a05-4d51-bf7e-2962c1d6b0e6 \
-d 'protocols=http' \
-d 'methods=GET' \
-d 'paths=/weather' \
-d 'service.id=43921b23-65fc-4722-a4e0-99bf84e26593' \
| python -m json.tool
返回值:
{"created_at": 1538091038,"hosts": null,"id": "6c6b7863-9a05-4d51-bf7e-2962c1d6b0e6","methods": ["GET"],"paths": ["/weather"],"preserve_host": false,"protocols": ["http"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538091038
}
此接口的参数和添加路由的参数一样,接入点带了路由的id,路由没有name字段,所有的匹配都是以ID匹配的。
和服务的更新创建接口差不多,只不过路由没有name的字段,所以匹配均是按照id来匹配,所以规则比较简单:如果id存在则更新,如果id不存在则添加。
但是,此处的ID必须是UUID形式的ID,否则添加不成功。
6、查看和服务关联的路由
接口信息:
接口名称 | 查看和服务关联的路由 |
---|---|
请求端点 | /services/{service name or id}/routes |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001/services/wechat/routes | python -m json.tool
返回值:
{"data": [{"created_at": 1538089623,"id": "cdfee2bc-a5eb-4f80-96f5-64bfe3b85507","methods": ["GET"],"preserve_host": false,"protocols": ["http","https"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538089623},{"created_at": 1538089397,"id": "f8ef8876-9681-4629-a2ee-d7fac8a8094a","methods": ["GET"],"paths": ["/weather"],"preserve_host": false,"protocols": ["http","https"],"regex_priority": 0,"service": {"id": "43921b23-65fc-4722-a4e0-99bf84e26593"},"strip_path": true,"updated_at": 1538089397}],"next": null
}
7、查看和路由关联的服务
接口信息:
接口名称 | 查看和路由关联的服务 |
---|---|
请求端点 | /routes/{route id}/service |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001/routes/f8ef8876-9681-4629-a2ee-d7fac8a8094a/service | python -m json.tool
返回值:
{"connect_timeout": 60000,"created_at": 1538000258,"host": "t.weather.sojson.com","id": "43921b23-65fc-4722-a4e0-99bf84e26593","name": "wechat","path": "/api/weather/city/","port": 80,"protocol": "http","read_timeout": 60000,"retries": 5,"updated_at": 1538005796,"write_timeout": 60000
}
8、删除路由
接口信息:
接口名称 | 删除路由 |
---|---|
请求端点 | /routes/{id} |
请求方法 | DELETE |
返回状态 | HTTP 204 No Content |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001/routes/f8ef8876-9681-4629-a2ee-d7fac8a8094a/service | python -m json.tool
返回值:
此接口没有返回值
五、用户
1、添加用户
接口信息:
接口名称 | 添加用户 |
---|---|
请求端点 | /consumers/ |
请求方法 | POST |
返回状态 | HTTP 201 Created |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
username | string | null | *否 | 全局唯一的用户名 |
custom_id | string | null | *否 | 全局唯一的用户ID |
请求示例:
curl -s -X POST --url http://192.168.0.184:8001/consumers -d 'username=linuxops' | python -m json.tool
返回值:
{"created_at": 1538126090,"custom_id": null,"id": "376a9ccf-7d10-45a7-a956-77eb129d8ff0","username": "linuxops"
}
在上面示例中,我们指定了一个username
来创建一个用户,从返回值看出,如果没有指定参数,那么默认值为空。
在调用这个接口,必须要指定username
和 custom_id
其中一个参数,不能同时不指定。
在创建用户的时候,系统都将会生成一个UUID的形式的唯一ID。
2、查询用户
接口信息:
接口名称 | 查询用户 |
---|---|
请求端点 | /consumers/{username or id} |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s http://192.168.0.184:8001/consumers/linuxops | python -m json.tool
返回值:
{"created_at": 1538126090,"id": "376a9ccf-7d10-45a7-a956-77eb129d8ff0","username": "linuxops"
}
查询用户只能通过系统ID和username
来查询,无法通过custom_id
查询
3、查询所有用户
接口信息:
接口名称 | 查询所有用户 |
---|---|
请求端点 | /consumers |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
offset | string | 否 | 分页偏移,用于定义列表中的唯一 | |
size | int | 100 | 否 | 每页返回的对象的数量 |
请求示例:
curl -s http://192.168.0.184:8001/consumers?size=1 | python -m json.tool
返回值:
{"data": [{"created_at": 1538126090,"custom_id": null,"id": "376a9ccf-7d10-45a7-a956-77eb129d8ff0","username": "linuxops"}],"next": "/consumers?offset=WyIzNzZhOWNjZi03ZDEwLTQ1YTctYTk1Ni03N2ViMTI5ZDhmZjAiXQ","offset": "WyIzNzZhOWNjZi03ZDEwLTQ1YTctYTk1Ni03N2ViMTI5ZDhmZjAiXQ"
}
在上面的请求示例中,我们带了一个size
的参数来限定每一页的数量,在返回的结果中有两个字段,next
表示下一页的端点,offset
是本页的偏移。
当然,如果你在读取下一页的时候还需要限定返回的数据,还是依然要使用size
的参数
4、更新用户
接口信息:
接口名称 | 更新用户 |
---|---|
请求端点 | /consumers/{username or id} |
请求方法 | PATCH |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
username | string | null | *否 | 全局唯一的用户名 |
custom_id | string | null | *否 | 全局唯一的用户ID |
请求示例:
curl -s -X PATCH --url http://192.168.0.184:8001/consumers/376a9ccf-7d10-45a7-a956-77eb129d8ff0 -d "custom_id=linuxops123456789" | python -m json.tool
返回值:
{"created_at": 1538126090,"custom_id": "linuxops123456789","id": "376a9ccf-7d10-45a7-a956-77eb129d8ff0","username": "linuxops"
}
5、更新或者添加用户
接口信息:
接口名称 | 更新或者添加用户 |
---|---|
请求端点 | /consumers/{username or id} |
请求方法 | PUT |
返回状态 | HTTP 201 Created or HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
username | string | null | *否 | 全局唯一的用户名 |
custom_id | string | null | *否 | 全局唯一的用户ID |
请求示例:
curl -s -X PUT --url http://192.168.0.184:8001/consumers/376a9ccf-7d10-45a7-a956-77eb129d8ff0 -d "custom_id=linuxops123456789" | python -m json.tool
返回值:
{"created_at": 1538127246,"custom_id": "linuxops123456789","id": "376a9ccf-7d10-45a7-a956-77eb129d8ff0","username": null
}
这个接口和更新添加服务的接口类似,当{username or id}
属性具有UUID的结构时,插入/更新的Consumer将由其标识id。否则它将由它识别username
。
6、删除用户
接口信息:
接口名称 | 删除用户 |
---|---|
请求端点 | /consumers/{username or id} |
请求方法 | DELETE |
返回状态 | HTTP 204 No Content |
请求参数:
无
请求示例:
curl -i -X DELETE --url http://192.168.0.184:8001/consumers/376a9ccf-7d10-45a7-a956-77eb129d8ff0
返回值:
此操作没有返回值
六、插件
Kong提供了一个插件的功能,你可以通过配置指定某个服务或者路由或者用户启用某个插,插件始终只运行一次,所以对于不同的实体配置相同插件时就有优先级的概念。
多次配置插件的优先级如下:
- 在以下组合上配置的插件:路由,服务和使用者。 (消费者意味着必须对请求进行身份验证)。
- 在Route和Consumer的组合上配置的插件。 (消费者意味着必须对请求进行身份验证)。
- 在服务和使用者的组合上配置的插件。 (消费者意味着必须对请求进行身份验证)。
- 在路由和服务的组合上配置的插件。
- 在Consumer上配置的插件。 (消费者意味着必须对请求进行身份验证)。
- 在路由上配置的插件。
- 在服务上配置的插件。
- 配置为全局运行的插件。
从以上的优先级可以看出全局配置的插件优先级最小,而越具体的组合优先级越高。
1、添加插件
可以通过以下几种不同的方式添加插件:
- 对于每个Service/Route和consumer。不要设置consumer_id和设置service_id或route_id。
- 适用于每个Service/Route和特定consumer。只有设定consumer_id。
- 适用于每个consumer和特定Service。仅设置service_id(警告:某些插件只允许设置route_id)
- 对于每个consumer和特定的Route。仅设置route_id(警告:某些插件只允许设置service_id)
- 对于特定的Service/Route和consumer。设置两个service_id/ route_id和consumer_id。
并非所有插件都允许指定consumer_id。检查插件文档。
接口信息:
接口名称 | 添加插件 |
---|---|
请求端点 | /plugins/ |
请求方法 | POST |
返回状态 | HTTP 201 Created |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
name | string | 是 | 要添加的插件的名称。目前,插件必须分别安装在每个Kong实例中。 | |
consumer_id | string | null | 否 | 使用者的唯一标识符,用于覆盖传入请求中此特定使用者的现有设置。 |
service_id | string | null | 否 | 服务的唯一标识符,用于覆盖传入请求中此特定服务的现有设置。 |
route_id | string | null | 否 | 路由的唯一标识符,它覆盖传入请求中此特定路由的现有设置。 |
config.{property} | string | null | 否 | 插件的配置属性,可以在Kong Hub的插件文档页面找到。 |
enabled | bool | true | 否 | 是否应用插件。默认值:true。 |
请求示例:
curl -s -X POST --url http://192.168.0.184:8001/plugins/ \
-d 'name=basic-auth' \
-d 'route_id=d1a10507-ea15-4c61-9d8c-7f10ebc79ecb' \
| python -m json.tool
返回值:
{"config": {"anonymous": "","hide_credentials": false},"created_at": 1540102452000,"enabled": true,"id": "900aeaa3-0a47-49a1-9fea-649e6c90ab7f","name": "basic-auth","route_id": "d1a10507-ea15-4c61-9d8c-7f10ebc79ecb"
}
在上面的请求示例中,我们在route上添加了basic-auth
插件,这个插件用于认证,通过http的头部带入用户名和密码信息进行认证。
当然,启用插件后,我们要对user设置好basic-auth
的凭证,否则访问不了,并且返回如下信息:
{
"message": "Unauthorized"
}
2、查询插件
接口信息:
接口名称 | 查询插件 |
---|---|
请求端点 | /plugins/{id} |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
id | string | 是 | 要检索的插件的唯一标识符 |
请求示例:
curl -s --url http://192.168.0.184:8001/plugins/900aeaa3-0a47-49a1-9fea-649e6c90ab7f | python -m json.tool
返回值:
{"config": {"anonymous": "","hide_credentials": false},"created_at": 1540102452000,"enabled": true,"id": "900aeaa3-0a47-49a1-9fea-649e6c90ab7f","name": "basic-auth","route_id": "d1a10507-ea15-4c61-9d8c-7f10ebc79ecb"
}
3、查询所有插件
接口信息:
接口名称 | 查询所有插件 |
---|---|
请求端点 | /plugins/ |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
id | string | 否 | 通过id查询 | |
name | string | 否 | 通过name查 | |
service_id | string | 否 | 通过service_id查 | |
route_id | string | 否 | 通过iroute_id查 | |
consumer_id | string | 否 | 通过consumer_id查 | |
offset | string | 否 | 分页偏移,用于定义列表中的唯一 | |
size | int | 100 | 否 | 每页返回的对象的数量 |
请求示例:
curl -s --url http://192.168.0.184:8001/plugins/?size=1 | python -m json.tool
返回值:
{"data": [{"config": {"anonymous": "","hide_credentials": false},"created_at": 1540102452000,"enabled": true,"id": "900aeaa3-0a47-49a1-9fea-649e6c90ab7f","name": "basic-auth","route_id": "d1a10507-ea15-4c61-9d8c-7f10ebc79ecb"}],"total": 1
}
在上面的请求示例中,我们带了一个size
的参数来限定每一页的数量,在返回的结果中有两个字段,next
表示下一页的端点,offset
是本页的偏移。
当然,如果你在读取下一页的时候还需要限定返回的数据,还是依然要使用size
的参数
4、更新插件
接口信息:
接口名称 | 更新插件 |
---|---|
请求端点 | /plugins/{plugin id} |
请求方法 | PATCH |
返回状态 | HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
plugin id | string | 是 | 要更新的插件配置的唯一标识符 | |
name | string | null | 否 | 要添加的插件的名称要添加的插件的名称 |
consumer_id | string | null | 否 | 使用者的唯一标识符,用于覆盖传入请求中此特定使用者的现有设置。 |
service_id | string | null | 否 | 服务的唯一标识符,用于覆盖传入请求中此特定服务的现有设置。 |
route_id | string | null | 否 | 路由的唯一标识符,它覆盖传入请求中此特定路由的现有设置。 |
config.{property} | string | null | 否 | 插件的配置属性,可以在Kong Hub的插件文档页面找到。 |
enabled | bool | true | 否 | 是否应用插件。 |
请求示例:
curl -s -X PATCH --url http://192.168.0.184:8001/plugins/900aeaa3-0a47-49a1-9fea-649e6c90ab7f -d "service_id=da4dce88-4df3-4723-b544-b11b27184e97" | python -m json.tool
返回值:
{"config": {"anonymous": "","hide_credentials": false},"created_at": 1540102452000,"enabled": true,"id": "900aeaa3-0a47-49a1-9fea-649e6c90ab7f","name": "basic-auth","route_id": "d1a10507-ea15-4c61-9d8c-7f10ebc79ecb","service_id": "da4dce88-4df3-4723-b544-b11b27184e97"
}
在上面的请求示例中,我更新了这个插件,原本只针对route启用的,现在又增加了对service生效,由此看出,一个插件是可以对多个实体生效的(前提是插件本身要支持此实体生效),因为插件只会在请求的生命周期中运行一次,所以对多个实体启用同一个插件会受到优先级的限制。
5、更新或添加插件
接口信息:
接口名称 | 更新或添加插件 |
---|---|
请求端点 | /plugins/ |
请求方法 | PUT |
返回状态 | HTTP 201 Created or HTTP 200 OK |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
name | string | null | 否 | 要添加的插件的名称要添加的插件的名称 |
consumer_id | string | null | 否 | 使用者的唯一标识符,用于覆盖传入请求中此特定使用者的现有设置。 |
service_id | string | null | 否 | 服务的唯一标识符,用于覆盖传入请求中此特定服务的现有设置。 |
route_id | string | null | 否 | 路由的唯一标识符,它覆盖传入请求中此特定路由的现有设置。 |
config.{property} | string | null | 否 | 插件的配置属性,可以在Kong Hub的插件文档页面找到。 |
enabled | bool | true | 否 | 是否应用插件。 |
请求示例:
curl -s -X PUT --url http://192.168.0.184:8001/plugins/900aeaa3-0a47-49a1-9fea-649e6c90ab7f -d "service_id=da4dce88-4df3-4723-b544-b11b27184e97" | python -m json.tool
返回值:
{"config": {"anonymous": "","hide_credentials": false},"created_at": 1540102452000,"enabled": true,"id": "900aeaa3-0a47-49a1-9fea-649e6c90ab7f","name": "basic-auth","route_id": "d1a10507-ea15-4c61-9d8c-7f10ebc79ecb","service_id": "da4dce88-4df3-4723-b544-b11b27184e97"
}
这个接口是更新或者创建一个插件。
如果传入的参数name
已经存在,那么以传入的参数修改此插件,如果name
不存在,则以传入的参数创建此插件。
6、删除插件
接口信息:
接口名称 | 删除插件 |
---|---|
请求端点 | /plugins/{plugin id} |
请求方法 | DELETE |
返回状态 | HTTP 204 No Content |
请求参数:
参数名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
plugin id | string | 是 | 要删除的插件配置的唯一标识符 |
请求示例:
curl -s -X DELETE --url http://192.168.0.184:8001/plugins/900aeaa3-0a47-49a1-9fea-649e6c90ab7f | python -m json.tool
返回值:
此操作没有返回值
7、查询已启用的插件
接口信息:
接口名称 | 查询已启用的插件 |
---|---|
请求端点 | /plugins/enabled |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s -X GET --url http://192.168.0.184:8001/plugins/enabled | python -m json.tool
返回值:
{"enabled_plugins": ["response-transformer","oauth2","acl","correlation-id","pre-function","jwt","cors","ip-restriction","basic-auth","key-auth","rate-limiting","request-transformer","http-log","file-log","hmac-auth","ldap-auth","datadog","tcp-log","zipkin","post-function","request-size-limiting","bot-detection","syslog","loggly","azure-functions","udp-log","response-ratelimiting","aws-lambda","statsd","prometheus","request-termination"]
}
返回Kong示例启用了那些插件,只有已经启用的插件才能被应用在实体上,需要说明的是,在kong集群中,插件启用的情况要一致。
8、检索插件架构
接口信息:
接口名称 | 检索插件架构 |
---|---|
请求端点 | /plugins/schema/{plugin name} |
请求方法 | GET |
返回状态 | HTTP 200 OK |
请求参数:
无
请求示例:
curl -s -X GET --url http://192.168.0.184:8001/plugins/schema/basic-auth | python -m json.tool
返回值:
{"fields": {"anonymous": {"default": "","func": "function","type": "string"},"hide_credentials": {"default": false,"type": "boolean"}},"no_consumer": true
}
可以通过此接口了解插件接受哪些字段。
七、证书
八、SNI
九、上游信息
十、目标
本文转载自:https://linuxops.org/blog/kong/admin.html
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 《Effective Java》泛型
[Java读书笔记] Effective Java(Third Edition) 第 5 章 泛型...
2024/4/24 8:45:37 - 中国古建筑欣赏与设计章节
中国古代建筑艺术绪论1【单选题】幼发拉底河和底格里斯河两大流域产生的文明是指()文明。CA、古埃及B、古印度C、古西亚D、古希腊2【单选题】对当今世界影响最大的文明是()。DA、古埃及、古印度B、古希腊、古罗马C、古玛雅、古印加D、地中海、中国3【判断题】建筑记录的历史往往…...
2024/4/24 8:45:36 - 嵌入式工程师的真实现状,有人月薪8千,有人年薪快40万!
目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 说白了就是先设计硬件,然后根据需求编写能在该硬件上运行的软件,就成了所谓的“智能硬件”。 或者说得还不够…...
2024/4/26 23:45:37 - 密码学学习--(1)概述
密码学可以分为古典密码学和现代密码学。古典密码学主要关注信息的保密书写和传递,以及相应的破译。而现代密码学不仅关注信息保密问题,同时还涉及消息完整性验证、消息的不可抵赖性以及在分布式计算中产生的所有信息安全问题。两者最重要的区别在于,前者的编译和破解通常依…...
2024/4/24 8:45:38 - 大型企业都在用,Python实现敏感词过滤
在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去屏蔽这些敏感词。下面我来介绍一些简单版本的敏感词屏蔽的方法。很多人…...
2024/4/26 0:11:07 - 蓝牙定位未来新发展,蓝牙人员定位--新导智能
长期以来,蓝牙定位技能在音频、汽车、互联设备商场以及手机、平板电脑及个人电脑等传统商场的消费类设备中扮演重要人物,它已经成为用户所期待的一项必备功用。但蓝牙的运用不仅限于这些商场。如今,蓝牙定位已成为智能家居、智能楼宇、智能工业和智慧城市等新式商场的首选解…...
2024/4/16 14:04:39 - 阿里面试官让我手写 Vue 2.0核心原理,我都整理好了!
目录为什么使用 Vue? 你会学到什么? 带着问题去学习 Vue2.0整体概括1、传入实例参数 2、设置数据劫持(Object.defineProperty) 3、模板编译(Compile) 4、虚拟DOM(Virtual DOM) 5、对比新老虚拟DOM(Patch) 6、更新视图(Update View)实现一个input双向绑定(v-model)一、响应式原…...
2024/4/16 14:04:34 - 智慧树巴蜀文化答案
知到app巴蜀文化答案课后单元测试答案第一章1【多选题】(10分)( ACD)是传说中蜀地的三个王朝。A.柏灌氏B.蜀山氏C.开明氏D.杜宇2【多选题】(10分)( BD)及( ),开国何茫然,尔来四万八千岁,不与秦塞通人烟。A.柏灌B.蚕丛C.高阳氏D.鱼凫3【多选题】(10分)历史上巴蜀文化的…...
2024/4/27 23:04:16 - 一键解决 go get golang.org/x 包失败
一键解决 go get golang.org/x 包失败 问题描述 当我们使用 go get、go install、go mod 等命令时,会自动下载相应的包或依赖包。但由于众所周知的原因,类似于 golang.org/x/… 的包会出现下载失败的情况。如下所示: 1 2 3 $ go get -u golang.org/x/sys go get golang.org/…...
2024/4/16 23:02:28 - SRT互联网传输设备技术分享
原文链接:https://blog.csdn.net/weixin_42228920/article/details/90946259 高手先驱太多。SRT互联网传输设备技术分享 前 言 序 言 Chapter 1. 什么是SRT? 1.1. SRT 联盟 1.2. SRT传输技术 1.3. SRT的典型应用模式 1.3.1. 点对点单向传输和视频互动 1.3.2. 点对多点传输 1.…...
2024/4/22 15:50:02 - springboot扫盲写给自己看的
springboot扫盲写给自己看的启动流程 启动流程构造springApplication类 构造函数里会去做 a ApplicationInlitializer 初始化器 对象 b.初始化ApplicationListener 即加载监听器的类 ,也可以自己定制 run方法 1.Environment配置 2.ApplicationContext容器的创建,及属性的设置 e…...
2024/4/15 6:35:58 - CSS:09-CSS高级技巧
CSS高级技巧 目标理解能说出元素显示隐藏最常见的写法 能说出精灵图产生的目的 能说出去除图片底侧空白缝隙的方法应用能写出最常见的鼠标样式 能使用精灵图技术 能用滑动门做导航栏案例1. 元素的显示与隐藏目的 让一个元素在页面中消失或者显示出来场景 类似网站广告,当我们点…...
2024/4/19 13:15:28 - /dev/mapper/centos-root空间不足,新增磁盘并对root扩容。
虚拟机/dev/mapper/centos-root满了,剩余空间20K……需要扩容。从网上帖子看大部分是将/dev/mapper/home的空间分给/root,结果df -lh直接傻眼了,可能是之前手动配置的。并没有/dev/mapper/home。 VMware直接修改磁盘空间,失败,不能做到。 故尝试加磁盘,然后将新加的空间分…...
2024/4/24 8:45:33 - Centos7虚拟机yum安装mysql实现主从复制案例教程
Centos7虚拟机yum安装mysql实现主从复制案例教程mysql安装navicat 链接mysql配置主从复制拓展 mysql安装首先,centos 默认安装有MariaDB, 属于mysql 分支, 安装mysql 时会覆盖掉MariaDB使用wget下载mysql 官方Repositorywget -i -c http://dev.mysql.com/get/mysql57-commun…...
2024/4/24 8:45:32 - Python之Selenium如何正确运用?案例详解
Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,此种抓取方式非常有效。本节中,就让我们来感受一下它的强大之处吧。1. 准备工…...
2024/4/24 8:45:31 - Java中Lambda表达式的学习
Lambda表达式 1.函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。 2.Lam…...
2024/4/24 8:45:30 - c++字符串操作
从键盘输入任意的一个字符串 A,其长度 L 不小于 6,同时再输入一个整数 N(其中:1 < N <L + 1)作为插入点,以及任意的一个字符串 B,其长度为 L1(其长度为L1<L)现要求完成下列功能:如果字符串 A 的长度 L大于 100输出 100,否则输出 L; 在 N点处,插入字符串 B…...
2024/4/24 8:45:29 - Android.mk 文件详解-1
前言 最近在使用mk 进行编译系统。中间碰见了很多的问题,而最关键的就是在于针对mk文件的相关配置和属性参数不了解,才造成的错误,下面主要介绍下mk相关的配置指令的意义。 1.模板介绍 编译成so库 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)# 库的名称值 LOCAL_MO…...
2024/4/24 8:45:28 - dubbo springboot nacos 组合测试
dubbo介绍 优秀的 RPC 服务治理框架,直接查看 官网. nacos 介绍 作为 注册中心 和 参数配置中心使用, 本次作为dubbo 服务注册发现中心,介绍查看官网. spring boot 注解方式配置 本次测试环境 springboot 2.2.6 dubbo 2.7.7 通过反复查看官网和官方demo, 其实基本可以不用 …...
2024/4/23 13:38:43 - 2-2单元 -主机基本安全防护措施 —— SELinux 管理原则
主机基本安全防护措施 —— SELinux 管理原则< 一 > SELinux 简介:SELinux使用委任式访问控制(Mandatory Access Control , MAC),它可以针对特定的程序与特定的文件资源来进行权限管理。工作模式:主体 (Subject) —— SELinux主要管理的就是程序 ;目标 (Object)…...
2024/4/24 8:45:27
最新文章
- 每日一练 | 华为认证真题练习Day225
1、访问控制列表可分为如下哪些类别?(多选) A.基本的访问控制列表 B.高级的访问控制列表 C.二层 ACL D.用户自定义 ACL 2、IGMP v 1 仅包含两种报文类型:成员关系查询和成员关系报告 A.正确 B.错误 3、两 台 路 由 器 通 过 多 条 物 理 链 路 建 立 一 个 逻 辑 BGP 对…...
2024/5/1 5:31:29 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 备战蓝桥杯Day37 - 真题 - 特殊日期
一、题目描述 思路: 1、统计2000年到2000000年的日期,肯定是需要遍历 2、闰年的2月是29天,非闰年的2月是28天。我们需要判断这一年是否是闰年。 1、3、5、7、8、10、12月是31天,4、6、9、11月是30天。 3、年份yy是月份mm的倍数…...
2024/4/30 17:25:17 - 解决前端性能瓶颈:高效处理大量数据渲染与复杂交互的策略与优化方法
✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 …...
2024/4/30 3:05:01 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57