Edge Microgateway 的作業和設定參考資料

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。
info

Edge Microgateway 3.3.x 版

本主題說明如何管理及設定 Edge Microgateway。

在連上網際網路連線的情況下升級 Edge Microgateway

本節說明如何升級現有的 Edge Microgateway 安裝。如果是在沒有網際網路連線的情況下操作,請參閱「可以在沒有網際網路連線的情況下安裝 Edge Microgateway 嗎?」。

Apigee 建議您先使用新版本測試現有設定,再升級正式環境。

  1. 執行下列 npm 指令,升級至最新版本 Edge Microgateway:
    npm upgrade edgemicro -g

    如要安裝特定版本的 Edge Microgateway,您必須在安裝指令中指定版本號碼。舉例來說,如要安裝 3.2.3 版,請使用下列指令:

    npm install edgemicro@3.2.3 -g
  2. 查看版本號碼。舉例來說,如果您安裝的是 3.2.3 版:
    edgemicro --version
    current nodejs version is v12.5.0
    current edgemicro version is 3.2.3
        
  3. 最後,請升級至最新版本的 edgemicro-auth Proxy:
    edgemicro upgradeauth -o $ORG -e $ENV -u $USERNAME

變更設定

您需要瞭解的設定檔包括:

  • 預設系統設定檔
  • 新初始化 Edge Microgateway 執行個體的預設設定檔
  • 執行個體的動態設定檔

本節將討論這些檔案,以及變更這些檔案時需要瞭解的事項。

預設系統設定檔

安裝 Edge Microgateway 時,預設系統設定檔會放在以下位置:

prefix/lib/node_modules/edgemicro/config/default.yaml

其中 prefix 是 npm 前置字元目錄。如果找不到這個目錄,請參閱「Edge Microgateway 的安裝位置」。

如果變更系統設定檔,必須重新初始化、重新設定及重新啟動 Edge Microgateway:

edgemicro init
edgemicro configure [params]
edgemicro start [params]

新初始化 Edge Microgateway 執行個體的預設設定檔

執行 edgemicro init 時,系統設定檔 (如上所述) default.yaml 會放在 ~/.edgemicro 目錄中。

如果您變更 ~/.edgemicro 中的設定檔,則必須重新設定並重新啟動 Edge Microgateway:

edgemicro stop
edgemicro configure [params]
edgemicro start [params]

執行個體的動態設定檔

執行 edgemicro configure [params] 時,系統會在 ~/.edgemicro 中建立動態設定檔。檔案會依據以下模式命名:org-env-config.yaml,其中 org 和 env 是您的 Apigee Edge 組織和環境名稱。您可以使用這個檔案變更設定,然後重新載入設定,完全不會造成停機。舉例來說,如果您新增並設定外掛程式,可以重新載入設定,而不會造成任何停機時間,如下所述。

如果 Edge Microgateway 正在執行 (零停機時間選項):

  1. 重新載入 Edge Microgateway 設定:
    edgemicro reload -o $ORG -e $ENV -k $KEY -s $SECRET

    其中:

    • $ORG 是您的 Edge 組織名稱 (您必須是組織管理員)。
    • $ENV 是貴組織中的環境 (例如「test」或「prod」)。
    • $KEY 是 configure 指令先前傳回的金鑰。
    • $SECRET 是 configure 指令先前傳回的金鑰。

    例如

    edgemicro reload -o docs -e test -k 701e70ee718ce6dc188...78b6181d000723 \
      -s 05c14356e42ed1...4e34ab0cc824

如果 Edge Microgateway 已停止:

  1. 重新啟動 Edge Microgateway:
    edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET

    其中:

    • $ORG 是您的 Edge 組織名稱 (您必須是組織管理員)。
    • $ENV 是貴組織中的環境 (例如「測試」或「正式環境」)。
    • $KEY 是 configure 指令先前傳回的金鑰。
    • $SECRET 是 configure 指令先前傳回的金鑰。

    例如:

    edgemicro start -o docs -e test -k 701e70ee718ce...b6181d000723 \
      -s 05c1435...e34ab0cc824

以下是設定檔範例。如要進一步瞭解設定檔設定,請參閱「Edge Microgateway 設定參考資料」。

edge_config:
  bootstrap: >-
    https://edgemicroservices-us-east-1.apigee.net/edgemicro/bootstrap/organization/docs/environment/test
  jwt_public_key: 'https://docs-test.apigee.net/edgemicro-auth/publicKey'
  managementUri: 'https://api.enterprise.apigee.com'
  vaultName: microgateway
  authUri: 'https://%s-%s.apigee.net/edgemicro-auth'
  baseUri: >-
    https://edgemicroservices.apigee.net/edgemicro/%s/organization/%s/environment/%s
  bootstrapMessage: Please copy the following property to the edge micro agent config
  keySecretMessage: The following credentials are required to start edge micro
  products: 'https://docs-test.apigee.net/edgemicro-auth/products'
edgemicro:
  port: 8000
  max_connections: 1000
  max_connections_hard: 5000
  config_change_poll_interval: 600
  logging:
    level: error
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24
  plugins:
    sequence:
      - oauth
headers:
  x-forwarded-for: true
  x-forwarded-host: true
  x-request-id: true
  x-response-time: true
  via: true
oauth:
  allowNoAuthorization: false
  allowInvalidAuthorization: false
  verify_api_key_url: 'https://docs-test.apigee.net/edgemicro-auth/verifyApiKey'
analytics:
  uri: >-
    https://edgemicroservices-us-east-1.apigee.net/edgemicro/axpublisher/organization/docs/environment/test

設定環境變數

需要 Edge 組織和環境值的指令列介面指令,以及啟動 Edge Microgateway 所需的金鑰和密鑰,可以儲存在下列環境變數中:

  • EDGEMICRO_ORG
  • EDGEMICRO_ENV
  • EDGEMICRO_KEY
  • EDGEMICRO_SECRET

您可以選擇是否設定這些變數。設定這些變數後,使用指令列介面 (CLI) 設定及啟動 Edge Microgateway 時,就不必指定這些變數的值。

在 Edge Microgateway 伺服器上設定 SSL

觀看下列影片,瞭解如何在 Apigee Edge Microgateway 中設定 TLS:

影片 說明
設定單向 Northbound TLS 瞭解如何在 Apigee Edge Microgateway 中設定 TLS。 這部影片提供 TLS 及其重要性的總覽、介紹 Edge Microgateway 中的 TLS,並示範如何設定 Northbound 單向 TLS。
設定雙向 Northbound TLS 這是第二部影片,說明如何在 Apigee Edge Microgateway 中設定 TLS。這部影片說明如何設定北向雙向 TLS。
設定單向和雙向南向 TLS 這部影片是 Apigee Edge Microgateway TLS 設定教學的第三部分,說明如何設定南向單向和雙向 TLS。

您可以將 Microgateway 伺服器設為使用 SSL。舉例來說,設定 SSL 後,您可以使用「https」通訊協定透過 Edge Microgateway 呼叫 API,如下所示:

https://localhost:8000/myapi

如要在 Microgateway 伺服器上設定 SSL,請按照下列步驟操作:

  1. 使用 openssl 公用程式或您偏好的方法,產生或取得 SSL 憑證和金鑰。
  2. 在 Edge Microgateway 設定檔中加入 edgemicro:ssl 屬性。如需完整選項清單,請參閱下表。例如:
    edgemicro:
      ssl:
       key: <absolute path to the SSL key file>
       cert: <absolute path to the SSL cert file>
       passphrase: admin123 #option added in v2.2.2
       rejectUnauthorized: true #option added in v2.2.2
       requestCert: true
  3. 重新啟動 Edge Microgateway。根據您編輯的設定檔 (預設檔案或執行階段設定檔),按照「變更設定」一節所述的步驟操作。

以下是設定檔中 edgemicro 區段的範例,其中已設定 SSL:

edgemicro:
  port: 8000
  max_connections: 1000
  max_connections_hard: 5000
  logging:
    level: error
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24
  plugins:
    sequence:
      - oauth
  ssl:
    key: /MyHome/SSL/em-ssl-keys/server.key
    cert: /MyHome/SSL/em-ssl-keys/server.crt
    passphrase: admin123 #option added in v2.2.2
    rejectUnauthorized: true #option added in v2.2.2

以下是所有支援的伺服器選項清單:

選項 說明
key ca.key 檔案的路徑 (PEM 格式)。
cert ca.cert 檔案的路徑 (PEM 格式)。
pfx pfx 檔案的路徑,其中包含 PFX 格式的用戶端私密金鑰、憑證和 CA 憑證。
passphrase 包含私密金鑰或 PFX 通關密語的字串。
ca 檔案路徑,內含 PEM 格式的信任憑證清單。
ciphers 描述要使用的加密編譯字串,以「:」分隔。
rejectUnauthorized 如果設為 true,系統會根據提供的 CA 清單驗證伺服器憑證。如果驗證失敗,系統會傳回錯誤。
secureProtocol 要使用的 SSL 方法。例如 SSLv3_method,強制將 SSL 設為第 3 版。
servername SNI (伺服器名稱指示) TLS 擴充功能的伺服器名稱。
requestCert true 代表雙向 SSL;false 代表單向 SSL

使用用戶端 SSL/TLS 選項

您可以將 Edge Microgateway 設為 TLS 或 SSL 用戶端,以便連線至目標端點。在 Microgateway 設定檔中,使用 targets 元素設定 SSL/TLS 選項。請注意,您可以指定多個特定目標。以下是多目標範例。

以下範例提供的設定會套用至所有主機:

edgemicro:
...
targets:
  ssl:
    client:
      key: /Users/jdoe/nodecellar/twowayssl/ssl/client.key
      cert: /Users/jdoe/nodecellar/twowayssl/ssl/ca.crt
      passphrase: admin123
      rejectUnauthorized: true

在這個範例中,設定只會套用至指定的主機:

edgemicro:
...
targets:
  - host: 'myserver.example.com'
    ssl:
      client:
        key: /Users/myname/twowayssl/ssl/client.key
        cert: /Users/myname/twowayssl/ssl/ca.crt
        passphrase: admin123
        rejectUnauthorized: true

以下是 TLS 的範例:

edgemicro:
...
targets:
  - host: 'myserver.example.com'
    tls:
      client:
        pfx: /Users/myname/twowayssl/ssl/client.pfx
        passphrase: admin123
        rejectUnauthorized: true

如要將傳輸層安全標準 (TLS)/安全資料傳輸層 (SSL) 設定套用至多個特定目標,您必須將設定中的第一個主機指定為「空白」,以便啟用通用要求,然後再以任意順序指定特定主機。在本範例中,設定會套用至多個特定主機:

targets:
 - host:   ## Note that this value must be "empty"
   ssl:
     client:
       key: /Users/myname/twowayssl/ssl/client.key
       cert: /Users/myname/twowayssl/ssl/ca.crt
       passphrase: admin123
       rejectUnauthorized: true
 - host: 'myserver1.example.com'
   ssl:
     client:
       key: /Users/myname/twowayssl/ssl/client.key
       cert: /Users/myname/twowayssl/ssl/ca.crt
       rejectUnauthorized: true
 - host: 'myserver2.example.com'
   ssl:
     client:
       key: /Users/myname/twowayssl/ssl/client.key
       cert: /Users/myname/twowayssl/ssl/ca.crt
       rejectUnauthorized: true

以下是所有支援的用戶端選項清單:

選項 說明
pfx pfx 檔案的路徑,其中包含 PFX 格式的用戶端私密金鑰、憑證和 CA 憑證。
key ca.key 檔案的路徑 (PEM 格式)。
passphrase 包含私密金鑰或 PFX 通關密語的字串。
cert ca.cert 檔案的路徑 (PEM 格式)。
ca 檔案路徑,內含 PEM 格式的信任憑證清單。
ciphers 描述要使用的加密編譯字串,以「:」分隔。
rejectUnauthorized 如果設為 true,系統會根據提供的 CA 清單驗證伺服器憑證。如果驗證失敗,系統會傳回錯誤。
secureProtocol 要使用的 SSL 方法。例如 SSLv3_method,強制將 SSL 設為第 3 版。
servername SNI (伺服器名稱指示) TLS 擴充功能的伺服器名稱。

自訂 edgemicro-auth Proxy

根據預設,Edge Microgateway 會使用部署在 Apigee Edge 上的 Proxy 進行 OAuth2 驗證。初次執行 edgemicro configure 時,系統會部署這個 Proxy。您可以變更這個 Proxy 的預設設定,為 JSON Web Token (JWT) 新增自訂宣告支援、設定權杖到期時間,以及產生更新權杖。詳情請參閱 GitHub 的 edgemicro-auth 頁面。

使用自訂驗證服務

根據預設,Edge Microgateway 會使用部署在 Apigee Edge 上的 Proxy 進行 OAuth2 驗證。初次執行 edgemicro configure 時,系統會部署這個 Proxy。根據預設,這個 Proxy 的網址會在 Edge Microgateway 設定檔中指定,如下所示:

authUri: https://myorg-myenv.apigee.net/edgemicro-auth

如要使用自己的自訂服務處理驗證,請變更設定檔中的 authUri 值,指向您的服務。舉例來說,您可能有一項服務使用 LDAP 驗證身分。

管理記錄檔

Edge Microgateway 會記錄每個要求和回應的相關資訊。記錄檔提供實用的偵錯和疑難排解資訊。

記錄檔的儲存位置

根據預設,記錄檔會儲存在 /var/tmp。

如何變更預設記錄檔目錄

記錄檔的儲存目錄是在 Edge Microgateway 設定檔中指定。另請參閱「變更設定」。

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

變更 dir 值,指定其他記錄檔目錄。

將記錄傳送至控制台

您可以設定記錄功能,將記錄資訊傳送至標準輸出內容,而非記錄檔。將 to_console 旗標設為 true,如下所示:

edgemicro:
  logging:
    to_console: true

這項設定會將記錄傳送至標準輸出。目前無法同時將記錄傳送至 stdout 和記錄檔。

如何設定記錄層級

您可以在 edgemicro 設定中指定要使用的記錄層級。如需記錄層級及其說明的完整清單,請參閱「edgemicro 屬性」。

舉例來說,下列設定會將記錄層級設為 debug:

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: debug
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

如何變更記錄間隔

您可以在 Edge Microgateway 設定檔中設定這些間隔。另請參閱「變更設定」。

可設定的屬性如下:

  • stats_log_interval:(預設:60) 統計資料記錄寫入 API 記錄檔的時間間隔,以秒為單位。
  • rotate_interval:(預設:24) 記錄檔輪替間隔,以小時為單位。例如:
edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

如何放寬嚴格的記錄檔權限

根據預設,Edge Microgateway 會產生應用程式記錄檔 (api-log.log),並將檔案權限層級設為 0600。這個權限層級不允許外部應用程式或使用者讀取記錄檔。如要放寬這項嚴格的權限層級,請將 logging:disableStrictLogFile 設為 true。如果這個屬性為 true,系統會建立記錄檔,並將檔案權限設為 0755。如果 false 或未提供屬性,權限預設為 0600。

於 3.2.3 版新增。

舉例來說:

edgemicro:
 logging:
   disableStrictLogFile: true

記錄檔維護最佳做法

記錄檔資料會隨著時間累積,因此 Apigee 建議您採取下列做法:

  • 記錄檔可能會變得相當大,因此請務必確保記錄檔目錄有足夠的空間。請參閱「記錄檔儲存位置」和「如何變更預設記錄檔目錄」兩節。
  • 每週至少刪除或移動記錄檔至獨立的封存目錄一次。
  • 如果您的政策是刪除記錄,可以使用 CLI 指令 edgemicro log -c 移除 (清除) 舊記錄。

記錄檔命名慣例

每個 Edge Microgateway 執行個體都會產生副檔名為 .log 的記錄檔。記錄檔的命名慣例如下:

edgemicro-HOST_NAME-INSTANCE_ID-api.log

舉例來說:

edgemicro-mymachine-local-MTQzNTgNDMxODAyMQ-api.log

關於記錄檔內容

新增版本:2.3.3

根據預設,記錄服務會省略下載的 Proxy、產品和 JSON Web Token (JWT) 的 JSON。如要將這些物件輸出至控制台,請在啟動 Edge Microgateway 時設定指令列旗標 DEBUG=*。例如:

DEBUG=* edgemicro start -o docs -e test -k abc123 -s xyz456

「api」記錄檔的內容

「api」記錄檔包含透過 Edge Microgateway 傳送的要求和回應流程詳細資訊。「api」記錄檔的命名方式如下:

edgemicro-mymachine-local-MTQzNjIxOTk0NzY0Nw-api.log

對於向 Edge Microgateway 提出的每項要求,「api」記錄檔會擷取四個事件:

  • 來自用戶端的傳入要求
  • 向目標發出傳出要求
  • 來自目標的傳入回應
  • 傳送給用戶端的回應

每個獨立項目都會以簡短標記表示,讓記錄檔更精簡。以下是四個範例項目,分別代表四個事件。在記錄檔中,這些行看起來像這樣 (行號僅供文件內參照用,不會顯示在記錄檔中)。

(1) 1436403888651 info req m=GET, u=/, h=localhost:8000, r=::1:59715, i=0
(2) 1436403888665 info treq m=GET, u=/, h=127.0.0.18080, i=0
(3) 1436403888672 info tres s=200, d=7, i=0
(4) 1436403888676 info res s=200, d=11, i=0

以下逐一介紹:

1. 用戶端傳入要求範例:

1436403888651 info req m=GET, u=/, h=localhost:8000, r=::1:59715, i=0
  • 1436403888651 - Unix 日期戳記
  • info:記錄層級。這個值取決於交易情境和 edgemicro 設定中的記錄層級。請參閱「如何設定記錄層級」。 統計資料記錄的層級設為 stats。系統會按照 stats_log_interval 設定的固定間隔回報統計資料記錄。另請參閱「如何變更記錄間隔」。
  • req:用於識別事件。在本例中,是來自用戶端的要求。
  • m:要求中使用的 HTTP 動詞。
  • u:網址中基本路徑後方的部分。
  • h:Edge Microgateway 監聽的主機和通訊埠號碼。
  • r:用戶端要求來源的遠端主機和通訊埠。
  • i:要求 ID。這四個事件項目都會共用這個 ID。每項要求都會指派專屬的要求 ID。依要求 ID 建立記錄檔記錄的關聯,可深入瞭解目標的延遲時間。
  • d:Edge Microgateway 收到要求後經過的時間長度 (以毫秒為單位)。在上述範例中,系統在 7 毫秒後收到目標對要求 0 的回應 (第 3 行),並在 4 毫秒後將回應傳送給用戶端 (第 4 行)。換句話說,總要求延遲時間為 11 毫秒,其中 7 毫秒由目標耗用,4 毫秒由 Edge Microgateway 本身耗用。

2. 傳送至目標的傳出要求範例:

1436403888665 info treq m=GET, u=/, h=127.0.0.1:8080, i=0
  • 1436403888651 - Unix 日期戳記
  • info:記錄層級。這個值取決於交易情境和 edgemicro 設定中的記錄層級。請參閱「如何設定記錄層級」。 統計資料記錄的層級設為 stats。系統會按照 stats_log_interval 設定的固定間隔回報統計資料記錄。另請參閱「如何變更記錄間隔」。
  • treq:用於識別事件。在這個案例中,目標是要求。
  • m:目標要求中使用的 HTTP 動詞。
  • u:網址中基本路徑後方的部分。
  • h:後端目標的主機和通訊埠號碼。
  • i:記錄項目的 ID。這四個事件項目都會共用這個 ID。

3. 來自目標的傳入回應範例

1436403888672 info tres s=200, d=7, i=0

1436403888651 - Unix 日期戳記

  • info:記錄層級。這個值取決於交易情境和 edgemicro 設定中的記錄層級。請參閱「如何設定記錄層級」。 統計資料記錄的層級設為 stats。系統會按照 stats_log_interval 設定的固定間隔回報統計資料記錄。另請參閱「如何變更記錄間隔」。
  • tres:識別事件。在這個例子中,目標是回應。
  • s:HTTP 回應狀態。
  • d:時間長度 (以毫秒為單位)。目標呼叫 API 所需的時間。
  • i:記錄項目的 ID。這四個事件項目都會共用這個 ID。

4. 傳送給用戶端的回應範例

1436403888676 info res s=200, d=11, i=0

1436403888651 - Unix 日期戳記

  • info:記錄層級。這個值取決於交易情境和 edgemicro 設定中的記錄層級。請參閱「如何設定記錄層級」。 統計資料記錄的層級設為 stats。系統會按照 stats_log_interval 設定的固定間隔回報統計資料記錄。另請參閱「如何變更記錄間隔」。
  • res:識別事件。在這種情況下,請回應用戶端。
  • s:HTTP 回應狀態。
  • d:時間長度 (以毫秒為單位)。這是 API 呼叫所花費的總時間,包括目標 API 所花費的時間,以及 Edge Microgateway 本身所花費的時間。
  • i:記錄項目的 ID。這四個事件項目都會共用這個 ID。

記錄檔排程

記錄檔會按照 rotate_interval 設定屬性指定的時間間隔輪替。系統會持續將項目新增至同一個記錄檔,直到輪替間隔到期為止。不過,每次重新啟動 Edge Microgateway 時,都會收到新的 UID,並建立一組含有這個 UID 的新記錄檔。另請參閱「記錄檔維護最佳做法」。

錯誤訊息

部分記錄項目會包含錯誤訊息。如要找出錯誤發生的位置和原因,請參閱 Edge Microgateway 錯誤參考資料。

Edge Microgateway 設定參考資料

設定檔的位置

本節說明的設定屬性位於 Edge Microgateway 設定檔中。另請參閱「變更設定」。

edge_config 屬性

這些設定用於設定 Edge Microgateway 執行個體與 Apigee Edge 之間的互動。

  • bootstrap:(預設:無) 指向 Apigee Edge 上執行的 Edge Microgateway 專屬服務的網址。Edge Microgateway 會使用這項服務與 Apigee Edge 通訊。執行指令產生公開/私密金鑰組時,系統會傳回這個網址:edgemicro genkeys。詳情請參閱「設定 Edge Microgateway」。
  • jwt_public_key:(預設:無) 指向部署於 Apigee Edge 的 Edge Microgateway Proxy 的網址。這個 Proxy 是驗證端點,可向用戶端核發已簽署的存取權杖。執行指令部署 Proxy 時,系統會傳回這個網址:edgemicro configure。詳情請參閱「設定 Edge Microgateway」。
  • quotaUri:如要透過部署至貴機構的 edgemicro-auth Proxy 管理配額,請設定這項設定屬性。如未設定這項屬性,配額端點會預設為內部 Edge Microgateway 端點。
    edge_config:
      quotaUri: https://your_org-your_env.apigee.net/edgemicro-auth
    

edgemicro 屬性

這些設定會設定 Edge Microgateway 程序。

  • port:(預設:8000) Edge Microgateway 程序監聽的通訊埠編號。
  • max_connections:(預設值:-1) 指定 Edge Microgateway 可接收的傳入連線數量上限。如果超過這個數量,系統會傳回下列狀態:

    res.statusCode = 429; // Too many requests
  • max_connections_hard:(預設值:-1) Edge Microgateway 在關閉連線前可接收的並行要求數量上限。這項設定旨在防範阻斷服務攻擊。通常會設為大於 max_connections 的數字。
  • logging:
    • level:(預設:error)
      • info - (建議) 記錄所有通過 Edge Microgateway 執行個體的要求和回應。
      • warn:僅記錄警告訊息。
      • error:僅記錄錯誤訊息。
      • debug:記錄偵錯記錄檔,以及資訊、警告和錯誤訊息。
      • trace:記錄錯誤的追蹤資訊,以及資訊、警告和錯誤訊息。
      • none:不建立記錄檔。
    • dir:(預設:/var/tmp) 儲存記錄檔的目錄。
    • stats_log_interval:(預設:60) 統計資料記錄寫入 API 記錄檔的時間間隔,以秒為單位。
    • rotate_interval:(預設:24) 記錄檔輪替間隔,以小時為單位。
  • plugins:外掛程式可為 Edge Microgateway 新增功能。如要進一步瞭解如何開發外掛程式,請參閱「開發自訂外掛程式」。
  • dir:從 ./gateway 目錄到 ./plugins 目錄的相對路徑,或絕對路徑。
  • sequence:要新增至 Edge Microgateway 執行個體的外掛程式模組清單。模組會按照這裡指定的順序執行。
  • debug:在 Edge Microgateway 程序中新增遠端偵錯功能。
    • port:要監聽的通訊埠編號。例如,將 IDE 偵錯工具設為監聽這個通訊埠。
    • args:偵錯程序的引數。例如:args --nolazy
  • config_change_poll_interval: (預設:600 秒) Edge Microgateway 會定期載入新設定,並在有任何變更時執行重新載入。輪詢會擷取 Edge 上的任何變更 (產品、Microgateway 感知 Proxy 等變更),以及本機設定檔的變更。
  • disable_config_poll_interval: (預設:false) 設為 true 即可關閉自動變更輪詢。
  • request_timeout:設定目標要求的逾時時間。逾時時間以秒為單位。如果發生逾時,Edge Microgateway 會傳回 504 狀態碼。(2.4.x 版新增)
  • keep_alive_timeout:這項屬性可讓您設定 Edge Microgateway 逾時時間 (以毫秒為單位)。(預設:5 秒) (3.0.6 版新增)
  • headers_timeout:這項屬性會限制 HTTP 剖析器等待接收完整 HTTP 標頭的時間 (以毫秒為單位)。

    例如:

    edgemicro:
      keep_alive_timeout: 6000
      headers_timeout: 12000

    在內部,這個參數會設定要求的 Node.js Server.headersTimeout 屬性。(預設值:比 edgemicro.keep_alive_timeout 設定的時間多 5 秒。這項預設設定可防止負載平衡器或 Proxy 錯誤地捨棄連線。(3.1.1 版新增)

  • noRuleMatchAction:(字串) 如果 accesscontrol 外掛程式中指定的比對規則未解析 (不相符),則要採取的動作 (允許或拒絕存取)。有效值:ALLOW 或 DENY 預設值:ALLOW (新增:v3.1.7)
  • enableAnalytics:(預設:true) 將屬性設為 false,即可防止載入數據分析外掛程式。在這種情況下,系統不會呼叫 Apigee Edge 數據分析。如果設為 true,或未提供這項屬性,數據分析外掛程式會照常運作。詳情請參閱 edgemicro 屬性。(3.1.8 版新增)。

    範例:

    edgemicro
      enableAnalytics=false|true
  • on_target_response_abort:這項屬性可讓您控制用戶端 (Edge Microgateway) 與目標伺服器之間的連線過早關閉時,Edge Microgateway 的行為。
    值 說明
    預設 如果未指定 on_target_response_abort,預設行為是截斷回應,不顯示錯誤。在記錄檔中,警告訊息會顯示 targetResponse aborted 和 502 回應代碼。
    appendErrorToClientResponseBody 自訂錯誤 TargetResponseAborted 會傳回用戶端。在記錄檔中,警告訊息會顯示 targetResponse aborted 和 502 回應代碼。此外,系統會記錄錯誤 TargetResponseAborted,並顯示訊息 Target response ended prematurely.
    abortClientRequest Edge Microgateway 會取消要求,並將警告寫入記錄檔:TargetResponseAborted,要求狀態碼為 502。

範例:

edgemicro:
 on_target_response_abort: appendErrorToClientResponseBody | abortClientRequest

headers 屬性

這些設定可決定特定 HTTP 標頭的處理方式。

  • x-forwarded-for:(預設值:true) 設為 false,防止 x-forwarded-for 標頭傳遞至目標。請注意,如果要求中含有 x-forwarded-for 標頭,其值會設為 Edge Analytics 中的 client-ip 值。
  • x-forwarded-host:(預設:true) 設為 false,防止 x-forwarded-host 標頭傳遞至目標。
  • x-request-id:(預設:true) 設為 false,可防止 x-request-id 標頭傳遞至目標。
  • x-response-time:(預設:true) 設為 false,可防止 x-response-time 標頭傳遞至目標。
  • via:(預設值:true) 設為 false,可防止透過標頭傳遞至目標。

oauth 屬性

這些設定可設定 Edge Microgateway 強制執行用戶端驗證的方式。

  • allowNoAuthorization:(預設:false) 如果設為 true,API 呼叫就能在沒有任何授權標頭的情況下通過 Edge Microgateway。如果設為 false,則必須提供授權標頭 (預設)。
  • allowInvalidAuthorization:(預設值:false) 如果設為 true,即使授權標頭中傳遞的權杖無效或已過期,系統仍會允許 API 呼叫通過。如要要求有效權杖,請將這個值設為 false (預設)。
  • authorization-header:(預設:Authorization: Bearer) 用於將存取權杖傳送至 Edge Microgateway 的標頭。如果目標需要將授權標頭用於其他用途,建議您變更預設值。
  • api-key-header:(預設:x-api-key) 用於將 API 金鑰傳遞至 Edge Microgateway 的標頭或查詢參數名稱。另請參閱「使用 API 金鑰」。
  • keep-authorization-header:(預設值:false) 如果設為 true,要求中傳送的授權標頭會傳遞至目標 (保留)。
  • allowOAuthOnly:如果設為 true,每個 API 都必須包含含有 Bearer 存取權杖的授權標頭。允許您只允許 OAuth 安全性模型 (同時維持回溯相容性)。(2.4.x 版新增)
  • allowAPIKeyOnly:如果設為 true,每個 API 都必須包含 x-api-key 標頭 (或自訂位置) 和 API 金鑰。可讓您僅允許 API 金鑰安全性模型 (同時維持回溯相容性)。(2.4.x 新增)
  • gracePeriod:這個參數有助於避免因系統時鐘與 JWT 授權權杖中指定的「不早於」(nbf) 或「核發時間」(iat) 時間略有差異而導致錯誤。請將這個參數設為允許這類差異的秒數。(2.5.7 版新增)

外掛程式專屬屬性

如要進一步瞭解各外掛程式的可設定屬性,請參閱「使用外掛程式」。

篩選 Proxy

您可以篩選 Edge Microgateway 執行個體要處理哪些支援 Microgateway 的 Proxy。Edge Microgateway 啟動時,會下載相關聯組織中所有可辨識 Microgateway 的 Proxy。請使用下列設定,限制微型閘道會處理哪些 Proxy。舉例來說,這項設定會將 Microgateway 處理的 Proxy 數量限制為三個:edgemicro_proxy-1、edgemicro_proxy-2 和 edgemicro_proxy-3:

edgemicro:
  proxies:
  - edgemicro_proxy-1
  - edgemicro_proxy-2
  - edgemicro_proxy-3

依名稱篩選產品

使用下列設定,限制 Edge Microgateway 下載及處理的 API 產品數量。如要篩選下載的產品,請將 productnamefilter 查詢參數新增至 Edge Microgateway *.config.yaml 檔案中列出的 /products API。例如:

edge_config:
  bootstrap: >-
    https://edgemicroservices.apigee.net/edgemicro/bootstrap/organization/willwitman/environment/test
  jwt_public_key: 'https://myorg-test.apigee.net/edgemicro-auth/publicKey'
  managementUri: 'https://api.enterprise.apigee.com'
  vaultName: microgateway
  authUri: 'https://%s-%s.apigee.net/edgemicro-auth'
  baseUri: >-
    https://edgemicroservices.apigee.net/edgemicro/%s/organization/%s/environment/%s
  bootstrapMessage: Please copy the following property to the edge micro agent config
  keySecretMessage: The following credentials are required to start edge micro
  products: 'https://myorg-test.apigee.net/edgemicro-auth/products?productnamefilter=%5E%5BEe%5Ddgemicro.%2A%24'

請注意,查詢參數的值必須以規則運算式格式指定,並經過網址編碼。舉例來說,規則運算式 ^[Ee]dgemicro.*$ 會擷取「edgemicro-test-1」、「edgemicro_demo」和「Edgemicro_New_Demo」等名稱。網址編碼值 (適用於查詢參數) 為:%5E%5BEe%5Ddgemicro.%2A%24。

以下偵錯輸出內容顯示,系統只下載了篩選後的產品:

...
2020-05-27T03:13:50.087Z [76060] [microgateway-config network] products download from https://gsc-demo-prod.apigee.net/edgemicro-auth/products?productnamefilter=%5E%5BEe%5Ddgemicro.%2A%24 returned 200 OK
...
....
....
{
   "apiProduct":[
      {
         "apiResources":[

         ],
         "approvalType":"auto",
         "attributes":[
            {
               "name":"access",
               "value":"public"
            }
         ],
         "createdAt":1590549037549,
         "createdBy":"k***@g********m",
         "displayName":"test upper case in name",
         "environments":[
            "prod",
            "test"
         ],
         "lastModifiedAt":1590549037549,
         "lastModifiedBy":"k***@g********m",
         "name":"Edgemicro_New_Demo",
         "proxies":[
            "catchall"
         ],
         "quota":"null",
         "quotaInterval":"null",
         "quotaTimeUnit":"null",
         "scopes":[

         ]
      },
      {
         "apiResources":[

         ],
         "approvalType":"auto",
         "attributes":[
            {
               "name":"access",
               "value":"public"
            }
         ],
         "createdAt":1590548328998,
         "createdBy":"k***@g********m",
         "displayName":"edgemicro test 1",
         "environments":[
            "prod",
            "test"
         ],
         "lastModifiedAt":1590548328998,
         "lastModifiedBy":"k***@g********m",
         "name":"edgemicro-test-1",
         "proxies":[
            "Lets-Encrypt-Validation-DoNotDelete"
         ],
         "quota":"null",
         "quotaInterval":"null",
         "quotaTimeUnit":"null",
         "scopes":[

         ]
      },
      {
         "apiResources":[
            "/",
            "/**"
         ],
         "approvalType":"auto",
         "attributes":[
            {
               "name":"access",
               "value":"public"
            }
         ],
         "createdAt":1558182193472,
         "createdBy":"m*********@g********m",
         "displayName":"Edge microgateway demo product",
         "environments":[
            "prod",
            "test"
         ],
         "lastModifiedAt":1569077897465,
         "lastModifiedBy":"m*********@g********m",
         "name":"edgemicro_demo",
         "proxies":[
            "edgemicro-auth",
            "edgemicro_hello"
         ],
         "quota":"600",
         "quotaInterval":"1",
         "quotaTimeUnit":"minute",
         "scopes":[

         ]
      }
   ]
}

依自訂屬性篩選產品

如要根據自訂屬性篩選產品,請按照下列步驟操作:

  1. 在 Edge UI 中,選取您設定 Edge Microgateway 的組織/環境中的 edgemicro_auth Proxy。
  2. 在「Develop」分頁中,於編輯器開啟 JavaCallout 政策。
  3. 新增自訂屬性,並使用鍵 products.filter.attributes 和以半形逗號分隔的屬性名稱清單。只有包含任何自訂屬性名稱的產品,才會傳回 Edge Microgateway。
  4. 您可以選擇停用檢查,方法是將自訂屬性 products.filter.env.enable 設為 false,查看產品是否已在目前環境中啟用。(預設值為 true)。
  5. (僅限 私有雲) 如果您使用的是 Edge for Private Cloud,請將屬性 org.noncps 設為 true,以便提取非 CPS 環境的產品。
  6. 例如:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout">
        <DisplayName>JavaCallout</DisplayName>
        <FaultRules/>
        <Properties>
            <Property name="products.filter.attributes">attrib.one, attrib.two</Property>
            <Property name="products.filter.env.enable">false</Property>
            <Property name="org.noncps">true</Property>
        </Properties>
        <ClassName>io.apigee.microgateway.javacallout.Callout</ClassName>
        <ResourceURL>java://micro-gateway-products-javacallout-2.0.0.jar</ResourceURL>
    </JavaCallout>

依撤銷狀態篩選產品

API 產品有三種狀態碼:待處理、已核准和已撤銷。edgemicro-auth Proxy 的「Set JWT Variables」政策中新增了名為 allowProductStatus 的屬性。如要使用這項屬性篩選 JWT 中列出的 API 產品,請按照下列步驟操作:

  1. 在 Apigee Proxy 編輯器中開啟 edgemicro-auth Proxy。
  2. 將 allowProductStatus 屬性新增至 SetJWTVariables 政策的 XML,並指定以半形逗號分隔的狀態碼清單,以便篩選。舉例來說,如要篩選「待處理」和「已撤銷」狀態:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript timeLimit="20000" async="false" continueOnError="false"
        enabled="true" name="Set-JWT-Variables">
        <DisplayName>Set JWT Variables</DisplayName>
        <FaultRules/>
        <Properties>
            <Property name="allowProductStatus">Pending,Revoked</Property>
        </Properties>
        <ResourceURL>jsc://set-jwt-variables.js</ResourceURL>
    </Javascript>

    如果只想列出「已核准」的產品,請按照下列方式設定屬性:

    <Property name="allowProductStatus">Approved</Property>
  3. 儲存 Proxy。

    如果沒有 Property 標記,JWT 會列出所有狀態碼的產品。

    如要使用這項新屬性,您必須升級 edgemicro-auth Proxy。

設定數據分析推送頻率

使用這些設定參數,控制 Edge Microgateway 將數據分析資料傳送至 Apigee 的頻率:

  • bufferSize (選用):緩衝區可容納的數據分析記錄數量上限,超過上限後,系統會開始捨棄最舊的記錄。預設:10000
  • batchSize (選用):傳送至 Apigee 的數據分析記錄批次大小上限。預設:500
  • flushInterval (選用):每次清除傳送至 Apigee 的一批數據分析記錄之間的時間間隔 (以毫秒為單位)。預設:5000

例如:

analytics:
  bufferSize: 15000
  batchSize: 1000
  flushInterval: 6000

遮蓋數據分析資料

下列設定可防止要求路徑資訊顯示在 Edge 數據分析中。在 Microgateway 設定中新增下列內容,遮蓋要求 URI 和/或要求路徑。請注意,URI 是由要求的主機名稱和路徑部分組成。

analytics:
  mask_request_uri: 'string_to_mask'
  mask_request_path: 'string_to_mask'

在 Edge Analytics 中區隔 API 呼叫

您可以設定數據分析外掛程式,區隔特定 API 路徑,使其在 Edge Analytics 資訊主頁中顯示為獨立 Proxy。舉例來說,您可以在資訊主頁中區隔健康狀態檢查 API,以免與實際的 API Proxy 呼叫混淆。在 Analytics 資訊主頁中,隔離的 Proxy 會遵循下列命名模式:

edgemicro_proxyname-health

下圖顯示 Analytics 資訊主頁中的兩個獨立 Proxy:edgemicro_hello-health 和 edgemicro_mock-health:

使用這些參數,在 Analytics 資訊主頁中將相對路徑和絕對路徑區隔為不同的 Proxy:

  • relativePath (選用):指定要在 Analytics 資訊主頁中區隔的相對路徑。舉例來說,如果您指定 /healthcheck,所有包含路徑 /healthcheck 的 API 呼叫都會在資訊主頁中顯示為 edgemicro_proxyname-health。請注意,這個旗標會忽略 Proxy 基本路徑。 如要根據完整路徑 (包括基本路徑) 區隔,請使用 proxyPath 旗標。
  • proxyPath (選用):指定完整的 API Proxy 路徑 (包括 Proxy 基本路徑),以便在數據分析資訊主頁中區隔。舉例來說,如果您指定 /mocktarget/healthcheck (其中 /mocktarget 是 Proxy 基本路徑),則所有路徑為 /mocktarget/healthcheck 的 API 呼叫都會在資訊主頁中顯示為 edgemicro_proxyname-health。

舉例來說,在下列設定中,任何包含 /healthcheck 的 API 路徑都會由數據分析外掛程式分隔。也就是說,/foo/healthcheck 和 /foo/bar/healthcheck 會在數據分析資訊主頁中,分隔為名為 edgemicro_proxyname-health 的獨立 Proxy。

analytics:
  uri: >-
    https://xx/edgemicro/ax/org/docs/environment/test
  bufferSize: 100
  batchSize: 50
  flushInterval: 500
  relativePath: /healthcheck

在下列設定中,任何 Proxy 路徑為 /mocktarget/healthcheck 的 API,都會在數據分析資訊主頁中,隔離為名為 edgemicro_proxyname-health 的獨立 Proxy。

analytics:
  uri: >-
    https://xx/edgemicro/ax/org/docs/environment/test
  bufferSize: 100
  batchSize: 50
  flushInterval: 500
  proxyPath: /mocktarget/healthcheck

在公司防火牆後方設定 Edge Microgateway

使用 HTTP Proxy 與 Apigee Edge 通訊

3.1.2 版新增。

如要使用 HTTP Proxy 進行 Edge Microgateway 和 Apigee Edge 之間的通訊,請按照下列步驟操作:

  1. 設定環境變數 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY。這些變數會控制您要用於與 Apigee Edge 通訊的每個 HTTP Proxy 主機,或哪些主機不應處理與 Apigee Edge 的通訊。例如:
    export HTTP_PROXY='http://localhost:3786'
    export HTTPS_PROXY='https://localhost:3786'
    export NO_PROXY='localhost,localhost:8080'

    請注意,NO_PROXY 可以是以半形逗號分隔的網域清單,Edge Microgateway 不應將流量轉送至這些網域。

    如要進一步瞭解這些變數,請參閱 https://www.npmjs.com/package/request#controlling-proxy-behaviour-using-environment-variables

  2. 重新啟動 Edge Microgateway。

使用 HTTP Proxy 進行目標通訊

3.1.2 版新增。

如要使用 HTTP Proxy 在 Edge Microgateway 和後端目標之間進行通訊,請按照下列步驟操作:

  1. 在 Microgateway 設定檔中加入下列設定:
    edgemicro:
      proxy:
        tunnel: true | false
        url: proxy_url
        bypass: target_host # target hosts to bypass the proxy.
        enabled: true | false

    其中:

    • tunnel:(選用) 如果設為 true,Edge Microgateway 會使用 HTTP CONNECT 方法,透過單一 TCP 連線建立 HTTP 要求的通道。(如果用於設定 Proxy 的環境變數 (如下所述) 已啟用 TLS,也適用相同情況)。預設值:false
    • url:HTTP Proxy 網址。
    • bypass:(選用) 指定一或多個應略過 HTTP Proxy 的目標主機網址,並以半形逗號分隔。如未設定這項屬性,請使用 NO_PROXY 環境變數指定要略過哪些目標網址。
    • enabled:如果設為 true 且已設定 proxy.url,則會將 proxy.url 值用於 HTTP Proxy。 如果設為 true 且未設定 proxy.url,則會使用 HTTP Proxy 環境變數 HTTP_PROXY 和 HTTPS_PROXY 中指定的 Proxy,如「使用 HTTP Proxy 與 Apigee Edge 通訊」一文所述。

    例如:

    edgemicro:
      proxy:
        tunnel: true
        url: 'http://localhost:3786'
        bypass: 'localhost','localhost:8080' # target hosts to bypass the proxy.
        enabled: true

  2. 重新啟動 Edge Microgateway。

在 Microgateway 感知 Proxy 中使用萬用字元

您可以在 edgemicro_* (Microgateway 感知) Proxy 的基本路徑中,使用一或多個「*」萬用字元。舉例來說,如果基本路徑為 /team/*/members,用戶端就能呼叫 https://[host]/team/blue/members 和 https://[host]/team/green/members,您不必建立新的 API Proxy 來支援新團隊。請注意,不支援 /**/。

重要事項:Apigee 不支援使用萬用字元「*」做為基本路徑的第一個元素。舉例來說,系統不支援 /*/ 搜尋。

輪替 JWT 金鑰

在您初次產生 JWT 後,可能需要變更儲存在 Edge 加密 KVM 中的公開/私密金鑰組。產生新金鑰組的程序稱為金鑰輪替。

Edge Microgateway 如何使用 JWT

JSON Web Token (JWT) 是 RFC7519 中所述的權杖標準。JWT 可用來簽署一組憑證附加資訊,JWT 接收者可以可靠地驗證這些資訊。

您可以使用 CLI 產生 JWT,並在 API 呼叫的授權標頭中使用,而非 API 金鑰。例如:

curl -i http://localhost:8000/hello -H "Authorization: Bearer eyJhbGciOiJ..dXDefZEA"

如要瞭解如何使用 CLI 產生 JWT,請參閱「產生權杖」。

什麼是金鑰輪替?

在您初次產生 JWT 後,可能需要變更儲存在 Edge 加密 KVM 中的公開/私密金鑰組。產生新金鑰組的程序稱為金鑰輪替。輪替金鑰時,系統會產生新的私密/公開金鑰組,並儲存在 Apigee Edge 組織/環境中的「microgateway」KVM。此外,舊的公開金鑰會與原始金鑰 ID 值一併保留。

Edge 會使用儲存在加密 KVM 中的資訊來產生 JWT。在您初次設定 Edge Microgateway 時,系統會建立名為 microgateway 的 KVM,並填入金鑰。KVM 中的金鑰用於簽署及加密 JWT。

KVM 鍵包括:

  • private_key:用於簽署 JWT 的最新 (最近建立) RSA 私密金鑰。

  • public_key:最新 (最近建立) 的憑證,用於驗證以 private_key 簽署的 JWT。

  • private_key_kid:最新 (最近建立) 的私密金鑰 ID。這個金鑰 ID 與 private_key 值相關聯,用於支援金鑰輪替。

  • public_key1_kid:最新 (最近建立) 的公開金鑰 ID。這個金鑰與 public_key1 值相關聯,用於支援金鑰輪替。這個值與私密金鑰 kid 相同。

  • public_key1:最新 (最近建立) 的公開金鑰。

執行金鑰輪替時,對應中的現有金鑰值會遭到替換,並新增金鑰來保留舊的公開金鑰。例如:

  • public_key2_kid:舊公開金鑰 ID。這個金鑰與 public_key2 值相關聯,用於支援金鑰輪替。

  • public_key2:舊的公開金鑰。

系統會使用新的公開金鑰驗證 JWT。如果驗證失敗,系統會使用舊的公開金鑰,直到 JWT 到期 (在 token_expiry* 間隔後,預設為 30 分鐘)。這樣一來,您就能「輪替」金鑰,而不會立即中斷 API 流量。

如何輪替金鑰

本節說明如何執行金鑰輪替。

  1. 如要升級 KVM,請使用 edgemicro upgradekvm 指令。如要進一步瞭解如何執行這項指令,請參閱「升級 KVM」。這個步驟只需要執行一次。
  2. 如要升級 edgemicro-oauth Proxy,請使用 edgemicro upgradeauth 指令。如要進一步瞭解如何執行這項指令,請參閱「升級 edgemicro-auth Proxy」。這個步驟只需要執行一次。
  3. 在 ~/.edgemicro/org-env-config.yaml 檔案中新增下列程式碼,並指定您設定微閘道使用的組織和環境:
    jwk_public_keys: 'https://$ORG-$ENV.apigee.net/edgemicro-auth/jwkPublicKeys'
  4. 執行金鑰輪替指令,輪替金鑰。如要進一步瞭解這個指令,請參閱「輪替金鑰」。

    edgemicro rotatekey -o $ORG -e $ENV -k $KEY -s $SECRET

    例如:

    edgemicro rotatekey -o docs -e test \
    -k 27ee39567c75e4567a66236cbd4e86d1cc93df6481454301bd5fac4d3497fcbb \
    -s 4618b0008a6185d7327ebf53bee3c50282ccf45a3cceb1ed9828bfbcf1148b47
    

金鑰輪替後,Edge 會將多個金鑰傳回 Edge Microgateway。請注意,在以下範例中,每個金鑰都有專屬的「kid」(金鑰 ID) 值。接著,Microgateway 會使用這些金鑰驗證授權權杖。如果權杖驗證失敗,Microgateway 會查看金鑰組中是否有舊金鑰,並嘗試使用該金鑰。傳回的金鑰格式為 JSON Web Key (JWK)。如要瞭解這種格式,請參閱 RFC 7517。

{
  "keys": [
    {
      "kty": "RSA",
      "n": "nSl7R_0wKLiWi6cO3n8aOJwYGBtinq723Jgg8i7KKWTSTYoszOjgGsJf_MX4JEW1YCScwpE5o4o8ccQN09iHVTlIhk8CNiMZNPipClmRVjaL_8IWvMQp1iN66qy4ldWXzXnHfivUZZogCkBNqCz7VSC5rw2Jf57pdViULVvVDGwTgf46sYveW_6h8CAGaD0KLd3vZffxIkoJubh0yMy0mQP3aDOeIGf_akeZeZ6GzF7ltbKGd954iNTiKmdm8IKhz6Y3gLpC9iwQ-kex_j0CnO_daHl1coYxUSCIdv4ziWIeM3dmjQ5_2dEvUDIGG6_Az9hTpNgPE5J1tvrOHAmunQ",
      "e": "AQAB",
      "kid": "2"
    },
    {
      "kty": "RSA",
      "n": "8BKwzx34BMUcHwTuQtmp8LFRCMxbkKg_zsWD6eOMIUTAsORexTGJsTy7z-4aH0wJ3fT-3luAAUPLBQwGcuHo0P1JnbtPrpuYjaJKSZOeIMOnlryJCspmv-1xG4qAqQ9XaZ9C97oecuj7MMoNwuaZno5MvsY-oi5B_gqED3vIHUjaWCErd4reONyFSWn047dvpE6mwRhZbcOTkAHT8ZyKkHISzopkFg8CD-Mij12unxA3ldcTV7yaviXgxd3eFSD1_Z4L7ZRsDUukCJkJ-8qY2-GWjewzoxl-mAW9D1tLK6qAdc89yFem3JHRW6L1le3YK37-bs6b2a_AqJKsKm5bWw",
      "e": "AQAB",
      "kid": "1"
    }
  ]
}

設定「不早於」延遲時間

在 3.1.5 以下版本中,由 rotatekey 指令產生的新私密金鑰會立即生效,而產生的新權杖會以新的私密金鑰簽署。不過,只有在微閘道設定重新整理時,新的公開金鑰才會提供給 Edge Microgateway 執行個體,預設頻率為每 10 分鐘一次。由於權杖簽署和 Microgateway 執行個體重新整理之間存在延遲,因此在所有執行個體收到最新的公開金鑰之前,使用最新金鑰簽署的權杖都會遭到拒絕。

如果有多個微閘道執行個體,公開金鑰延遲有時會導致間歇性執行階段錯誤,狀態為 403,因為權杖驗證會在一個執行個體上通過,但在另一個執行個體上失敗,直到所有執行個體都重新整理為止。

從 3.1.6 版開始,rotatekey 指令的新旗標可讓您指定新私密金鑰生效的延遲時間,讓所有微閘道執行個體有時間重新整理並接收新的公開金鑰。新旗標為 --nbf,代表「不早於」。這個旗標會採用整數值,代表延遲的分鐘數。

在以下範例中,延遲時間設為 15 分鐘:

edgemicro rotatekey -o docs -e test \
-k 27ee39567c75e4567a66236cbd4e86d1cc93df6481454301bd5fac4d3497fcbb \
-s 4618b0008a6185d7327ebf53bee3c50282ccf45a3cceb1ed9828bfbcf1148b47 \
--nbf 15

請注意,建議您將延遲時間設為超過 config_change_poll_internal 設定 (預設為 10 分鐘)。另請參閱 edgemicro 屬性。

篩選下載的 Proxy

根據預設,Edge Microgateway 會下載 Edge 組織中所有名稱開頭為「edgemicro_」的 Proxy。您可以變更這項預設設定,下載名稱符合特定模式的 Proxy。

  1. 開啟 Edge Micro 設定檔:~/.edgemicro/org-env-config.yaml
  2. 在 edge_config 下方新增 proxyPattern 元素。舉例來說,下列模式會下載 edgemicro_foo、edgemicro_fast 和 edgemicro_first 等 Proxy。
    edge_config:
    …
    proxyPattern: edgemicro_f*

指定不含 API Proxy 的產品

在 Apigee Edge 中,您可以建立不含任何 API Proxy 的 API 產品。這項產品設定可讓與該產品相關聯的 API 金鑰,與貴組織中部署的任何 Proxy 搭配使用。自 2.5.4 版起,Edge Microgateway 支援這項產品設定。

偵錯與疑難排解

連線至偵錯工具

您可以使用偵錯工具 (例如 node-inspector) 執行 Edge Microgateway。這有助於排解及偵錯自訂外掛程式的問題。

  1. 在偵錯模式中重新啟動 Edge Microgateway。方法是在 start 指令開頭加上 DEBUG=*:
    DEBUG=* edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET

    如要將偵錯輸出內容導向檔案,可以使用以下指令:

    export DEBUG=* nohup edgemicro start \
    -o $ORG -e $ENV -k $KEY -s $SECRET 2>&1 | tee /tmp/file.log

  2. 啟動偵錯工具,並設定監聽偵錯程序的通訊埠號碼。
  3. 您現在可以逐步執行 Edge Microgateway 程式碼、設定中斷點、監看運算式等。

您可以指定與偵錯模式相關的標準 Node.js 旗標。例如,--nolazy 有助於偵錯非同步程式碼。

檢查記錄檔

如果遇到問題,請務必檢查記錄檔,查看執行詳細資料和錯誤資訊。詳情請參閱「管理記錄檔」。

使用 API 金鑰安全性

API 金鑰提供簡單的機制,可驗證向 Edge Microgateway 提出要求的用戶端。如要取得 API 金鑰,請從包含 Edge Microgateway 驗證 Proxy 的 Apigee Edge 產品,複製用戶端金鑰 (也稱為用戶端 ID) 值。

快取金鑰

API 金鑰會與不記名權杖交換,並快取不記名權杖。如要停用快取功能,請在傳入 Edge Microgateway 的要求中設定 Cache-Control: no-cache 標頭。

使用 API 金鑰

您可以在 API 要求中,以查詢參數或標頭的形式傳遞 API 金鑰。根據預設,標頭和查詢參數名稱都是 x-api-key。

查詢參數範例:

curl http://localhost:8000/foobar?x-api-key=JG616Gjz7xs4t0dvpvVsGdI49G34xGsz

標頭範例:

curl http://localhost:8000/foobar -H "x-api-key:JG616Gjz7xs4t0dvpvVsGdI49G34xGsz"

設定 API 金鑰名稱

根據預設,API 金鑰標頭和查詢參數都會使用 x-api-key 這個名稱。您可以按照「變更設定」一節的說明,在設定檔中變更這項預設設定。舉例來說,如要將名稱變更為 apiKey:

oauth:
  allowNoAuthorization: false
  allowInvalidAuthorization: false
  api-key-header: apiKey

在這個範例中,查詢參數和標頭名稱都會變更為 apiKey。無論是哪種情況,x-api-key 名稱都將無法再使用。另請參閱「變更設定」。

例如:

curl http://localhost:8000/foobar -H "apiKey:JG616Gjz7xs4t0dvpvVsGdI49G34xGsz"

如要進一步瞭解如何搭配 Proxy 要求使用 API 金鑰,請參閱「Secure Edge Microgateway」。

啟用上游回應代碼

根據預設,如果回應不是 200 狀態,oauth 外掛程式只會傳回 4xx 錯誤狀態碼。您可以變更這項行為,讓系統一律根據錯誤傳回確切的 4xx 或 5xx 代碼。

如要啟用這項功能,請在 Edge Microgateway 設定中新增 oauth.useUpstreamResponse: true 屬性。例如:

oauth:
  allowNoAuthorization: false
  allowInvalidAuthorization: false
  gracePeriod: 10
  useUpstreamResponse: true

使用 OAuth2 權杖安全性

本節說明如何取得 OAuth2 存取權杖和更新權杖。存取權杖用於透過微閘道發出安全的 API 呼叫。更新權杖可用於取得新的存取權杖。

如何取得存取權杖

本節說明如何使用 edgemicro-auth Proxy 取得存取權杖。

您也可以使用 edgemicro token CLI 指令取得存取權杖。如要進一步瞭解 CLI,請參閱「管理權杖」。

API 1:將憑證做為內文參數傳送

在網址中替換組織和環境名稱,並將從 Apigee Edge 開發人員應用程式取得的消費者 ID 和消費者密鑰值,替換為 client_id 和 client_secret 主體參數:

curl -i -X POST "http://<org>-<test>.apigee.net/edgemicro-auth/token" \
-d '{"grant_type": "client_credentials", "client_id": "your_client_id", \
"client_secret": "your_client_secret"}' -H "Content-Type: application/json"

API 2:在基本驗證標頭中傳送憑證

將用戶端憑證做為基本驗證標頭傳送,並將 grant_type 做為表單參數傳送。RFC 6749:OAuth 2.0 授權架構也討論了這個指令形式。

http://<org>-<test>.apigee.net/edgemicro-auth/token -v -u your_client_id:your_client_secret \
-d 'grant_type=client_credentials' -H "Content-Type: application/x-www-form-urlencoded"

輸出內容範例

API 會傳回 JSON 回應。請注意,token 和 access_token 屬性之間沒有差異。您可以擇一使用。請注意,expires_in 是以秒為單位的整數值。
{
"token": "eyJraWQiOiIxIiwidHlwIjoi",
"access_token": "eyJraWQiOiIxIiwid",
"token_type": "bearer",
"expires_in": 1799
}

如何取得更新權杖

如要取得更新權杖,請對 edgemicro-auth Proxy 的 /token 端點發出 API 呼叫。您「必須」使用 password 授權類型發出這項 API 呼叫。以下步驟將逐步說明整個程序。

  1. 使用 /token API 取得存取權杖和更新權杖。請注意,授權類型為 password:
    curl -X POST \
      https://your_organization-your_environment.apigee.net/edgemicro-auth/token \
      -H 'Content-Type: application/json' \
      -d '{
       "client_id":"mpK6l1Bx9oE5zLdifoDbF931TDnDtLq",
       "client_secret":"bUdDcFgv3nXffnU",
       "grant_type":"password",
       "username":"mpK6lBx9RoE5LiffoDbpF931TDnDtLq",
       "password":"bUdD2FvnMsXffnU"
    }'

    API 會傳回存取權杖和更新權杖。回應大致如下。請注意,expires_in 值為整數,並以秒為單位。

    {
        "token": "your-access-token",
        "access_token": "your-access-token",
        "token_type": "bearer",
        "expires_in": 108,
        "refresh_token": "your-refresh-token",
        "refresh_token_expires_in": 431,
        "refresh_token_issued_at": "1562087304302",
        "refresh_token_status": "approved"
    }
  2. 現在,您可以呼叫同一 API 的 /refresh 端點,使用更新權杖取得新的存取權杖。例如:
    curl -X POST \
      https://willwitman-test.apigee.net/edgemicro-auth/refresh \
      -H 'Content-Type: application/json' \
      -d '{
       "client_id":"mpK6l1Bx9RoE5zLifoDbpF931TDnDtLq",
       "client_secret":"bUdDc2Fv3nMXffnU",
       "grant_type":"refresh_token",
       "refresh_token":"your-refresh-token"
    }'

    API 會傳回新的存取權杖。回應內容大致如下:

    {
        "token": "your-new-access-token"
        }

永久監控

指定設定檔端點

如果您執行多個 Edge Microgateway 執行個體,可能會想從單一位置管理其設定。方法是指定 HTTP 端點,讓 Edge Micro 下載設定檔。使用 -u 旗標啟動 Edge Micro 時,可以指定這個端點。

例如:

edgemicro start -o jdoe -e test -u http://mylocalserver/mgconfig -k public_key -s secret_key

其中 mgconfig 端點會傳回設定檔的內容。根據預設,這個檔案位於 ~/.edgemicro,命名慣例為:org-env-config.yaml。

停用 TCP 連線資料緩衝

您可以使用 nodelay 設定屬性,停用 Edge Microgateway 所用 TCP 連線的資料緩衝功能。

根據預設,TCP 連線會使用 Nagle 演算法緩衝資料,然後再傳送。將 nodelay 設為 true,即可停用這項行為 (每次呼叫 socket.write() 時,資料都會立即觸發資料)。詳情請參閱 Node.js 說明文件。

如要啟用 nodelay,請按照下列方式編輯 Edge Micro 設定檔:

edgemicro:
  nodelay: true
  port: 8000
  max_connections: 1000
  config_change_poll_interval: 600
  logging:
    level: error
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

以獨立模式執行 Edge Microgateway

您可以執行 Edge Microgateway,完全不與任何 Apigee Edge 依附元件連線。這種情況稱為獨立模式,可讓您在沒有網際網路連線的情況下執行及測試 Edge Microgateway。

在獨立模式下,下列功能需要連線至 Apigee Edge,因此無法運作:

  • OAuth 和 API 金鑰
  • 配額
  • Analytics

另一方面,自訂外掛程式和尖峰停滯功能則會正常運作,因為這些功能不需要連線至 Apigee Edge。此外,您可以使用名為 extauth 的新外掛程式,在獨立模式下使用 JWT 授權對微閘道發出的 API 呼叫。

設定及啟動閘道

如要在獨立模式下執行 Edge Microgateway:

  1. 建立設定檔,並命名為:$HOME/.edgemicro/$ORG-$ENV-config.yaml

    例如:

    vi $HOME/.edgemicro/foo-bar-config.yaml
  2. 將下列程式碼貼入檔案:
    edgemicro:
      port: 8000
      max_connections: 1000
      config_change_poll_interval: 600
      logging:
        level: error
        dir: /var/tmp
        stats_log_interval: 60
        rotate_interval: 24
      plugins:
        sequence:
          - extauth
          - spikearrest
    headers:
      x-forwarded-for: true
      x-forwarded-host: true
      x-request-id: true
      x-response-time: true
      via: true
    extauth:
      publickey_url: https://www.googleapis.com/oauth2/v1/certs
    spikearrest:
      timeUnit: second
      allow: 10
      buffersize: 0
  3. 匯出下列環境變數,並將值設為「1」:
    export EDGEMICRO_LOCAL=1
  4. 執行下列 start 指令,並提供值來例項化本機 Proxy:
    edgemicro start -o $ORG -e $ENV -a $LOCAL_PROXY_NAME \
      -v $LOCAL_PROXY_VERSION -t $TARGET_URL -b $BASE_PATH

    其中:

    • $ORG 是您在設定檔名稱中使用的「機構」名稱。
    • $ENV 是您在設定檔名稱中使用的「env」名稱。
    • $LOCAL_PROXY_NAME 是要建立的本機 Proxy 名稱。您可以使用任何名稱。
    • $LOCAL_PROXY_VERSION 是 Proxy 的版本號碼。
    • $TARGET_URL 是 Proxy 目標的網址。(「目標」是指 Proxy 呼叫的服務)。
    • $BASE_PATH 是 Proxy 的基本路徑。這個值必須以正斜線開頭。如要指定根基本路徑,請只輸入正斜線,例如「/」。

    例如:

    edgemicro start -o local -e test -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
  5. 測試設定。
    curl http://localhost:8000/echo  { "error" : "missing_authorization" }

    由於 extauth 外掛程式位於 foo-bar-config.yaml 檔案中,因此您會收到「missing_authorization」錯誤。這個外掛程式會驗證 API 呼叫的授權標頭中必須存在的 JWT。在下一節中,您將取得 JWT,以便順利發出 API 呼叫。

範例:取得授權權杖

以下範例說明如何從 Apigee Edge (edgemicro-auth/jwkPublicKeys) 的 Edge Microgateway JWT 端點取得 JWT。 當您執行 Edge Microgateway 的標準設定和配置時,系統會部署這個端點。 如要從 Apigee 端點取得 JWT,您必須先完成標準 Edge Microgateway 設定,並連線至網際網路。此處僅以 Apigee 端點為例,並非必要。您也可以視需要使用其他 JWT 權杖端點。如果是,您必須使用該端點提供的 API 取得 JWT。

下列步驟說明如何使用 edgemicro-auth/jwkPublicKeys 端點取得權杖:

  1. 您必須執行 Edge Microgateway 的標準設定,才能將 edgemicro-auth Proxy 部署至 Apigee Edge 上的組織/環境。如果您先前已完成這個步驟,就不必重複執行。
  2. 如果您將 Edge Microgateway 部署至 Apigee Cloud,則必須連上網際網路,才能從這個端點取得 JWT。
  3. 停止 Edge Microgateway:
    edgemicro stop
  4. 在先前建立的設定檔 ($HOME/.edgemicro/org-env-config.yaml) 中,將 extauth:publickey_url 屬性指向 Apigee Edge 組織/環境中的 edgemicro-auth/jwkPublicKeys 端點。例如:
    extauth:
      publickey_url: 'https://your_org-your_env.apigee.net/edgemicro-auth/jwkPublicKeys'
  5. 按照先前的做法,使用設定檔名稱中的組織/環境名稱,重新啟動 Edge Microgateway。例如:
    edgemicro start -o foo -e bar -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
  6. 從授權端點取得 JWT 權杖。由於您使用的是 edgemicro-auth/jwkPublicKeys 端點,因此可以使用下列 CLI 指令:

您可以使用 edgemicro token 指令或 API,為 Edge Microgateway 產生 JWT。例如:

edgemicro token get -o your_org -e your_env \
  -i G0IAeU864EtBo99NvUbn6Z4CBwVcS2 -s uzHTbwNWvoSmOy

其中:

  • your_org 是您先前設定 Edge Microgateway 的 Apigee 組織名稱。
  • your_env 是組織中的環境。
  • i 選項會指定開發人員應用程式的用戶端金鑰,該應用程式的產品包含 edgemicro-auth Proxy。
  • s 選項會指定開發人員應用程式的消費者密鑰,該應用程式的產品包含 edgemicro-auth Proxy。

這項指令會要求 Apigee Edge 產生 JWT,以便用於驗證 API 呼叫。

另請參閱「產生權杖」。

測試獨立設定

如要測試設定,請呼叫 API,並在授權標頭中加入權杖,如下所示:

curl http://localhost:8000/echo -H "Authorization: Bearer your_token

範例:

curl http://localhost:8000/echo -H "Authorization: Bearer eyJraWQiOiIxIiwidHlwIjo...iryF3kwcDWNv7OQ"

輸出內容範例:

{
   "headers":{
      "user-agent":"curl/7.54.0",
      "accept":"*/*",
      "x-api-key":"DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP",
      "client_received_start_timestamp":"1535134472699",
      "x-authorization-claims":"eyJhdDbiO...M1OTE5MTA1NDkifQ==",
      "target_sent_start_timestamp":"1535134472702",
      "x-request-id":"678e3080-a7ae-11e8-a70f-87ae30db3896.8cc81cb0-a7c9-11e8-a70f-87ae30db3896",
      "x-forwarded-proto":"http",
      "x-forwarded-host":"localhost:8000",
      "host":"mocktarget.apigee.net",
      "x-cloud-trace-context":"e2ac4fa0112c2d76237e5473714f1c85/1746478453618419513",
      "via":"1.1 localhost, 1.1 google",
      "x-forwarded-for":"::1, 216.98.205.223, 35.227.194.212",
      "connection":"Keep-Alive"
   },
   "method":"GET",
   "url":"/",
   "body":""
}

使用本機 Proxy 模式

在本機 Proxy 模式下,Edge Microgateway 不需要將支援 Microgateway 的 Proxy 部署至 Apigee Edge。您必須在啟動 Microgateway 時,提供本機 Proxy 名稱、基本路徑和目標網址,藉此設定「本機 Proxy」。接著,對微閘道發出的 API 呼叫會傳送至本機 Proxy 的目標網址。在其他方面,本機 Proxy 模式的運作方式與在一般模式下執行 Edge Microgateway 完全相同。驗證、尖峰防護、配額強制執行、自訂外掛程式等功能的運作方式也相同。

用途和範例

如果只需要將單一 Proxy 與 Edge Microgateway 執行個體建立關聯,本機 Proxy 模式就非常實用。舉例來說,您可以將 Edge Microgateway 做為 Sidecar Proxy 插入 Kubernetes,其中 Microgateway 和服務各自在單一 Pod 中執行,而 Microgateway 則管理與其隨附服務之間的流量。下圖說明此架構,其中 Edge Microgateway 在 Kubernetes 叢集中做為 Sidecar Proxy。每個微閘道執行個體只會與其隨附服務上的單一端點通訊:

Edgemicro 做為邊車容器

這種架構風格的優點是,Edge Microgateway 可為部署至容器環境 (例如 Kubernetes 叢集) 的個別服務提供 API 管理。

設定本機 Proxy 模式

如要將 Edge Microgateway 設為在本機 Proxy 模式下執行,請按照下列步驟操作:

  1. 執行 edgemicro init 來設定本機設定環境,就像在一般 Edge Microgateway 設定中一樣。另請參閱「設定 Edge Microgateway」。
  2. 執行 edgemicro configure,就像在一般 Edge Microgateway 設定程序中一樣。例如:
    edgemicro configure -o your_org -e your_env -u your_apigee_username

    這個指令會將 edgemicro-auth 政策部署至 Edge,並傳回啟動微型閘道所需的金鑰和密鑰。如需協助,請參閱「設定 Edge Microgateway」。

  3. 在 Apigee Edge 上建立 API 產品,並符合下列必要設定需求 (您可以視需要管理所有其他設定):
    • 您必須將 edgemicro-auth Proxy 新增至產品。執行 edgemicro configure 時,系統會自動部署這個 Proxy。
    • 您必須提供資源路徑。Apigee 建議將這個路徑新增至產品:/**。詳情請參閱「設定資源路徑的行為」。另請參閱 Edge 說明文件中的「建立 API 產品」。
  4. 在 Apigee Edge 上建立開發人員,或視需要使用現有開發人員。如需協助,請參閱「使用 Edge 管理 UI 新增開發人員」。

  5. 在 Apigee Edge 上建立開發人員應用程式。您必須將剛建立的 API 產品新增至應用程式。如需協助,請參閱「在 Edge 管理 UI 中註冊應用程式」。
  6. 在安裝 Edge Microgateway 的機器上,匯出下列環境變數,並將值設為「1」。
    export EDGEMICRO_LOCAL_PROXY=1
  7. 執行下列 start 指令:
    edgemicro start -o your_org -e your_environment -k your_key -s your_secret \
        -a local_proxy_name -v local_proxy_version -t target_url -b base_path

    其中:

    • your_org 是您的 Apigee 組織。
    • your_environment 是貴組織中的環境。
    • your_key 是您執行 edgemicro configure 時傳回的金鑰。
    • your_secret 是執行 edgemicro configure 時傳回的密鑰。
    • local_proxy_name 是要建立的本機 Proxy 名稱。
    • local_proxy_version 是 Proxy 的版本號碼。
    • target_url 是 Proxy 目標 (Proxy 會呼叫的服務) 的網址。
    • base_path 是 Proxy 的基本路徑。這個值必須以正斜線開頭。如要指定根基本路徑,請只輸入正斜線,例如「/」。

    例如:

    edgemicro start -o your_org -e test -k 7eb6aae644cbc09035a...d2eae46a6c095f \
      -s e16e7b1f5d5e24df...ec29d409a2df853163a -a proxy1 -v 1 \
      -t http://mocktarget.apigee.net -b /echo

測試設定

您可以呼叫 Proxy 端點,測試本機 Proxy 設定。舉例來說,如果您指定 /echo 的基本路徑,可以按照下列方式呼叫 Proxy:

curl  http://localhost:8000/echo
{
  "error" : "missing_authorization",
  "error_description" : "Missing Authorization header"
}

由於您未提供有效的 API 金鑰,因此這項初始 API 呼叫會產生錯誤。您可以在先前建立的開發人員應用程式中找到金鑰。在 Edge UI 中開啟應用程式,複製用戶端金鑰,然後按照下列方式使用該金鑰:

curl  http://localhost:8000/echo -H 'x-api-key:your_api_key'

例如:

curl  http://localhost:8000/echo -H "x-api-key:DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP"

輸出內容範例:

{
  "headers":{
    "user-agent":"curl/7.54.0",
    "accept":"*/*",
    "x-api-key":"DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP",
    "client_received_start_timestamp":"1535134472699",
    "x-authorization-claims":"eyJhdWQiOi...TQ0YmUtOWNlOS05YzM1OTE5MTA1NDkifQ==",
    "target_sent_start_timestamp":"1535134472702",
    "x-request-id":"678e3080-a7ae-11e8-a70f-87ae30db3896.8cc81cb0-a7c9-11e8-a70f-87ae30db3896",
    "x-forwarded-proto":"http",
    "x-forwarded-host":"localhost:8000",
    "host":"mocktarget.apigee.net",
    "x-cloud-trace-context":"e2ac4fa0112c2d76237e5473714f1c85/1746478453618419513",
    "via":"1.1 localhost, 1.1 google",
    "x-forwarded-for":"::1, 216.98.205.223, 35.227.194.212",
    "connection":"Keep-Alive"
  },
  "method":"GET",
  "url":"/",
  "body":""
}

使用同步器

本節說明如何使用同步器,這是一項選用功能,可讓 Edge Microgteway 從 Apigee Edge 擷取設定資料,並寫入本機 Redis 資料庫,進而提升 Edge Microgteway 的彈性。同步器執行個體執行時,在不同節點上執行的其他 Edge Microgateway 執行個體可以直接從這個資料庫擷取設定。

同步器功能目前支援與 Redis 5.0.x 搭配使用。

什麼是同步器?

同步器可為 Edge Microgateway 提供一定程度的彈性。這有助於確保每個 Edge Microgateway 執行個體都使用相同的設定,而且在網際網路中斷時,Edge Microgateway 執行個體可以啟動並正常運作。

根據預設,Edge Microgateway 執行個體必須能與 Apigee Edge 通訊,才能擷取及重新整理設定資料,例如 API Proxy 和 API 產品設定。如果與 Edge 的網際網路連線中斷,微閘道執行個體仍可繼續運作,因為系統會快取最新的設定資料。不過,如果沒有明確的連線,就無法啟動新的 Microgateway 執行個體。此外,網際網路中斷可能會導致一或多個微型閘道執行個體執行的設定資訊與其他執行個體不同步。

Edge Microgateway 同步器提供替代機制,可讓 Edge Microgateway 執行個體擷取啟動及處理 API Proxy 流量所需的設定資料。從 Apigee Edge 呼叫擷取的設定資料包括:jwk_public_keys 呼叫、jwt_public_key 呼叫、bootstrap 呼叫和 API 產品呼叫。同步器可讓在不同節點上執行的所有 Edge Microgateway 執行個體正常啟動並保持同步,即使 Edge Microgateway 與 Apigee Edge 之間的網際網路連線中斷也沒問題。

同步器是經過特殊設定的 Edge Microgateway 執行個體。其唯一用途是輪詢 Apigee Edge (可設定時間)、擷取設定資料,並將資料寫入本機 Redis 資料庫。同步器執行個體本身無法處理 API Proxy 流量。在不同節點上執行的其他 Edge Microgateway 執行個體,可以設定為從 Redis 資料庫擷取設定資料,而不是從 Apigee Edge 擷取。由於所有 microgateway 執行個體都會從本機資料庫提取設定資料,因此即使網際網路中斷,也能啟動並處理 API 要求。

設定同步器執行個體

將下列設定新增至要用做同步器的 Edge Microgateway 安裝作業 org-env/config.yaml 檔案:

edgemicro:
  redisHost: host_IP
  redisPort: host_port
  redisDb: database_index
  redisPassword: password
edge_config:
  synchronizerMode: 1
  redisBasedConfigCache: true

舉例來說:

edgemicro:
  redisHost: 192.168.4.77
  redisPort: 6379
  redisDb: 0
  redisPassword: codemaster
edge_config:
  synchronizerMode: 1
  redisBasedConfigCache: true
選項 說明
redisHost 執行 Redis 執行個體的主機。預設:127.0.0.1
redisPort Redis 執行個體的通訊埠。預設:6379
redisDb 要使用的 Redis 資料庫。預設值:0
redisPassword 資料庫密碼。

最後,儲存設定檔並啟動 Edge Microgateway 執行個體。並開始輪詢 Apigee Edge,將下載的設定資料儲存在 Redis 資料庫中。

設定一般 Edge Microgateway 執行個體

同步器執行時,您可以設定其他 Edge Microgateway 節點,執行處理 API Proxy 流量的一般微型閘道執行個體。不過,您會設定這些執行個體,從 Redis 資料庫 (而非 Apigee Edge) 取得設定資料。

請將下列設定新增至每個額外 Edge Microgateway 節點的 org-env/config.yaml 檔案。請注意,synchronizerMode 屬性已設為 0。這項屬性會將執行個體設為以一般 Edge Microgateway 執行個體的形式運作,處理 API Proxy 流量,且執行個體會從 Redis 資料庫取得設定資料。

edgemicro:
  redisHost: host_IP
  redisPort: host_port
  redisDb: database_index
  redisPassword: password
edge_config:
  synchronizerMode: 0
  redisBasedConfigCache: true

舉例來說:

edgemicro:
  redisHost: 192.168.4.77
  redisPort: 6379
  redisDb: 0
  redisPassword: codemaster
edge_config:
  synchronizerMode: 0
  redisBasedConfigCache: true

設定屬性

我們新增了下列設定屬性,以支援同步器:

屬性 值 說明
edge_config.synchronizerMode 0 或 1

如果設為 0 (預設值),Edge Microgateway 會以標準模式運作。

如果為 1,請啟動 Edge Microgateway 執行個體,做為同步器運作。在這個模式中,執行個體會從 Apigee Edge 提取設定資料,並儲存在本機 Redis 資料庫中。這個執行個體無法處理 API Proxy 要求,其唯一用途是輪詢 Apigee Edge 以取得設定資料,並將資料寫入本機資料庫。接著,您必須設定其他 Microgateway 執行個體,以便從資料庫讀取資料。

edge_config.redisBasedConfigCache true 或 false 如果設為 true,Edge Microgateway 執行個體會從 Redis 資料庫擷取設定資料,而非從 Apigee Edge 擷取。Redis 資料庫必須與同步器設定寫入的資料庫相同。如果 Redis 資料庫無法使用或資料庫空白,Microgateway 會尋找現有的 cache-config.yaml 檔案來取得設定。

如果設為 false (預設值),Edge Microgateway 執行個體會照常從 Apigee Edge 擷取設定資料。

edgemicro.config_change_poll_interval 時間間隔 (秒) 指定同步器從 Apigee Edge 提取資料的輪詢時間間隔。

設定外掛程式的排除網址

您可以設定微閘道,略過指定網址的外掛程式處理作業。您可以全域 (針對所有外掛程式) 或針對特定外掛程式設定這些「排除」網址。

例如:

...
edgemicro:
  ...
  plugins:
    excludeUrls: '/hello,/proxy_one' # global exclude urls
    sequence:
      - oauth
      - json2xml
      - quota
json2xml:
  excludeUrls: '/hello/xml'  # plugin level exclude urls
...

在這個範例中,外掛程式不會處理路徑為 /hello 或 /proxy_one 的傳入 API Proxy 呼叫。此外,如果 API 的路徑中含有 /hello/xml,系統會略過 json2xml 外掛程式。

使用環境變數值設定配置屬性

您可以使用設定檔中的標記指定環境變數。指定的環境變數標記會替換為實際的環境變數值。替換項目只會儲存在記憶體中,不會儲存在原始設定或快取檔案中。

在這個範例中,屬性 key 會替換為 TARGETS_SSL_CLIENT_KEY 環境變數的值,以此類推。

targets:
  - ssl:
      client:
        key: <E>TARGETS_SSL_CLIENT_KEY</E>
        cert: <E>TARGETS_SSL_CLIENT_CERT</E>
        passphrase: <E>TARGETS_SSL_CLIENT_PASSPHRASE</E>

在這個範例中,<n> 標記用於表示整數值。僅支援正整數。

edgemicro:
  port: <E><n>EMG_PORT</n></E>

在這個範例中,<b> 標記用於表示布林值 (即 true 或 false)。

quotas:
  useRedis: <E><b>EMG_USE_REDIS</b></E>