feat(apisix): add Cloudron package
- Implements Apache APISIX packaging for Cloudron platform. - Includes Dockerfile, CloudronManifest.json, and start.sh. - Configured to use Cloudron's etcd addon. 🤖 Generated with Gemini CLI Co-Authored-By: Gemini <noreply@google.com>
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
---
|
||||
title: Control API
|
||||
---
|
||||
|
||||
<!--
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
-->
|
||||
|
||||
control API 可以被用来:
|
||||
|
||||
* 暴露 APISIX 内部状态信息
|
||||
* 控制单个 APISIX 的数据平面的行为
|
||||
|
||||
默认情况下,control API 是启用的,监听 `127.0.0.1:9090`。你可以通过修改 `apisix/conf/config.yaml` 中的 control 部分来更改设置,如下:
|
||||
|
||||
```yaml
|
||||
apisix:
|
||||
...
|
||||
enable_control: true
|
||||
control:
|
||||
ip: "127.0.0.1"
|
||||
port: 9090
|
||||
```
|
||||
|
||||
插件的 control API 在默认情况下不支持参数匹配,如果想启用参数匹配功能可以在 control 部分添加 `router: 'radixtree_uri_with_parameter'`
|
||||
|
||||
注意:control API server 不应该被配置成监听公网地址。
|
||||
|
||||
## 通过插件添加的 control API
|
||||
|
||||
APISIX 中一些插件添加了自己的 control API。如果你对他们感兴趣,请参阅对应插件的文档。
|
||||
|
||||
## 独立于插件的 control API
|
||||
|
||||
以下是支持的 API:
|
||||
|
||||
### GET /v1/schema
|
||||
|
||||
引入自 2.2 版本
|
||||
|
||||
使用以下格式返回被该 APISIX 实例使用的 json schema:
|
||||
|
||||
```json
|
||||
{
|
||||
"main": {
|
||||
"route": {
|
||||
"properties": {...}
|
||||
},
|
||||
"upstream": {
|
||||
"properties": {...}
|
||||
},
|
||||
...
|
||||
},
|
||||
"plugins": {
|
||||
"example-plugin": {
|
||||
"consumer_schema": {...},
|
||||
"metadata_schema": {...},
|
||||
"schema": {...},
|
||||
"type": ...,
|
||||
"priority": 0,
|
||||
"version": 0.1
|
||||
},
|
||||
...
|
||||
},
|
||||
"stream-plugins": {
|
||||
"mqtt-proxy": {
|
||||
...
|
||||
},
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
只有启用了的插件才会被包含在返回结果中 `plugins` 部分。(返回结果中的)一些插件可能会缺失如 `consumer_schema` 或者 `type` 字段,这取决于插件的定义。
|
||||
|
||||
### GET /v1/healthcheck
|
||||
|
||||
引入自 2.3 版本
|
||||
|
||||
使用以下格式返回当前的 [health check](./tutorials/health-check.md) 状态
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"nodes": [
|
||||
{
|
||||
"ip": "52.86.68.46",
|
||||
"counter": {
|
||||
"http_failure": 0,
|
||||
"success": 0,
|
||||
"timeout_failure": 0,
|
||||
"tcp_failure": 0
|
||||
},
|
||||
"port": 80,
|
||||
"status": "healthy"
|
||||
},
|
||||
{
|
||||
"ip": "100.24.156.8",
|
||||
"counter": {
|
||||
"http_failure": 5,
|
||||
"success": 0,
|
||||
"timeout_failure": 0,
|
||||
"tcp_failure": 0
|
||||
},
|
||||
"port": 80,
|
||||
"status": "unhealthy"
|
||||
}
|
||||
],
|
||||
"name": "/apisix/routes/1",
|
||||
"type": "http"
|
||||
}
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
每个 entry 包含以下字段:
|
||||
|
||||
* name: 资源 ID,健康检查的报告对象。
|
||||
* type: 健康检查类型,取值为 `["http", "https", "tcp"]`。
|
||||
* nodes: 检查节点列表。
|
||||
* nodes[i].ip: IP 地址。
|
||||
* nodes[i].port: 端口。
|
||||
* nodes[i].status: 状态:`["healthy", "unhealthy", "mostly_healthy", "mostly_unhealthy"]`。
|
||||
* nodes[i].counter.success: 成功计数器。
|
||||
* nodes[i].counter.http_failure: HTTP 访问失败计数器。
|
||||
* nodes[i].counter.tcp_failure: TCP 连接或读写的失败计数器。
|
||||
* nodes[i].counter.timeout_failure: 超时计数器。
|
||||
|
||||
用户也可以通过 `/v1/healthcheck/$src_type/$src_id` 来获取指定 health checker 的状态。
|
||||
|
||||
例如,`GET /v1/healthcheck/upstreams/1` 返回:
|
||||
|
||||
```json
|
||||
{
|
||||
"nodes": [
|
||||
{
|
||||
"ip": "52.86.68.46",
|
||||
"counter": {
|
||||
"http_failure": 0,
|
||||
"success": 2,
|
||||
"timeout_failure": 0,
|
||||
"tcp_failure": 0
|
||||
},
|
||||
"port": 80,
|
||||
"status": "healthy"
|
||||
},
|
||||
{
|
||||
"ip": "100.24.156.8",
|
||||
"counter": {
|
||||
"http_failure": 5,
|
||||
"success": 0,
|
||||
"timeout_failure": 0,
|
||||
"tcp_failure": 0
|
||||
},
|
||||
"port": 80,
|
||||
"status": "unhealthy"
|
||||
}
|
||||
],
|
||||
"type": "http"
|
||||
"name": "/apisix/routes/1"
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
:::note
|
||||
|
||||
只有一个上游满足以下条件时,它的健康检查状态才会出现在结果里面:
|
||||
|
||||
* 上游配置了健康检查。
|
||||
* 上游在任何一个 worker 进程处理过客户端请求。
|
||||
|
||||
:::
|
||||
|
||||
如果你使用浏览器访问该 API,你将得到一个网页:
|
||||
|
||||

|
||||
|
||||
### POST /v1/gc
|
||||
|
||||
引入自 2.8 版本
|
||||
|
||||
在 http 子系统中触发一次全量 GC
|
||||
|
||||
注意,当你启用 stream proxy 时,APISIX 将为 stream 子系统运行另一个 Lua 虚拟机。它不会触发这个 Lua 虚拟机中的全量 GC。
|
||||
|
||||
### GET /v1/plugin_metadatas
|
||||
|
||||
引入自 3.0.0 版本
|
||||
|
||||
打印所有插件的元数据:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"log_format": {
|
||||
"upstream_response_time": "$upstream_response_time"
|
||||
},
|
||||
"id": "file-logger"
|
||||
},
|
||||
{
|
||||
"ikey": 1,
|
||||
"skey": "val",
|
||||
"id": "example-plugin"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### GET /v1/plugin_metadata/{plugin_name}
|
||||
|
||||
引入自 3.0.0 版本
|
||||
|
||||
打印指定插件的元数据:
|
||||
|
||||
```json
|
||||
{
|
||||
"log_format": {
|
||||
"upstream_response_time": "$upstream_response_time"
|
||||
},
|
||||
"id": "file-logger"
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user