基於 YAML 檔案的 OpenResty Edge 配置映象
我們提供了一個命令列工具,用於支援基於本地 YAML 檔案配置更新 OpenResty Edge 中的配置,以及從 OpenResty Edge 中匯出配置到 yaml 檔案中。 本地配置中的應用配置按應用劃分,全域性配置按照分割槽劃分。每份本地配置與 OpenResty Edge 中的一個分割槽和一個應用對應。您可以使用 Git 等版本控制工具對本地配置進行管理。
請注意:該命令列工具僅支援企業版的 OpenResty Edge。
本文件將詳細介紹如何安裝和使用該工具。
安裝
安裝命令列工具所需的依賴項
pip3 install --upgrade openresty-edge-sdk ruamel.yaml pyOpenSSL jinja2
請確保
openresty-edge-sdk
的版本大於或等於1.2.60
。執行命令列工具
要檢視該命令列工具的使用方法,請執行以下命令:
edge-config -h
命令輸出如下(不同版本輸出可能略有差異):
usage: edge-config [-h] -t API_TOKEN -u ADMIN_URL [-s] [-i CONFIGS_PATH] [-e EMAIL_CONFIG_FILE] [-U USERS_CONFIG_PATH] [-F] [-l LOCATION] [-d DOMAIN] [-P EXPORT_TO_PATH] [-p PARTITION_ID | -n PARTITION_NAME] [-c | -E] Update or add OpenResty Edge configuration. optional arguments: -h, --help show this help message and exit -t API_TOKEN, --api-token API_TOKEN specify the API token for sending the request -u ADMIN_URL, --admin-url ADMIN_URL specify the URL of the OpenResty Edge Admin. For example, https://admin.com:443 -s, --disable-ssl-verify turn off SSL verification for requests to access OpenResty Edge Admin -i CONFIGS_PATH, --configs-path CONFIGS_PATH specify the path to the configuration file -e EMAIL_CONFIG_FILE, --email-config-file EMAIL_CONFIG_FILE specify the file to the email configuration; if not specified, the email.yaml file in the configuration path will be used -U USERS_CONFIG_PATH, --users-config-path USERS_CONFIG_PATH specify the path to the users configuration; if not specified, the users/ path in the configuration path will be used -F, --export-fake-privacy-info use placeholders in place of privacy information when exporting -l LOCATION, --location LOCATION specify the configuration name that needs to be updated, supported: page_rules, edgelang_rules, upstreams, k8s_upstreams, user_variables, ip_lists, waf_whitelist, basic_auth_groups, global_lua_modules, global_custom_actions, global_configs, global_page_templates, global_upstreams, global_k8s_upstreams, global_ip_lists, global_basic_auth_groups, global_static_files, k8s, users, all -d DOMAIN, --domain DOMAIN specify a domain name. When an HTTP application containing this domain exists, it will be updated; otherwise, a new application will be created -P EXPORT_TO_PATH, --export-to-path EXPORT_TO_PATH specify the storage path of the exported configuration. If not specified, a directory prefixed with configs will be automatically created in the current path. -p PARTITION_ID, --partition-id PARTITION_ID specify the id of the partition where you want to add or update the configuration -n PARTITION_NAME, --partition-name PARTITION_NAME specify the name of the partition where you want to add or update the configuration -c, --cleanup based on the location. This option allows for the cleanup of page rules, application upstreams, global user variables, and resetting the access log format for partitions. It can also be used independently of the location -E, --export export the configuration to the specified path, which can be specified through the --export-to-path option
透過指定
-p PARTITION_ID
或-n PARTITION_NAME
選項,您可以將配置更新到指定的分割槽。示例:
edge-config -t 3ed00172-280e-4e43-a4ef-3c2fae5669ca -u https://192.168.1.1 -s -i /path/of/configs -n default -d test.com
此命令將更新配置到預設分割槽(名稱為 default,id 為 1),如果 test.com 應用不存在,則會建立它。
如果遇到 No module named 'MODULE_NAME'
錯誤,請使用以下命令安裝相應的依賴項:
pip3 install MODULE_NAME
請將命令中的 MODULE_NAME
替換為實際的模組名稱。
建立 API 令牌
- 登入 OpenResty Edge 管理控制檯。
- 點選右上角的使用者名稱:USERNAME > API 令牌 > 建立 API 令牌 > 複製 API 令牌。
目錄結構介紹
該命令列工具可以識別以下結構的配置:
|-- configs/
|-- global_lua_modules/
|-- global_basic_auth_groups/
|-- global_custom_actions/
|-- global_ip_lists/
|-- global_upstreams/
|-- global_k8s_upstreams/
|-- global_page_templates/
|-- global_static_files/
|-- k8s/
|-- upstreams/
|-- k8s_upstreams/
|-- edgelang_rules/
|-- page_rules/
|-- basic_auth_groups/
|-- ip_lists/
|-- user_variables/
|-- waf_whitelist/
|-- users/
|-- global_configs.yaml
|-- app.yaml
|-- email.yaml
configs/
目錄包含了某個分割槽的所有配置。
全域性配置以 global_
作為字首:
global_lua_modules/
:全域性 Lua 模組,每個 Lua 檔案代表一個模組。global_basic_auth_groups/
:全域性 Basic 認證使用者組及使用者配置。global_custom_actions/
:全域性自定義動作。global_ip_lists/
:全域性 IP 列表。global_upstreams/
:全域性上游。global_k8s_upstreams/
:全域性 Kubernetes 上游。global_page_templates/
:全域性頁面模板。global_static_files/
:全域性靜態檔案。global_configs.yaml
:包括全域性配置,如全域性使用者變數、訪問日誌格式等。
應用配置沒有字首:
upstreams/
:上游伺服器資訊,可分割成多個檔案以便管理。page_rules/
:頁面規則,將被新增到與分割槽相關的 HTTP 應用中。basic_auth_groups/
:Basic 認證使用者組及使用者配置。k8s_upstreams/
:Kubernetes 上游伺服器資訊。edgelang_rules/
:頁面規則
介面中最前面和最後面的 Edgelang 規則。ip_lists/
:IP 列表資訊。user_variables/
:使用者變數資訊。waf_whitelist/
:WAF 白名單。app.yaml
:應用相關配置,如域名、訪問日誌格式。
其他沒有 global
字首的配置目錄:
users/
:要新增到 Edge Admin 中的使用者,建立成功後可傳送郵件通知。k8s/
:Kubernetes 叢集資訊。
所有這些配置目錄都是可選的,命令列工具不要求配置目錄必須存在。
匯入配置到 OpenResty Edge 的示例
將所有配置匯入到分割槽 1(default),當應用 test.com
不存在時,會建立應用:
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -i /path/of/configs -n default -d test.com
僅將頁面規則匯入到應用 “test.com”:
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -i /path/of/configs -n default -l page_rules -d test.com
從 OpenResty Edge 中匯出配置的示例
匯出配置到隨機生成的目錄中(目錄資訊將在命令列工具的第一行中輸出):
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -d test.com -E
匯出配置到指定的目錄中:
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -d test.com -E --export-to-path /tmp/edge-configs
從 OpenResty Edge 中刪除配置的示例
刪除 default
分割槽中 test.com
域名對應的應用,如果全域性配置沒有啟用“自動同步到其他分割槽”則還會清理分割槽配置:
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -i /path/of/configs -n default -d test.com -c
從應用 “test.com” 中移除所有頁面規則:
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -i /path/of/configs -n default -l page_rules -d test.com -c
從分割槽 1(預設)中移除所有 Lua 模組(當啟用"透過到所有分割槽"時,因為所有分割槽共享這些配置,因此將不會執行實際的刪除操作):
edge-config -t 6cc1cf09-1a39-4c17-8ed6-c11838edac12 \
-u https://192.168.1.1 -s -i /path/of/configs -n default -l global_lua_modules -c
配置示例
更多示例請參見基於 YAML 檔案的 OpenResty Edge 配置示例。
- enable_rule: true
actions:
set-access-log-off: {}
print:
content_type: text/html
msg: favicon.ico and robots.txt
exit:
code: 200
conditions:
- op: eq
var: uri
vals:
- /favicon.ico
- /robots.txt
order: 1
comment: ''
- enable_rule: true
actions:
- user-code:
el: |-
{
my Str $transid;
true =>
foreign-call(module: "example", func: "go"),
$transid = ctx-var("lm_transid"),
$or_global_user_variable_uuid = $transid,
done;
}
comment: ''
頁面規則是有序的,更新到 Edge Admin 時將保持配置檔案中的順序。此示例包括兩條頁面規則:
- 第一條規則判斷 URI 是否為
/favicon.ico
或/robots.txt
,如果是,則禁用訪問日誌並輸出指定內容。 - 第二條規則無條件執行一段 Edgelang 程式碼,該程式碼設定全域性使用者變數
$or_global_user_variable_uuid
。
所有頁面規則組成一個陣列,每條頁面規則都是陣列的一個元素。
錯誤訊息示例
對於配置檔案錯誤,命令列工具將嘗試提供提示,指出錯誤發生的具體行號。
[!] Error: invalid port in upstream upstream_name_foo: 70000, file: foo.yaml, line: 6.
此外還有一些其他錯誤,例如下面的錯誤表明輸入的配置路徑不正確,命令列工具無法找到該路徑。
[!] Error: bad configs path: /bad/path.
更多說明
該命令列工具有兩個模式。 當 OpenResty Edge 中的“全域性配置 > 通用配置”以及“全域性配置 > 全域性 Lua 模組”啟用了“自動同步到其他分割槽”時,為相容多本地配置的場景,更新或清理操作中,相關配置不會被重置或清理。 當沒有啟用時,意味著各個分割槽有各自的“全域性配置 > 通用配置”以及“全域性配置 > 全域性 Lua 模組”配置,因此更新或清理操作中,這些配置中多餘的配置將會被重置或清理。