OpenResty Edge 使用者手冊
安裝 OpenResty Edge
OpenResty Edge 的最新版本:22.12.1
。在安裝過程中,當被要求輸入 “OpenResty Edge “的版本號時,請輸入這個值。
請根據此文件的步驟安裝 OpenResty Edge:安裝 OpenResty Edge
更新 SSL 證書
生成 SSL 證書
用下面的 bash 指令碼生成 CA 根證書和 Edge Node 上使用的 “*.key.fx” 的泛域名證書。
# 1. 建立 CA 根證書和秘鑰
openssl req -x509 \
-sha256 -days 3650 \
-nodes \
-newkey rsa:4096 \
-subj "/CN=exchange-domain.com/C=US/L=San Fransisco" \
-keyout rootCA.key -out rootCA.crt
# 2. 生成伺服器的私鑰
openssl genrsa -out edge-node.key 2048
# 3. 建立證書籤名請求 (csr)
openssl req -new -sha256 -key edge-node.key -subj "/C=US/ST=CA/O=Organization, Inc./CN=*.key.fx" -out edge-node.csr
# 4. 使用 csr 和金鑰以及 CA 根金鑰來生成證書
openssl x509 -req -in edge-node.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out edge-node.crt -days 3650 -sha256
你可以直接使用上面的指令碼生成相關的證書。你也可以修改該指令碼,用更準確的資訊生成證書。
openssl req
的 -subj
引數格式是 “/type0=value0/type1=value1/type2=…"。
我們使用到的 type 欄位包括 C, L, O, CN。
C
代表國家程式碼,用兩個字母表示。你可以根據需要改變它。O
代表組織。你可以根據需要改變它。L
代表地點。我們通常使用城市作為這個引數的值。你可以根據需要改變它。ST
代表省。你可以根據需要改變它。CN
代表通用名稱,是你的邊緣節點的主機名。我們使用萬用字元域名*.key.fx
,請不要修改它。
執行該指令碼後,你將得到以下四個檔案:rootCA.key, rootCA.crt, edge-node.crt, edge-node.key。
rootCA.key 和 rootCA.crt 非常重要,請妥善儲存。如果你需要更新邊緣節點的證書,那麼你應該使用第一次生成的 rootCA.key 和 rootCA.crt。生成伺服器證書時,請根據需要設定有效期 -days 這個引數。
更新應用程式的證書
點選 OpenResty Edge Admin 控制檯左上方的應用標籤。
點選左側導航欄中的 SSL 標籤,然後點選右側的編輯圖示。
- 首先刪除原來的 SSL 私鑰。
- 將上一步生成的檔案 edge-node.key 的內容貼上到 “私鑰” 的文字框中。
- 將上一步生成的檔案 edge-node.crt 的內容貼上到 “伺服器證書” 的文字框中。
- 將上一步生成的 rootCA.crt 檔案的內容貼上到 “中級 CA 證書鏈” 的文字框中。
點選 OpenResty Edge Admin 控制檯右上方的工具提示 “你有 1 個未釋出變更待發布”。
點選 “釋出 1 個變更” 按鈕來發布該變更。
安裝結果驗證
假設你的 Edge Admin
管理站點的域名是my.edge-admin.com
。
我們登入到 Edge Admin
控制檯:https://my.admin.com 來進行操作。
如果您是第一次登入,請使用電子郵件中提供的使用者名稱和密碼。 如果你已經改變了你的密碼,那麼使用改變後的密碼。
批准新的節點
在一個新的 Edge Node
成功安裝後,新節點將自動註冊到Edge Admin
。
出於安全原因,新節點不能立即使用,需要由管理員批准後才能工作。
批准 Edge Node
節點加入叢集:閘道器叢集 > 候選節點 > Approve
在 API key ID 對映表中插入一個條目
點選 “Edge Admin “網路控制檯頂部的 “API Key ID Mapping Table”,然後點選右側的 “插入一條新的記錄”。
在域名對映表中插入資料:
讓我們插入一條新的記錄。這個記錄的API Key ID
是cc54a11e1bd32573a831a2ce175ea78c
。
相應的公網 IP 地址是 192.168.122.196
和 192.168.122.197
。這些 IP 地址必須是公網 IP 地址而不是私網地址。這些 IP 地址必須存在於 Edge Node
上,否則 DNS 解析將得到錯誤的 IP 地址。這條記錄的交換域是 example.com
, 這裡允許配置多個域名。
讓我們測試一下新新增的表項是否生效。
測試 DNS 解析。如果它解析到 192.168.122.196 或 192.168.122.197,那麼它是正確的。
dig cc54a11e1bd32573a831a2ce175ea78c.key.fx @192.168.122.196
引數
cc54a11e1bd32573a831a2ce175ea78c.key.fx
是我們要查詢的域名。 引數@192.168.122.196
告訴 dig 要查詢一個特定的域名伺服器。 邊緣節點 “也是一個 DNS 名稱伺服器。你可以查詢域名在 你可以透過Edge Node
的任何 IP 地址查詢API key ID mapping table
中的域名。
傳送測試請求進行測試:
測試 DNS 解析,解析到 192.168.122.196 即是正確。
dig cc54a11e1bd32573a831a2ce175ea78c.key.fx @192.168.122.196
測試代理服務
- 獲取認證令牌
當應用伺服器向 Edge Node
傳送 HTTP/HTTPS 請求時。
他們需要新增 X-Auth-Token
HTTP 頭,其中包含驗證令牌以驗證自己。
我們已經為每個客戶端預先建立了一個隨機的認證令牌。你可以根據需要修改這個預先建立的認證令牌。
點選 OpenResty Edge Admin
控制檯頂部的 User Variables
標籤。
傳送測試請求,得到 200 響應碼即為正確
curl -o /dev/null -iv http://192.168.122.196 \ -H 'Host: cc54a11e1bd32573a831a2ce175ea78c.key.fx' \ -H 'X-Exchange-Domain: example.com' \ -H 'X-Auth-Token: ldki408344kkgrc9ec28737616d0242'
以上命令傳送帶有
Host
、X-Exchange-Domain
和X-Auth-Token
HTTP 頭的 HTTP 請求。Host
頭的值由 API Key ID 和一個固定字尾key.fx
組成。換句話說,其格式是APIKEYID.key.fx
。如果缺少 API KEY ID,請求將返回 400 狀態程式碼。Exchange Domain
由 HTTP 頭X-Exchange-Domain
指定,是請求的真實域。如果缺少,請求將返回一個 400 狀態程式碼。X-Auth-Token
是用來驗證應用伺服器的合法性的。如果驗證失敗,那麼將返回 403 錯誤。
傳送一個 HTTPS 請求,如果返回 200 響應則表示驗證成功
curl -vi -o /dev/null --cacert RootCA.crt --resolve cc54a11e1bd32573a831a2ce175ea78c.key.fx:443:192.168.122.196 \ https://cc54a11e1bd32573a831a2ce175ea78c.key.fx \ -H 'X-Exchange-Domain: example.com' \ -H 'X-Auth-Token: ldki408344kkgrc9ec28737616d0242'
這是另一個使用 HTTPS 連線到 OpenResty Edge Node 的例子。
因為域名
*.key.fx
的證書是一個自簽名的證書。 所以當用 curl 傳送 HTTP 請求時,你需要使用--cacert
選項來指定 CA 證書。你也可以使用
-k
選項,在驗證部署時忽略證書檢查,但不要在生產中使用它。curl -vi -o /dev/null -k -resolve cc54a11e1bd32573a831a2ce175ea78c.key.fx:443:192.168.122.196 \ https://cc54a11e1bd32573a831a2ce175ea78c.key.fx \ -H 'X-Exchange-Domain: example.com' \ -H 'X-Auth-Token: ldki408344kkgrc9ec28737616d0242'
刪除 API key ID 對映表中的條目
你可以透過點選 api_key_id_mapping_table
中每一行右邊的刪除圖示來刪除一個條目。
修改 API key ID 對映表中的條目
你可以透過點選 api_key_id_mapping_table
中每一行右邊的編輯圖示來修改一個條目
日常使用與維護
建立 API Token
在使用 Python 指令碼之前,我們需要先配置一個 API Token 用於訪問 OpenResty Edge Admin。
- 進入 API Token 管理介面
- 新建並複製 Token
管理閘道器節點
批准閘道器節點加入閘道器叢集
使用示例:
python3 approve-node.py -u https://falconx.edge-admin.com -s -t '8f9e021-a014-4bea-afa1-bef57f02d768' -c 'default-cluster' -a '02:42:10:9a:30:ca
上述命令批准了 MAC 地址為 02:42:10:9a:30:ca
的閘道器節點。
該閘道器節點將加入名稱為 default-cluster
的閘道器叢集。
你可以在閘道器節點上使用 ip link
或 ifconfig
獲得 MAC 地址。
一般來說,同一資料中心的多臺機器可以組成一個閘道器叢集。
來自不同資料中心的機器不應該加入同一個閘道器叢集。
approve-node.py 指令碼支援以下引數。
-h
:顯示幫助資訊並退出。-t API_TOKEN
:指定用於訪問 OpenResty Edge Admin 的 API Token。-s
:不驗證 OpenResty Edge Admin 的證書。如果你的環境剛剛建立,並且你使用預設的自簽名證書,你需要指定這個選項。-p PARTITION_NAME
:指定分割槽名稱。預設是 “default” 分割槽。-c CLUSTER_NAME
:指定要加入的閘道器叢集的名稱。如果叢集不存在,它將被自動建立。-a MAC_ADDRESS
:指定要加入到閘道器叢集的閘道器節點的 MAC 地址。-l
:獲取候選閘道器節點列表並退出。
從叢集中刪除閘道器節點
使用示例:
python3 delete-node.py -u https://falconx.edge-admin.com -t 'ad92412f-fed9-432a-83b7-ad4bbb195407' -m '02:42:10:9a:30:ca' -s
上面的命令刪除了 MAC 地址為 02:42:10:9a:30:ca
的閘道器節點。
-s
引數禁用了 OpenResty Edge Admin 的證書校驗。
最好為 OpenResty Edge Admin
使用公開簽名的證書,不要指定-s
。
python3 delete-node.py -u https://falconx.edge-admin.com -t 'ad92412f-fed9-432a-83b7-ad4bbb195407' -m '02:42:10:9a:30:ca' -n 'node-amz-ny-1' -s
上面的命令刪除了 MAC 地址為 02:42:10:9a:30:ca
,名稱為 node-amz-ny-1 的閘道器節點。
delete-node.py 指令碼支援以下引數。
-h
:顯示幫助資訊並退出。-t API_TOKEN
:指定用於訪問 OpenResty Edge Admin 的 API Token。-s
:不驗證 OpenResty Edge Admin 的證書。如果你的環境剛剛建立,並且你使用預設的自簽名證書,你需要指定這個選項。-m MAC_ADDRESS
:指定要刪除的閘道器節點的 MAC 地址。當與-n
一起指定時,滿足兩個條件的節點將被刪除。-n NODE_NAME
:指定要刪除的閘道器節點的名稱。當與-m
一起指定時,只有滿足兩個條件的節點將被刪除。-l
: 獲取閘道器節點的列表並退出。
管理 API 金鑰 ID 對映表
插入資料
使用例子:
python3 insert-data.py -u https://falconx.edge-admin.com -t 'a273d477-54f5-4f49-9eff-7b0a57eb0f5e' -p 192.168.122.196 -a cc54a11e1bd32573a831a2ce175ea78c -e bit.com -e example.com -d ' example.com description" 。
上述命令插入了一條新的記錄,其 API 金鑰 ID 為 cc54a11e1bd32573a831a2ce175ea78c
,公網 IP 地址為 192.168.122.196
,兩個交換域為 bit.com example.com
。
insert-data.py 指令碼支援以下引數。
-h
: 顯示幫助資訊並退出。-t API_TOKEN
:指定用於訪問 OpenResty Edge Admin 的 API Token。-s
:不驗證 OpenResty Edge Admin 的證書。如果你的環境剛剛建立,並且你使用預設的自簽名證書,你需要指定這個選項。-a API_KEY_ID
:指定 API KEY ID。-p PUBLIC_IPS
:指定公網 IP。你可以多次使用該選項來指定多個值。-e EXCHANGE_DOMAINS
:指定 Exchange 域名。你可以多次使用這個選項來指定多個值。-d DESCRIPTION
:要插入的資料的描述。
更新資料
使用例子:
python3 update-data.py -u https://falconx.edge-admin.com -t 'a273d477-54f5-4f49-9eff-7b0a57eb0f5e' -a cc54a11e1bd32573a831a2ce175ea78c -e example.com -e bit.com -p 192.168.122.196 -p 192.168.122.197 -n d524afdfb8c30d200ea946a317d6df5e -s
上述命令更新了 API Key ID 為 cc54a11e1bd32573a831a2ce175ea78c
的記錄,其公網 IP 地址為 192.168.122.196
, 兩個交換域 bit.com example.com
。該記錄的描述將不會變化。
update-data.py 指令碼支援以下引數。
-h
:展示幫助資訊並退出。-t API_TOKEN
:指定用於訪問 OpenResty Edge Admin 的 API Token。-s
:不驗證 OpenResty Admin 的證書,如果您的環境剛搭建好,使用的預設的自簽名證書,則需要指定此選項。-a API_KEY_ID
:指定 API KEY ID。-n NEW_API_KEY_ID
:指定新的 API KEY ID,如果不需要修改,則不用指定。-p NEW_PUBLIC_IPS
:指定新的 Public IP,可輸入多次以指定多個值。-e NEW_EXCHANGE_DOMAINS
:指定新的 Exchange Domain,可輸入多次以指定多個值。-d NEW_DESCRIPTION
:新的描述。
獲取資料
select-data.py 指令碼支援以下引數:
-h
:展示幫助資訊並退出。-t API_TOKEN
:指定用於訪問 OpenResty Edge Admin 的 API Token。-s
:不驗證 OpenResty Edge Admin 的證書,如果您的環境剛搭建好,使用的預設的自簽名證書,則需要指定此選項。-a API_KEY_ID
:指定 API KEY ID,獲取與之相關的記錄。-p PAGE
:對結果進行分頁,獲取指定頁的結果。預設是 1。-g PAGE_SIZE
:對結果進行分頁,指定每頁大小。預設是 100。
使用示例:
# 獲取域名對映表第 1 頁的資料,每頁資料量為 100
python3 select-data.py -u https://falconx.edge-admin.com -t 'a273d477-54f5-4f49-9eff-7b0a57eb0f5e' -s
# 獲取域名對映表第 2 頁的資料,每頁資料量為 10
python3 select-data.py -u https://falconx.edge-admin.com -t 'a273d477-54f5-4f49-9eff-7b0a57eb0f5e' -s -p 2 -g 10
# 獲取指定 API KEY ID 的記錄
python3 select-data.py -u https://falconx.edge-admin.com -t 'a273d477-54f5-4f49-9eff-7b0a57eb0f5e' -s -a cc54a11e1bd32573a831a2ce175ea78c
刪除資料
delete-data.py 指令碼支援以下引數:
-h
:展示幫助資訊並退出。-t API_TOKEN
:指定用於訪問 OpenResty Admin 的 API Token。-s
:不驗證 OpenResty Admin 的證書,如果您的環境剛搭建好,使用的預設的自簽名證書,則需要指定此選項。-a API_KEY_ID
:指定要刪除的記錄的 API KEY ID。
使用示例:
# 刪除 API KEY ID 為 cc54a11e1bd32573a831a2ce175ea78c 的記錄
python3 delete-data.py -u https://falconx.edge-admin.com -t 'a273d477-54f5-4f49-9eff-7b0a57eb0f5e' -s -a cc54a11e1bd32573a831a2ce175ea78c
監控指標
動態指標:
- 我們提供了線上文件,請參考此文件:https://doc.openresty.com/en/edge/edge-admin/dashboard/dynamic-metrics。
效能測試
測試環境:
均使用 CPU:64x AMD Ryzen Threadripper 3970X。
- Client: Ubuntu 20.04, 2 Cores 4 GB RAM
- Upstream: Ubuntu 20.04, 4 Cores 8 GB RAM
- OpenResty Edge Node: Ubuntu 20.04, 2 Cores 4 GB RAM
測試結果:
- 延時:直接訪問上游,延時在 80 微秒左右;透過 OpenResty Edge 訪問上游,延時在 270 微秒左右。當 OpenResty Edge 中含有 7200 個對映資料時,延時在 300 微秒左右。
- RPS(每秒請求數):單核單 Worker 的 RPS 在 6700 以上。
整合到現有環境
您可以按以下步驟把 OpenResty Edge 整合到您的環境中:
- 把證書新增到 Application Servers 的信任證書列表中。
- 在 OpenResty Edge Admin 中新增域名對映記錄。
- Application Server 傳送請求到 OpenResty Edge Node。
您可以在此獲取證書: