本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
如何取得 API 金鑰
以下範例說明如何取得 API 金鑰,以便驗證透過 Apigee Adapter for Envoy 代理的目標服務 API 呼叫。
。1. 登入 Apigee
- 登入 Apigee UI。
- 選取您用於為 Envoy 佈建 Apigee 轉接器的機構。
2. 可建立開發人員
您可以使用現有的開發人員進行測試,也可以按照下列步驟建立新的開發人員:
- 在側邊導覽選單中,依序選取「發布」>「開發人員」。
- 按一下「+ 開發人員」。
- 填寫對話方塊,建立新的開發人員。您可以使用任何開發人員名稱/電子郵件地址。
3. 可建立 API 產品
請參考下方提供的產品建立範例。
- 在側邊導覽選單中,依序選取「發布」>「API 產品」。
- 按一下「+ 建立」。
- 按照下列指示填寫「產品詳細資料」部分。下表僅列出必填欄位:
欄位 值 說明 名稱 httpbin-product
API 產品的專屬名稱。 顯示名稱 httpbin product
您希望在 UI 或其他顯示情境中看到的描述性名稱。 存取權 Public
在本例中,公開是較好的選擇。 - 在「操作」部分中,按一下「+ 新增操作」。
- 在「Source」部分,選取「Remote Service」。
- 切換「Source」切換鈕,即可在「Remote Service」欄位中手動輸入遠端服務的名稱。
- 在「Remote Service」欄位中輸入遠端服務名稱。這是轉接器代理傳入 HTTP 要求的目標服務。如要進行測試,請使用
httpbin.org
或httpbin.default.svc.cluster.local
搭配 Kubernetes。 - 在「Operation」部分的路徑中,輸入
/
。如要瞭解路徑選項,請參閱「設定資源路徑」。 - 按一下「儲存」,儲存操作。
- 按一下「儲存」,即可儲存 API 產品。
詳情請參閱「管理 API 產品」。
4. 可建立開發人員應用程式
開發人員應用程式包含 API 金鑰,這是透過轉接程式發出 API Proxy 呼叫所需的金鑰。
- 選取側邊導覽選單中的「發布應用程式」。
- 按一下「+ 應用程式」。
- 按照下列指示填寫「應用程式詳細資料」部分。下表僅列出必填欄位:
- 在「憑證」部分中,按一下「+ 新增產品」,然後選取剛剛設定的產品:httpbin-product。
- 按一下 [建立]。
- 在「憑證」下方,按一下「金鑰」旁的「顯示」。
- 複製 Consumer Key 的值。這個值是您透過 Envoy 的 Apigee 轉接器,對
httpbin
服務發出 API 呼叫時要使用的 API 金鑰。
名稱 | httpbin-app
|
開發人員 | 選取先前建立的開發人員,或從清單中選擇任何開發人員。 |
使用以 JWT 為基礎的驗證機制
您可以使用 JWT 權杖來發出經過驗證的 API Proxy 呼叫,而非使用 API 金鑰。本節說明如何使用 apigee-remote-service-cli token
指令建立、檢查及輪替 JWT 權杖。針對 Apigee 混合式環境,您可以使用此指令建立 Kubernetes 秘密,用於保存 JWT。
總覽
Envoy 會使用其 JWT 驗證篩選器處理 JWT 驗證和驗證作業。
驗證完成後,Envoy ext-authz
篩選器會將要求標頭和 JWT 傳送至 apigee-remote-service-envoy
。這項工具會比對 JWT 的 api_product_list
和 scope
宣告與 Apigee API 產品,以便針對要求的目標授權。
建立 Apigee JWT 權杖
您可以使用 CLI 建立 Apigee JWT 權杖:
apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET
或者,您也可以使用標準 OAuth 權杖端點。Curl 範例:
curl https://org-env.apigee.net/remote-token/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"
使用 JWT 權杖
取得權杖後,只要在授權標頭中將權杖傳遞給 Envoy 即可。範例:
curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"
JWT 權杖失敗
Envoy 拒絕
如果 Envoy 拒絕權杖,您可能會看到類似以下的訊息:
Jwks remote fetch has failed
如果是,請確認 Envoy 設定在 remote_jwks
區段中包含有效的 URI,且 Envoy 可存取該 URI,並在安裝 Apigee Proxy 時正確設定憑證。您應該可以直接使用 GET 呼叫呼叫 URI,並收到有效的 JSON 回應。
範例:
curl https://myorg-eval-test.apigee.net/remote-service/certs
Envoy 傳送的其他訊息可能如下所示:
- 「不允許使用 JWT 中的目標對象」
- 「未設定 JWT 核發者」
這些是 Envoy 設定中可能需要修改的必要條件。
檢查符記
您可以使用 CLI 檢查權杖。範例
apigee-remote-service-cli -c config.yaml token inspect -f path/to/file
或
apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN
偵錯
請參閱「有效的 API 金鑰失敗」。使用您自己的身分識別提供者
根據預設,Envoy 適用的 Apigee 轉接器會使用 remote-token
API 代理程式做為身分提供者服務,以便驗證用戶端應用程式,並根據 OAuth 2.0 用戶端憑證授權類型提供 JWT 權杖。不過,在某些情況下,您可能無法使用 remote-token
Proxy。如果您必須使用非 Apigee 提供的識別資訊提供者,可以設定轉接器以使用其他識別資訊提供者。如要進一步瞭解這項非 Apigee 身分提供者的用途和必要設定,請參閱 Apigee 社群的這篇文章:
使用自有身分提供者搭配 Apigee Envoy 轉接器。
記錄
您可以調整 $REMOTE_SERVICE_HOME/apigee-remote-service-envoy 服務的記錄層級。所有記錄都會傳送至 stderr。
元素 | 必填 | 說明 |
---|---|---|
-l、--log-level | 有效等級:debug、info、warn、error。 | 調整記錄層級。預設值:info |
-j、--json-log | 以 JSON 記錄格式產生記錄輸出內容。 |
Envoy 提供記錄功能。如需更多資訊,請參閱下列 Envoy 說明文件連結:
變更政策密鑰名稱
部署至叢集的 Kubernetes 密鑰包含轉接器需要的憑證,用於驗證與遠端服務 Proxy 的通訊。這個密鑰需要可設定的磁碟區掛接點。根據預設,掛載點為 /policy-secret
。如要變更掛載點,請按照下列步驟操作:
- 執行以下指令:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name
例如:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
- 在編輯器中開啟
$CLI_HOME/samples/apigee-envoy-adapter.yaml
。 - 將掛接點名稱變更為新名稱:
volumeMounts: - mountPath: /config name: apigee-remote-service-envoy readOnly: true - mountPath: /opt/apigee/tls name: tls-volume readOnly: true - mountPath: /my-mount-point name: policy-secret readOnly: true
- 儲存檔案並套用至服務中介:
kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml
使用網路 Proxy
您可以在 apigee-remote-service-envoy 二進位檔的環境中使用 HTTP_PROXY 和 HTTPS_PROXY 環境變數,插入 HTTP Proxy。使用這些變數時,您也可以使用 NO_PROXY 環境變數,排除透過 Proxy 傳送的特定主機。
HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] NO_PROXY=127.0.0.1,localhost
請注意,Proxy 必須可從 apigee-remote-service-envoy 存取。
關於指標和數據分析
:5001/metrics
提供 Prometheus 指標端點。您可以設定這個通訊埠編號。請參閱「設定檔」。
Envoy 數據分析
以下連結提供有關取得 Envoy 代理伺服器分析資料的資訊:
Istio 數據分析
以下連結提供有關取得 Envoy 代理伺服器分析資料的資訊:
Apigee 數據分析
Envoy 的 Apigee 遠端服務會將要求統計資料傳送至 Apigee,以便進行數據分析。Apigee 會以相關 API 產品名稱回報這些要求。
如要瞭解 Apigee Analytics,請參閱「Analytics 服務總覽」。
支援多租戶環境
您現在可以啟用轉接器,為 Apigee 機構中的多個環境提供服務。這項功能可讓您使用與一個 Apigee 機構相關聯的一個 Apigee Adapter for Envoy,為多個環境提供服務。在這項變更之前,一個轉接程式一律會繫結至一個 Apigee 環境。
如要設定多個環境支援,請將 config.yaml
檔案中的 tenant:env_name
值變更為 "*"
。例如:
- 在編輯器中開啟
config.yaml
檔案。 - 將
tenant.env_name
的值變更為"*"
。例如:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.mydomain.net/remote-service org_name: my-org env_name: "*"" allow_unverified_ssl_cert: true analytics: collection_interval: 10s auth: jwt_provider_key: https://apitest.mydomain.net/remote-token/token
- 儲存檔案。
- 套用檔案:
kubectl apply -f $CLI_HOME/config.yaml
設定多環境模式時,您也必須設定 Envoy,讓 Envoy 將適當的環境值傳送至轉接器,方法是在 envoy-config.yaml
檔案的 virtual_hosts:routes
部分新增下列中繼資料。例如:
- 使用 CLI 產生
envoy-config.yaml
檔案。例如:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- 開啟產生的檔案 (名為
envoy-config.yaml
)。 - 在檔案的
virtual_host
或routes
部分新增下列中繼資料:typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test
以下範例說明
virtual_host
的設定,其中定義了多個路徑,每個路徑都會將流量傳送至特定環境:filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http route_config: virtual_hosts: - name: default domains: "*" routes: - match: { prefix: /test } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test - match: { prefix: /prod } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: prod
- 視需要重複上一個步驟,新增其他環境。
- 儲存並套用檔案。
擷取自訂報表的資料
轉接程式支援將 Envoy 中繼資料傳遞至 Apigee 的資料擷取功能,該功能會將您指定的變數中擷取的資料傳送至 Apigee 分析,以便在自訂報表中使用。這項功能提供的功能類似於 Apigee 的資料擷取政策。
如何使用這項功能:
- 建立 資料收集器 REST 資源。
- 使用 Apigee datacollectors API 定義資料擷取變數。
- 如果您尚未使用 CLI 產生
envoy-config.yaml
檔案,例如:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- 開啟產生的檔案 (名為
envoy-config.yaml
)。 - 使用 Envoy 篩選器,在
envoy.filters.http.apigee.datacapture
命名空間中設定自訂變數的值。 舉例來說,您可以使用「Header to Metadata」篩選器或「Lua」篩選器。 如要進一步瞭解這些篩選器,請參閱「標頭至中繼資料」和「Lua」。自訂變數名稱格式必須為
dc.XXXXX
。標頭到中繼資料篩選器範例:
- name: envoy.filters.http.header_to_metadata typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config request_rules: - header: "Host" on_header_present: metadata_namespace: envoy.filters.http.apigee.datacapture key: dc.host # host (without the prefix) also works type: STRING remove: false
Lua 篩選器範例:
- name: envoy.filters.http.lua typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua inline_code: | function envoy_on_request(request_handle) metadata = request_handle:streamInfo():dynamicMetadata() metadata:set("envoy.filters.http.apigee.datacapture", "dc.test", "A test string.") end
- 將所需濾鏡新增至檔案。請參閱下方範例。
- 儲存並套用檔案。
在轉接程式與 Apigee 執行階段之間設定 mTLS
您可以在轉接程式的 config.yaml
檔案 tenant
專區中提供用戶端傳輸層安全標準 (TLS) 憑證,以便在轉接程式和 Apigee 執行階段之間使用 mTLS。這項異動適用於所有支援的 Apigee 平台。也能為 Apigee Edge for Private Cloud 平台啟用 mTLS 進行數據分析。例如:
tenant: tls: ca_file: path/ca.pem cert_file: path/cert.pem key_file: path/key.pem allow_unverified_ssl_cert: false