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,555 @@
|
||||
---
|
||||
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.
|
||||
#
|
||||
-->
|
||||
|
||||
In Apache APISIX, the control API is used to:
|
||||
|
||||
* Expose the internal state of APISIX.
|
||||
* Control the behavior of a single, isolated APISIX data plane.
|
||||
|
||||
To change the default endpoint (`127.0.0.1:9090`) of the Control API server, change the `ip` and `port` in the `control` section in your configuration file (`conf/config.yaml`):
|
||||
|
||||
```yaml
|
||||
apisix:
|
||||
...
|
||||
enable_control: true
|
||||
control:
|
||||
ip: "127.0.0.1"
|
||||
port: 9090
|
||||
```
|
||||
|
||||
To enable parameter matching in plugin's control API, add `router: 'radixtree_uri_with_parameter'` to the control section.
|
||||
|
||||
**Note**: Never configure the control API server to listen to public traffic.
|
||||
|
||||
## Control API Added via Plugins
|
||||
|
||||
[Plugins](./terminology/plugin.md) can be enabled to add its control API.
|
||||
|
||||
Some Plugins have their own control APIs. See the documentation of the specific Plugin to learn more.
|
||||
|
||||
## Plugin Independent Control API
|
||||
|
||||
The supported APIs are listed below.
|
||||
|
||||
### GET /v1/schema
|
||||
|
||||
Introduced in [v2.2](https://github.com/apache/apisix/releases/tag/2.2).
|
||||
|
||||
Returns the JSON schema used by the APISIX instance:
|
||||
|
||||
```json
|
||||
{
|
||||
"main": {
|
||||
"route": {
|
||||
"properties": {...}
|
||||
},
|
||||
"upstream": {
|
||||
"properties": {...}
|
||||
},
|
||||
...
|
||||
},
|
||||
"plugins": {
|
||||
"example-plugin": {
|
||||
"consumer_schema": {...},
|
||||
"metadata_schema": {...},
|
||||
"schema": {...},
|
||||
"type": ...,
|
||||
"priority": 0,
|
||||
"version": 0.1
|
||||
},
|
||||
...
|
||||
},
|
||||
"stream-plugins": {
|
||||
"mqtt-proxy": {
|
||||
...
|
||||
},
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Note**: Only the enabled `plugins` are returned and they may lack fields like `consumer_schema` or `type` depending on how they were defined.
|
||||
|
||||
### GET /v1/healthcheck
|
||||
|
||||
Introduced in [v2.3](https://github.com/apache/apisix/releases/tag/2.3).
|
||||
|
||||
Returns a [health check](./tutorials/health-check.md) of the APISIX instance.
|
||||
|
||||
```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"
|
||||
}
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
Each of the returned objects contain the following fields:
|
||||
|
||||
* name: resource id, where the health checker is reporting from.
|
||||
* type: health check type: `["http", "https", "tcp"]`.
|
||||
* nodes: target nodes of the health checker.
|
||||
* nodes[i].ip: ip address.
|
||||
* nodes[i].port: port number.
|
||||
* nodes[i].status: health check result: `["healthy", "unhealthy", "mostly_healthy", "mostly_unhealthy"]`.
|
||||
* nodes[i].counter.success: success health check count.
|
||||
* nodes[i].counter.http_failure: http failures count.
|
||||
* nodes[i].counter.tcp_failure: tcp connect/read/write failures count.
|
||||
* nodes[i].counter.timeout_failure: timeout count.
|
||||
|
||||
You can also use `/v1/healthcheck/$src_type/$src_id` to get the health status of specific nodes.
|
||||
|
||||
For example, `GET /v1/healthcheck/upstreams/1` returns:
|
||||
|
||||
```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
|
||||
|
||||
Only when one upstream is satisfied by the conditions below,
|
||||
its status is shown in the result list:
|
||||
|
||||
* The upstream is configured with a health checker
|
||||
* The upstream has served requests in any worker process
|
||||
|
||||
:::
|
||||
|
||||
If you use browser to access the control API URL, then you will get the HTML output:
|
||||
|
||||

|
||||
|
||||
### POST /v1/gc
|
||||
|
||||
Introduced in [v2.8](https://github.com/apache/apisix/releases/tag/2.8).
|
||||
|
||||
Triggers a full garbage collection in the HTTP subsystem.
|
||||
|
||||
**Note**: When stream proxy is enabled, APISIX runs another Lua VM for the stream subsystem. Full garbage collection is not triggered in this VM.
|
||||
|
||||
### GET /v1/routes
|
||||
|
||||
Introduced in [v2.10.0](https://github.com/apache/apisix/releases/tag/2.10.0).
|
||||
|
||||
Returns all configured [Routes](./terminology/route.md):
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"value": {
|
||||
"priority": 0,
|
||||
"uris": [
|
||||
"/hello"
|
||||
],
|
||||
"id": "1",
|
||||
"upstream": {
|
||||
"scheme": "http",
|
||||
"pass_host": "pass",
|
||||
"nodes": [
|
||||
{
|
||||
"port": 1980,
|
||||
"host": "127.0.0.1",
|
||||
"weight": 1
|
||||
}
|
||||
],
|
||||
"type": "roundrobin",
|
||||
"hash_on": "vars"
|
||||
},
|
||||
"status": 1
|
||||
},
|
||||
"clean_handlers": {},
|
||||
"has_domain": false,
|
||||
"orig_modifiedIndex": 1631193445,
|
||||
"modifiedIndex": 1631193445,
|
||||
"key": "/routes/1"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### GET /v1/route/{route_id}
|
||||
|
||||
Introduced in [v2.10.0](https://github.com/apache/apisix/releases/tag/2.10.0).
|
||||
|
||||
Returns the Route with the specified `route_id`:
|
||||
|
||||
```json
|
||||
{
|
||||
"value": {
|
||||
"priority": 0,
|
||||
"uris": [
|
||||
"/hello"
|
||||
],
|
||||
"id": "1",
|
||||
"upstream": {
|
||||
"scheme": "http",
|
||||
"pass_host": "pass",
|
||||
"nodes": [
|
||||
{
|
||||
"port": 1980,
|
||||
"host": "127.0.0.1",
|
||||
"weight": 1
|
||||
}
|
||||
],
|
||||
"type": "roundrobin",
|
||||
"hash_on": "vars"
|
||||
},
|
||||
"status": 1
|
||||
},
|
||||
"clean_handlers": {},
|
||||
"has_domain": false,
|
||||
"orig_modifiedIndex": 1631193445,
|
||||
"modifiedIndex": 1631193445,
|
||||
"key": "/routes/1"
|
||||
}
|
||||
```
|
||||
|
||||
### GET /v1/services
|
||||
|
||||
Introduced in [v2.11.0](https://github.com/apache/apisix/releases/tag/2.11.0).
|
||||
|
||||
Returns all the Services:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"has_domain": false,
|
||||
"clean_handlers": {},
|
||||
"modifiedIndex": 671,
|
||||
"key": "/apisix/services/200",
|
||||
"createdIndex": 671,
|
||||
"value": {
|
||||
"upstream": {
|
||||
"scheme": "http",
|
||||
"hash_on": "vars",
|
||||
"pass_host": "pass",
|
||||
"type": "roundrobin",
|
||||
"nodes": [
|
||||
{
|
||||
"port": 1980,
|
||||
"weight": 1,
|
||||
"host": "127.0.0.1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"create_time": 1634552648,
|
||||
"id": "200",
|
||||
"plugins": {
|
||||
"limit-count": {
|
||||
"key": "remote_addr",
|
||||
"time_window": 60,
|
||||
"redis_timeout": 1000,
|
||||
"allow_degradation": false,
|
||||
"show_limit_quota_header": true,
|
||||
"policy": "local",
|
||||
"count": 2,
|
||||
"rejected_code": 503
|
||||
}
|
||||
},
|
||||
"update_time": 1634552648
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### GET /v1/service/{service_id}
|
||||
|
||||
Introduced in [v2.11.0](https://github.com/apache/apisix/releases/tag/2.11.0).
|
||||
|
||||
Returns the Service with the specified `service_id`:
|
||||
|
||||
```json
|
||||
{
|
||||
"has_domain": false,
|
||||
"clean_handlers": {},
|
||||
"modifiedIndex": 728,
|
||||
"key": "/apisix/services/5",
|
||||
"createdIndex": 728,
|
||||
"value": {
|
||||
"create_time": 1634554563,
|
||||
"id": "5",
|
||||
"upstream": {
|
||||
"scheme": "http",
|
||||
"hash_on": "vars",
|
||||
"pass_host": "pass",
|
||||
"type": "roundrobin",
|
||||
"nodes": [
|
||||
{
|
||||
"port": 1980,
|
||||
"weight": 1,
|
||||
"host": "127.0.0.1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"update_time": 1634554563
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### GET /v1/upstreams
|
||||
|
||||
Introduced in [v2.11.0](https://github.com/apache/apisix/releases/tag/2.11.0).
|
||||
|
||||
Dumps all Upstreams:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"value":{
|
||||
"scheme":"http",
|
||||
"pass_host":"pass",
|
||||
"nodes":[
|
||||
{
|
||||
"host":"127.0.0.1",
|
||||
"port":80,
|
||||
"weight":1
|
||||
},
|
||||
{
|
||||
"host":"foo.com",
|
||||
"port":80,
|
||||
"weight":2
|
||||
}
|
||||
],
|
||||
"hash_on":"vars",
|
||||
"update_time":1634543819,
|
||||
"key":"remote_addr",
|
||||
"create_time":1634539759,
|
||||
"id":"1",
|
||||
"type":"chash"
|
||||
},
|
||||
"has_domain":true,
|
||||
"key":"\/apisix\/upstreams\/1",
|
||||
"clean_handlers":{
|
||||
},
|
||||
"createdIndex":938,
|
||||
"modifiedIndex":1225
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### GET /v1/upstream/{upstream_id}
|
||||
|
||||
Introduced in [v2.11.0](https://github.com/apache/apisix/releases/tag/2.11.0).
|
||||
|
||||
Dumps the Upstream with the specified `upstream_id`:
|
||||
|
||||
```json
|
||||
{
|
||||
"value":{
|
||||
"scheme":"http",
|
||||
"pass_host":"pass",
|
||||
"nodes":[
|
||||
{
|
||||
"host":"127.0.0.1",
|
||||
"port":80,
|
||||
"weight":1
|
||||
},
|
||||
{
|
||||
"host":"foo.com",
|
||||
"port":80,
|
||||
"weight":2
|
||||
}
|
||||
],
|
||||
"hash_on":"vars",
|
||||
"update_time":1634543819,
|
||||
"key":"remote_addr",
|
||||
"create_time":1634539759,
|
||||
"id":"1",
|
||||
"type":"chash"
|
||||
},
|
||||
"has_domain":true,
|
||||
"key":"\/apisix\/upstreams\/1",
|
||||
"clean_handlers":{
|
||||
},
|
||||
"createdIndex":938,
|
||||
"modifiedIndex":1225
|
||||
}
|
||||
```
|
||||
|
||||
### GET /v1/plugin_metadatas
|
||||
|
||||
Introduced in [v3.0.0](https://github.com/apache/apisix/releases/tag/3.0.0).
|
||||
|
||||
Dumps all plugin_metadatas:
|
||||
|
||||
```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}
|
||||
|
||||
Introduced in [v3.0.0](https://github.com/apache/apisix/releases/tag/3.0.0).
|
||||
|
||||
Dumps the metadata with the specified `plugin_name`:
|
||||
|
||||
```json
|
||||
{
|
||||
"log_format": {
|
||||
"upstream_response_time": "$upstream_response_time"
|
||||
},
|
||||
"id": "file-logger"
|
||||
}
|
||||
```
|
||||
|
||||
### PUT /v1/plugins/reload
|
||||
|
||||
Introduced in [v3.9.0](https://github.com/apache/apisix/releases/tag/3.9.0)
|
||||
|
||||
Triggers a hot reload of the plugins.
|
||||
|
||||
```shell
|
||||
curl "http://127.0.0.1:9090/v1/plugins/reload" -X PUT
|
||||
```
|
||||
|
||||
### GET /v1/discovery/{service}/dump
|
||||
|
||||
Get memory dump of discovered service endpoints and configuration details:
|
||||
|
||||
```json
|
||||
{
|
||||
"endpoints": [
|
||||
{
|
||||
"endpoints": [
|
||||
{
|
||||
"value": "{\"https\":[{\"host\":\"172.18.164.170\",\"port\":6443,\"weight\":50},{\"host\":\"172.18.164.171\",\"port\":6443,\"weight\":50},{\"host\":\"172.18.164.172\",\"port\":6443,\"weight\":50}]}",
|
||||
"name": "default/kubernetes"
|
||||
},
|
||||
{
|
||||
"value": "{\"metrics\":[{\"host\":\"172.18.164.170\",\"port\":2379,\"weight\":50},{\"host\":\"172.18.164.171\",\"port\":2379,\"weight\":50},{\"host\":\"172.18.164.172\",\"port\":2379,\"weight\":50}]}",
|
||||
"name": "kube-system/etcd"
|
||||
},
|
||||
{
|
||||
"value": "{\"http-85\":[{\"host\":\"172.64.89.2\",\"port\":85,\"weight\":50}]}",
|
||||
"name": "test-ws/testing"
|
||||
}
|
||||
],
|
||||
"id": "first"
|
||||
}
|
||||
],
|
||||
"config": [
|
||||
{
|
||||
"default_weight": 50,
|
||||
"id": "first",
|
||||
"client": {
|
||||
"token": "xxx"
|
||||
},
|
||||
"service": {
|
||||
"host": "172.18.164.170",
|
||||
"port": "6443",
|
||||
"schema": "https"
|
||||
},
|
||||
"shared_size": "1m"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## GET /v1/discovery/{service}/show_dump_file
|
||||
|
||||
Get configured services details.
|
||||
|
||||
```json
|
||||
{
|
||||
"services": {
|
||||
"service_a": [
|
||||
{
|
||||
"host": "172.19.5.12",
|
||||
"port": 8000,
|
||||
"weight": 120
|
||||
},
|
||||
{
|
||||
"host": "172.19.5.13",
|
||||
"port": 8000,
|
||||
"weight": 120
|
||||
}
|
||||
]
|
||||
},
|
||||
"expire": 0,
|
||||
"last_update": 1615877468
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user