您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
Edge Microgateway 3.2.x 版
本主題將說明如何管理及設定 Edge Microgateway。
連上網際網路時升級 Edge Microgateway
本節說明如何升級現有的 Edge Microgateway 安裝項目。如果沒有網際網路連線,請參閱「Can I install Edge Microgateway without an internet connection?」(沒有網際網路連線時是否可以安裝 Edge Microgateway?)。
Apigee 建議您先使用新版本測試現有設定,再升級正式環境。
- 執行下列
npm指令,升級至最新版本的 Edge Microgateway:npm upgrade edgemicro -g
如要安裝特定版本的 Edge Microgateway,請在安裝指令中指定版本號碼。舉例來說,如要安裝 3.2.3 版,請使用下列指令:
npm install edgemicro@3.2.3 -g
- 查看版本號碼。舉例來說,如果您安裝的是 3.2.3 版:
edgemicro --version current nodejs version is v12.5.0 current edgemicro version is 3.2.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 initedgemicro configure [params]edgemicro start [params]
新初始化的 Edge Microgateway 執行個體預設設定檔
執行 edgemicro init 時,系統設定檔 (如上所述) default.yaml 會放在 ~/.edgemicro 目錄中。
如果您在 ~/.edgemicro 中變更設定檔,就必須重新設定並重新啟動 Edge Microgateway:
edgemicro stopedgemicro configure [params]edgemicro start [params]
執行個體的動態設定檔
執行 edgemicro configure [params] 時,系統會在 ~/.edgemicro 中建立動態設定檔。檔案會依據以下模式命名:org-env-config.yaml,其中 org 和 env 是 Apigee Edge 機構和環境名稱。您可以使用這個檔案進行設定變更,然後重新載入,完全不會停機。舉例來說,如果您新增及設定外掛程式,可以重新載入設定,不會造成任何停機時間,詳情請參閱下文。
如果 Edge Microgateway 正在執行 (零停機時間選項):
- 重新載入 Edge Microgateway 設定:
edgemicro reload -o $ORG -e $ENV -k $KEY -s $SECRET
其中:
- $ORG 是 Edge 機構名稱 (您必須是機構管理員)。
- $ENV 是貴機構的環境 (例如「test」或「prod」)。
- $KEY 是先前由設定指令傳回的金鑰。
- $SECRET 是先前由設定指令傳回的金鑰。
例如
edgemicro reload -o docs -e test -k 701e70ee718ce6dc188...78b6181d000723 \ -s 05c14356e42ed1...4e34ab0cc824
如果 Edge Microgateway 已停止:
- 重新啟動 Edge Microgateway:
edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET
其中:
- $ORG 是 Edge 機構名稱 (您必須是機構管理員)。
- $ENV 是貴機構的環境 (例如「test」或「prod」)。
- $KEY 是先前由設定指令傳回的金鑰。
- $SECRET 是先前由設定指令傳回的金鑰。
例如:
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_ORGEDGEMICRO_ENVEDGEMICRO_KEYEDGEMICRO_SECRET
您可以選擇是否設定這些變數。設定這些變數後,使用指令列介面 (CLI) 設定及啟動 Edge Microgateway 時,就不必指定變數值。
在 Edge Microgateway 伺服器上設定 SSL
請觀看下列影片,瞭解如何在 Apigee Edge Microgateway 中設定 TLS:
| 影片 | 說明 |
|---|---|
| 設定單向北向傳輸層安全標準 (TLS) | 瞭解如何在 Apigee Edge Microgateway 中設定 TLS。 這部影片將簡要說明 TLS 及其重要性,介紹 Edge Microgateway 中的 TLS,並示範如何設定 Northbound 單向 TLS。 |
| 設定雙向北向傳輸層安全標準 (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,請按照下列步驟操作:
- 使用 openssl 公用程式或您偏好的方法,產生或取得 SSL 憑證和金鑰。
- 在 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
- 重新啟動 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 格式的用戶端私密金鑰、憑證和 CA 憑證所在 pfx 檔案的路徑。 |
passphrase |
包含私密金鑰或 PFX 通關密語的字串。 |
ca |
檔案路徑,內含 PEM 格式的信任憑證清單。 |
ciphers |
以「:」分隔的字串,用於描述要使用的密碼。 |
rejectUnauthorized |
如果為 true,系統會根據提供的 CA 清單驗證伺服器憑證。如果驗證失敗,系統會傳回錯誤。 |
secureProtocol |
要使用的 SSL 方法。例如,SSLv3_method 會強制使用 SSL 第 3 版。 |
servername |
SNI (伺服器名稱指示) TLS 擴充功能的伺服器名稱。 |
requestCert |
雙向 SSL 為 true,單向 SSL 為 false |
使用用戶端 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 格式的用戶端私密金鑰、憑證和 CA 憑證所在 pfx 檔案的路徑。 |
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:網址中位於 basepath 後方的部分。
- h - Edge Microgateway 監聽的主機和通訊埠號碼。
- r - 用戶端要求來源的遠端主機和通訊埠。
- i:要求 ID。這四個活動項目都會共用這個 ID。每項要求都會指派專屬要求 ID。根據要求 ID 關聯記錄檔記錄,可深入瞭解目標的延遲時間。
- d - Edge Microgateway 收到要求後經過的時間長度 (以毫秒為單位)。在上述範例中,系統在 7 毫秒後收到要求 0 的目標回應 (第 3 行),並在額外 4 毫秒後將回應傳送給用戶端 (第 4 行)。換句話說,總要求延遲時間為 11 毫秒,其中目標佔 7 毫秒,Edge Microgateway 本身則佔 4 毫秒。
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:網址中位於 basepath 後方的部分。
- 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 會做為驗證端點,向用戶端核發已簽署的存取權杖。執行 edgemicro configure 指令部署 Proxy 時,系統會傳回這個網址。詳情請參閱「設定及配置 Edge Microgateway」。
- quotaUri:如要透過部署至貴機構的
edgemicro-auth代理程式管理配額,請設定這個設定屬性。如未設定這項屬性,配額端點預設為內部 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 的數字。
-
記錄:
-
level:(預設:error)
- info - (建議) 記錄流經 Edge Microgateway 執行個體的所有要求和回應。
- warn - 只記錄警告訊息。
- error:只記錄錯誤訊息。
- debug - 記錄偵錯訊息,以及資訊、警告和錯誤訊息。
- trace - 記錄錯誤的追蹤資訊,以及資訊、警告和錯誤訊息。
- none - 不建立記錄檔。
- dir:(預設值:/var/tmp) 記錄檔的儲存目錄。
- stats_log_interval:(預設值:60) 統計資料記錄寫入 API 記錄檔的時間間隔 (以秒為單位)。
- rotate_interval:(預設值:24) 記錄檔輪替間隔 (以小時為單位)。
-
level:(預設:error)
- 外掛程式:外掛程式可為 Edge Microgateway 新增功能。如要進一步瞭解如何開發外掛程式,請參閱「開發自訂外掛程式」。
- dir:從 ./gateway 目錄到 ./plugins 目錄的相對路徑,或絕對路徑。
- sequence:要新增至 Edge Microgateway 執行個體的外掛程式模組清單。模組會按照這裡指定的順序執行。
-
debug: 將遠端偵錯功能新增至 Edge Microgateway 程序。
- port:要監聽的通訊埠編號。舉例來說,您可以將 IDE 偵錯工具設為監聽這個通訊埠。
- args:偵錯程序的引數。例如:
args --nolazy
- config_change_poll_interval: (預設值:600 秒) Edge Microgateway 會定期載入新設定,並在有任何變更時執行重新載入。輪詢會擷取在 Edge 上進行的任何變更 (產品、可感知微型閘道的 Proxy 等變更),以及對本機設定檔所做的變更。
- disable_config_poll_interval: (預設值:false) 設為 true 即可關閉自動變更輪詢功能。
- request_timeout:設定目標要求的逾時時間。逾時時間以秒為單位。如果發生逾時,Edge Microgateway 會傳回 504 狀態碼。(新增 2.4.x 版)
- keep_alive_timeout:這個屬性可讓您設定 Edge Microgateway 逾時時間 (以毫秒為單位)。(預設值:5 秒) (v3.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,即可防止載入 Analytics 外掛程式。在這種情況下,系統不會呼叫 Apigee Edge 數據分析。如果設為 true,或未提供這項屬性,分析外掛程式就會照常運作。詳情請參閱「edgemicro 屬性」。(v3.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.訊息。abortClientRequestEdge Microgateway 會中止要求,並在記錄檔中寫入警告: TargetResponseAborted,並傳回 502 要求狀態碼。
範例:
edgemicro: on_target_response_abort: appendErrorToClientResponseBody | abortClientRequest
標頭屬性
這些設定可設定特定 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 可防止將 via 標頭傳遞至目標。
OAuth 屬性
這些設定會決定 Edge Microgateway 如何強制執行用戶端驗證。
- allowNoAuthorization:(預設值:false) 如果設為 true,API 呼叫可通過 Edge Microgateway,完全不需要任何授權標頭。將此值設為 false,即可要求授權標頭 (預設)。
- allowInvalidAuthorization:(預設值:false) 如果設為 true,即使 Authorization 標頭中傳遞的權杖無效或已過期,API 呼叫仍可通過。將此值設為 false,即可要求提供有效權杖 (預設值)。
- authorization-header:(預設值:Authorization: Bearer) 用於將存取權杖傳送至 Edge Microgateway 的標頭。如果目標需要將授權標頭用於其他用途,您可能需要變更預設值。
- api-key-header:(預設值:x-api-key) 用於將 API 金鑰傳遞至 Edge Microgateway 的標頭或查詢參數名稱。另請參閱「使用 API 金鑰」。
- keep-authorization-header:(預設值:false) 如果設為 true,要求中傳送的 Authorization 標頭會傳遞至目標 (保留)。
- allowOAuthOnly:如果設為 true,每個 API 都必須攜帶 Authorization 標頭和 Bearer 存取權杖。您只能允許 OAuth 安全性模型 (同時維持回溯相容性)。(2.4.x 版新增)
- allowAPIKeyOnly - 如果設為 true,每個 API 都必須攜帶含有 API 金鑰的 x-api-key 標頭 (或自訂位置)。您只能允許 API 金鑰安全模式 (同時維持回溯相容性)。(2.4.x 版新增)
- gracePeriod:這個參數有助於避免因系統時鐘與 JWT 授權權杖中指定的「Not Before」(nbf) 或「Issued At」(iat) 時間略有差異而導致錯誤。請將此參數設為允許這類差異的秒數。(2.5.7 版新增)
外掛程式專屬屬性
如要瞭解各外掛程式的可設定屬性,請參閱「使用外掛程式」。
篩選 Proxy
您可以篩選 Edge Microgateway 例項要處理的微閘道感知 Proxy。
Edge Microgateway 啟動時,會下載與其相關聯機構中的所有微閘道感知 Proxy。使用下列設定,限制微型閘道處理的 Proxy。舉例來說,這項設定會將微閘道處理的 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":[
]
}
]
}依自訂屬性篩選產品
如要根據自訂屬性篩選產品,請按照下列步驟操作:
- 在 Edge 使用者介面中,選取您設定 Edge Microgateway 的機構/環境中的 edgemicro_auth Proxy。
- 在「開發」分頁中,於編輯器開啟 JavaCallout 政策。
- 新增自訂屬性,並以半形逗號分隔屬性名稱清單,然後將金鑰設為
products.filter.attributes。系統只會將包含任何自訂屬性名稱的產品傳回 Edge Microgateway。 - 您可以選擇停用檢查,方法是將自訂屬性
products.filter.env.enable設為false,確認產品是否已為目前環境啟用。 (預設值為 true)。 - (僅限私有雲) 如果您使用 Edge for Private Cloud,請將
org.noncps屬性設為true,以便為非 CPS 環境提取產品。
例如:
<?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 policy」政策已新增名為 allowProductStatus 的屬性。如要使用這項屬性篩選 JWT 中列出的 API 產品,請按照下列步驟操作:
- 在 Apigee Proxy 編輯器中開啟 edgemicro-auth Proxy。
- 將
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>
- 儲存 Proxy。
如果沒有 Property 標記,JWT 中就會列出所有狀態碼的產品。
如要使用這項新屬性,請升級 edgemicro-auth Proxy。
設定 Analytics 推送頻率
使用這些設定參數,控制 Edge Microgateway 將分析資料傳送至 Apigee 的頻率:
- bufferSize (選用):緩衝區可保留的分析記錄數量上限,超過這個數量就會開始捨棄最舊的記錄。預設值:10000
- batchSize (選用):傳送至 Apigee 的分析記錄批次大小上限。預設值:500
- flushInterval (選填):每次將一批 Analytics 記錄傳送至 Apigee 的間隔時間 (以毫秒為單位)。預設值:5000
例如:
analytics: bufferSize: 15000 batchSize: 1000 flushInterval: 6000
遮蓋 Analytics 資料
下列設定可防止要求路徑資訊顯示在 Edge Analytics 中。在微閘道設定中新增下列項目,遮蓋要求 URI 和/或要求路徑。請注意,URI 包含要求的主機名稱和路徑部分。
analytics: mask_request_uri: 'string_to_mask' mask_request_path: 'string_to_mask'
在 Edge Analytics 中區隔 API 呼叫
您可以設定 Analytics 外掛程式,將特定 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 basepath,以便在 Analytics 資訊主頁中區隔。舉例來說,如果您指定
/mocktarget/healthcheck,其中/mocktarget是 Proxy 基本路徑,則路徑為/mocktarget/healthcheck的所有 API 呼叫都會在資訊主頁中顯示為edgemicro_proxyname-health。
舉例來說,在下列設定中,任何包含 /healthcheck 的 API 路徑都會由 Analytics 外掛程式區隔。也就是說,/foo/healthcheck 和 /foo/bar/healthcheck 會在 Analytics 資訊主頁中,以 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,都會在 Analytics 資訊主頁中,區隔為名為 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 之間進行通訊,請按照下列步驟操作:
- 設定環境變數
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 不應 Proxy 的網域清單,並以半形逗號分隔。如要進一步瞭解這些變數,請參閱 https://www.npmjs.com/package/request#controlling-proxy-behaviour-using-environment-variables
- 重新啟動 Edge Microgateway。
使用 HTTP Proxy 進行目標通訊
於 3.1.2 版新增。
如要使用 HTTP Proxy,在 Edge 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 要求建立通道。(如果環境變數已啟用 TLS,設定 Proxy 時也是如此,詳情請參閱下文)。預設值:
false - url:HTTP 代理伺服器網址。
- bypass:(選用) 指定一或多個以半形逗號分隔的目標主機網址,這些網址應略過 HTTP 代理。如未設定這項屬性,請使用 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 - tunnel:(選用) 如果為 true,Edge Microgateway 會使用 HTTP CONNECT 方法,透過單一 TCP 連線將 HTTP 要求建立通道。(如果環境變數已啟用 TLS,設定 Proxy 時也是如此,詳情請參閱下文)。預設值:
- 重新啟動 Edge Microgateway。
在支援 Microgateway 的 Proxy 中使用萬用字元
您可以在 edgemicro_* (適用於 Microgateway) 代理程式的基礎路徑中使用一或多個「*」萬用字元。舉例來說,如果基本路徑為「/team/*/members」,用戶端就能呼叫「https://[host]/team/blue/members」和「https://[host]/team/green/members」,您不必建立新的 API 代理程式來支援新團隊。請注意,系統不支援 /**/。
重要事項:Apigee「不」支援使用萬用字元「*」做為基本路徑的第一個元素。舉例來說,系統「不支援」/*/搜尋。
輪替 JWT 金鑰
首次產生 JWT 後,您可能需要變更儲存在 Edge 加密 KVM 中的公開/私密金鑰組。產生新金鑰組的過程稱為金鑰輪替。
Edge Microgateway 如何使用 JWT
JSON Web Token (JWT) 是 RFC7519 中描述的權杖標準。JWT 提供簽署一組聲明的機制,JWT 接收者可確實驗證這些聲明。
您可以使用 CLI 產生 JWT,並在 API 呼叫的授權標頭中使用 JWT,取代 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 時,系統會建立 KVM microgateway 並填入金鑰。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 流量。
如何輪替金鑰
本節說明如何執行金鑰輪替。
- 如要升級 KVM,請使用
edgemicro upgradekvm指令。如要瞭解如何執行這項指令,請參閱「升級 KVM」。這個步驟只需要執行一次。 - 如要升級 edgemicro-oauth Proxy,請使用
edgemicro upgradeauth指令。 如要瞭解如何執行這項指令,請參閱 升級 edgemicro-auth Proxy。這個步驟只需要執行一次。 - 在
~/.edgemicro/org-env-config.yaml檔案中新增下列程式碼,您必須指定微閘道設定使用的相同機構和環境:jwk_public_keys: 'https://$ORG-$ENV.apigee.net/edgemicro-auth/jwkPublicKeys'
執行金鑰輪替指令來輪替金鑰。如要瞭解這個指令的詳細資料,請參閱「輪替金鑰」。
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) 值。微型閘道接著會使用這些金鑰驗證授權權杖。如果權杖驗證失敗,微型閘道會檢查金鑰集是否有較舊的金鑰,並嘗試使用該金鑰。傳回的金鑰格式為 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 分鐘)。由於權杖簽署和微閘道執行個體重新整理之間存在這段延遲,因此在所有執行個體收到最新的公開金鑰之前,以最新金鑰簽署的權杖都會遭到拒絕。
如果有多個微閘道執行個體,公用金鑰延遲有時會導致間歇性執行階段錯誤 (狀態為 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。
- 開啟 Edge Micro 設定檔:
~/.edgemicro/org-env-config.yaml - 在 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。這有助於排解及偵錯自訂外掛程式。
- 以偵錯模式重新啟動 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
- 啟動偵錯工具,並將其設為監聽偵錯程序的通訊埠號碼。
- 現在可以逐步執行 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"
如要進一步瞭解如何搭配使用 API 金鑰與 Proxy 要求,請參閱「 安全 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:在 Basic Auth 標頭中傳送憑證
以基本驗證標頭的形式傳送用戶端憑證,並以表單參數的形式傳送 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 呼叫。以下步驟將逐步說明整個流程。
- 使用
/tokenAPI 取得存取和更新權杖。請注意,授權類型為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" } - 現在可以呼叫相同 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" }
永久監控
Forever 是 Node.js 工具,可自動重新啟動 Node.js 應用程式,以免程序停止運作或發生錯誤。Edge Microgateway 具有 forever.json 檔案,您可以設定該檔案,控管 Edge Microgateway 的重新啟動次數和間隔。這個檔案會設定名為 forever-monitor 的 Forever 服務,以程式輔助方式管理 Forever。
您可以在 Edge Microgateway 根安裝目錄中找到 forever.json 檔案。請參閱「 Edge Microgateway 安裝位置」。如要瞭解設定選項的詳細資料,請參閱 forever-monitor 說明文件。
edgemicro forever 指令包含多個標記,可讓您指定 forever.json 檔案的位置 (-f 標記),以及啟動/停止 Forever 監控程序 (-a 標記)。例如:
edgemicro forever -f ~/mydir/forever.json -a start
詳情請參閱 CLI 參考資料中的「永久監控」。
指定設定檔端點
如果您執行多個 Edge Microgateway 執行個體,可能希望從單一位置管理這些執行個體的設定。方法是指定 Edge Micro 可下載設定檔的 HTTP 端點。使用 -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
您可以完全與任何 Apigee Edge 依附元件中斷連線,然後執行 Edge Microgateway。這種情況稱為獨立模式,可讓您在沒有網路連線的情況下執行及測試 Edge Microgateway。
在獨立模式下,下列功能無法運作,因為這些功能需要連線至 Apigee Edge:
- OAuth 和 API 金鑰
- 配額
- Analytics
另一方面,自訂外掛程式和尖峰流量防護機制可正常運作,因為這些機制不需要連線至 Apigee Edge。此外,我們還推出名為 extauth 的新外掛程式,讓您在獨立模式下,使用 JWT 授權對微閘道發出的 API 呼叫。
設定及啟動閘道
如要在獨立模式下執行 Edge Microgateway,請按照下列步驟操作:
- 建立名為
$HOME/.edgemicro/$ORG的設定檔。-$ENV-config.yaml例如:
vi $HOME/.edgemicro/foo-bar-config.yaml
- 將下列程式碼貼入檔案:
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 - 匯出下列環境變數,並將值設為「1」:
export EDGEMICRO_LOCAL=1
- 執行下列
start指令,提供值來例項化本機 Proxy:edgemicro start -o $ORG -e $ENV -a $LOCAL_PROXY_NAME \ -v $LOCAL_PROXY_VERSION -t $TARGET_URL -b $BASE_PATH
其中:
- $ORG 是您在設定檔名中使用的「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 /
- 測試設定。
curl http://localhost:8000/echo { "error" : "missing_authorization" }由於
extauth外掛程式位於foo-bar-config.yaml檔案中,因此您會收到「missing_authorization」錯誤。這個外掛程式會驗證 JWT,該 JWT 必須位於 API 呼叫的 Authorization 標頭中。在下一節中,您將取得 JWT,讓 API 呼叫順利通過,不會發生錯誤。
範例:取得授權權杖
以下範例說明如何從 Apigee Edge (edgemicro-auth/jwkPublicKeys) 的 Edge Microgateway JWT 端點取得 JWT。執行 Edge Microgateway 的標準設定和配置時,系統會部署這個端點。如要從 Apigee 端點取得 JWT,您必須先完成標準的 Edge Microgateway 設定,並連上網際網路。這裡使用 Apigee 端點僅為範例,並非必要。如要使用其他 JWT 權杖端點,如果需要,您必須使用該端點提供的 API 取得 JWT。
下列步驟說明如何使用 edgemicro-auth/jwkPublicKeys 端點取得權杖:
- 您必須標準設定和配置 Edge Microgateway,才能將
edgemicro-authProxy 部署至 Apigee Edge 的機構/環境。如果先前已完成這個步驟,則不必重複執行。 - 如果您將 Edge Microgateway 部署至 Apigee Cloud,必須連上網際網路,才能從這個端點取得 JWT。
-
停止 Edge Microgateway:
edgemicro stop
- 在先前建立的設定檔 (
$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'
-
使用設定檔名稱中使用的機構/環境名稱,以先前的方式重新啟動 Edge Microgateway。例如:
edgemicro start -o foo -e bar -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
-
從授權端點取得 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-authProxy 的產品。s選項會指定開發人員應用程式的 Consumer Secret,該應用程式具有包含edgemicro-authProxy 的產品。
這項指令會要求 Apigee Edge 產生 JWT,用於驗證 API 呼叫。
另請參閱「產生權杖」。測試獨立設定
如要測試設定,請呼叫 API,並在 Authorization 標頭中加入權杖,如下所示:
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 不需要微閘道感知 Proxy 部署在 Apigee Edge 上。您可以在啟動微型閘道時,提供本機 Proxy 名稱、basepath 和目標網址,藉此設定「本機 Proxy」。接著,傳送至微型閘道的 API 呼叫會傳送至本機 Proxy 的目標網址。在其他所有方面,本機 Proxy 模式的運作方式與在正常模式下執行 Edge Microgateway 完全相同。驗證機制、尖峰流量抑制、配額強制執行和自訂外掛程式等功能,運作方式都相同。
用途和範例
如果您只需要將單一 Proxy 與 Edge Microgateway 執行個體建立關聯,即可使用本機 Proxy 模式。舉例來說,您可以將 Edge Microgateway 植入 Kubernetes 做為補充資訊代理程式,其中微閘道和服務各在單一 Pod 中執行,而微閘道會管理往返其隨附服務的流量。下圖說明這個架構,其中 Edge Microgateway 在 Kubernetes 叢集中做為 Sidecar Proxy。每個微閘道執行個體只會與隨附服務上的單一端點通訊:

這種架構的優點是,Edge Microgateway 可為部署至容器環境 (例如 Kubernetes 叢集) 的個別服務提供 API 管理功能。
設定本機 Proxy 模式
如要設定 Edge Microgateway 以在本機 Proxy 模式下執行,請按照下列步驟操作:
- 執行
edgemicro init設定本機設定環境,與一般 Edge Microgateway 設定完全相同。另請參閱 設定 Edge Microgateway。 - 執行
edgemicro configure,方法與一般 Edge Microgateway 設定程序相同。例如:edgemicro configure -o your_org -e your_env -u your_apigee_username
這項指令會將 edgemicro-auth 政策部署至 Edge,並傳回啟動微型閘道所需的金鑰和密碼。如需相關協助,請參閱「設定 Edge Microgateway」。
- 在 Apigee Edge 中建立 API 產品,並符合下列必要設定要求 (您可以視需要管理所有其他設定):
在 Apigee Edge 中建立開發人員,或視需要使用現有開發人員。如需相關說明,請參閱「使用 Edge 管理 UI 新增開發人員」。
- 在 Apigee Edge 中建立開發人員應用程式。您必須將剛建立的 API 產品新增至應用程式。如需相關說明,請參閱「在 Edge 管理 UI 中註冊應用程式」。
- 在安裝 Edge Microgateway 的機器上,匯出下列環境變數,並將值設為「1」。
export EDGEMICRO_LOCAL_PROXY=1
- 執行下列
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 的 basepath,可以呼叫 Proxy,如下所示:
curl http://localhost:8000/echo
{
"error" : "missing_authorization",
"error_description" : "Missing Authorization header"
}由於您未提供有效的 API 金鑰,因此這項初始 API 呼叫產生了錯誤。您可以在先前建立的開發人員應用程式中找到金鑰。在 Edge UI 中開啟應用程式,複製「Consumer Key」,然後依下列方式使用該金鑰:
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":""
}使用同步器
本節說明如何使用同步器。這項選用功能可從 Apigee Edge 擷取設定資料,並寫入本機 Redis 資料庫,藉此提升 Edge Microgateway 的復原能力。執行同步器執行個體後,在不同節點上執行的其他 Edge Microgateway 執行個體,可以直接從這個資料庫擷取設定。
同步器功能目前支援 Redis 5.0.x 版。
什麼是同步器?
同步器可為 Edge Microgateway 提供一定程度的復原能力。這有助於確保每個 Edge Microgateway 執行個體都使用相同的設定,且在網路中斷時,Edge Microgateway 執行個體可以正常啟動及執行。
根據預設,Edge Microgateway 執行個體必須能夠與 Apigee Edge 通訊,才能擷取及重新整理設定資料,例如 API Proxy 和 API 產品設定。如果 Edge 的網際網路連線中斷,微閘道執行個體仍可繼續運作,因為系統會快取最新的設定資料。不過,如果沒有明確的連線,新的微閘道執行個體就無法啟動。此外,網路中斷可能會導致一或多個微閘道執行個體執行設定資訊,而這些資訊與其他執行個體不同步。
Edge Microgateway 同步器提供替代機制,供 Edge Microgateway 執行個體擷取啟動及處理 API Proxy 流量所需的設定資料。從 Apigee Edge 呼叫擷取的設定資料包括:jwk_public_keys 呼叫、jwt_public_key 呼叫、啟動呼叫和 API 產品呼叫。即使 Edge Microgateway 與 Apigee Edge 之間的網際網路連線中斷,同步器仍可確保在不同節點上執行的所有 Edge Microgateway 執行個體都能正常啟動並保持同步。
同步器是特別設定的 Edge Microgateway 執行個體。唯一用途是輪詢 Apigee Edge (時間可設定)、擷取設定資料,並將資料寫入本機 Redis 資料庫。同步器執行個體本身無法處理 API Proxy 流量。在不同節點上執行的其他 Edge Microgateway 執行個體,可以設定為從 Redis 資料庫而非 Apigee Edge 擷取設定資料。由於所有微閘道執行個體都會從本機資料庫提取設定資料,因此即使網路中斷,也能啟動並處理 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 流量的常規 Microgateway 執行個體。不過,您可以設定這些執行個體,從 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 的設定資料,並將資料寫入本機資料庫。接著,您必須設定其他微閘道執行個體,以便從資料庫讀取資料。 |
edge_config.redisBasedConfigCache |
true 或 false | 如果設為 true,Edge Microgateway 執行個體會從 Redis 資料庫擷取設定資料,而非從 Apigee Edge 擷取。Redis 資料庫必須與同步器設定寫入的資料庫相同。如果 Redis 資料庫無法使用或資料庫為空白,微型閘道會尋找現有的 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 呼叫。此外,路徑中含有 /hello/xml 的 API 會略過 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>