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 標籤,然後點選右側的編輯圖示。

  1. 首先刪除原來的 SSL 私鑰。
  2. 將上一步生成的檔案 edge-node.key 的內容貼上到 “私鑰” 的文字框中。
  3. 將上一步生成的檔案 edge-node.crt 的內容貼上到 “伺服器證書” 的文字框中。
  4. 將上一步生成的 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 IDcc54a11e1bd32573a831a2ce175ea78c。 相應的公網 IP 地址是 192.168.122.196192.168.122.197。這些 IP 地址必須是公網 IP 地址而不是私網地址。這些 IP 地址必須存在於 Edge Node 上,否則 DNS 解析將得到錯誤的 IP 地址。這條記錄的交換域是 example.com, 這裡允許配置多個域名。

讓我們測試一下新新增的表項是否生效。

  1. 測試 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 中的域名。

傳送測試請求進行測試:

  1. 測試 DNS 解析,解析到 192.168.122.196 即是正確。

    dig cc54a11e1bd32573a831a2ce175ea78c.key.fx @192.168.122.196
    
  2. 測試代理服務

  • 獲取認證令牌

當應用伺服器向 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'
    

    以上命令傳送帶有 HostX-Exchange-DomainX-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 linkifconfig 獲得 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

監控指標

動態指標:

效能測試

測試環境:

均使用 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 整合到您的環境中:

  1. 把證書新增到 Application Servers 的信任證書列表中。
  2. 在 OpenResty Edge Admin 中新增域名對映記錄。
  3. Application Server 傳送請求到 OpenResty Edge Node。

您可以在此獲取證書:

更多