本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本範例說明如何在 Apigee 混合式部署中使用 Apigee Adapter for Envoy。
必要條件
事前準備: |
---|
|
|
總覽
本範例說明如何搭配 Apigee Hybrid 使用 Envoy 專用的 Apigee 轉接器。在本範例中,您將在部署 Apigee Hybrid 的 Kubernetes 叢集中部署簡易的 HTTP 服務。接著,您將設定 Apigee Adapter for Envoy,以便透過 Apigee 管理對此服務的 API 呼叫。
下圖顯示 Apigee 混合式整合的基本架構:
在 Istio 服務網格中,Envoy Proxy 會與目標 HTTP 服務一併部署為 Istio 補充程式。補充程式會處理往返目標服務的 API 流量,並與遠端服務通訊。遠端服務也會與混合式管理層通訊,擷取 API 產品和 Proxy 資訊。
檢查 gcloud 設定
- 確認
gcloud
設定已設為與混合式機構相關聯的 GCP 專案。如要列出目前的設定,請按照下列步驟操作:
gcloud config list
如有需要,請使用下列指令設定正確的 GCP 專案 ID:
gcloud config set project project-id
- 您必須使用 Google Cloud SDK (gcloud) 驗證 GCP 專案:
gcloud auth login
佈建 Apigee Hybrid
在這個步驟中,您將使用遠端服務 CLI 為混合式服務設定 remote-service
API proxy。佈建指令也會在 Apigee 上設定憑證,並產生遠端服務用來安全地連回 Apigee 的憑證。
- 前往
$CLI_HOME
目錄:cd $CLI_HOME
- 如果您不是與 Apigee 混合機構相關聯的 GCP 專案擁有者,請確認您的 GCP 使用者帳戶包含
Apigee Organization Admin
角色。請參閱「授予、變更及撤銷資源的存取權」。 - 執行下列指令即可取得存取權:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- 建立下列環境變數。這些變數會用做佈建指令碼的參數:
export ORG=organization_name
export ENV=environment_name
export RUNTIME=host_alias_url
export NAMESPACE=hybrid_runtime_namespace
其中:
變數 說明 organization_name Apigee Hybrid 安裝作業的 Apigee 機構名稱。 environment_name Apigee Hybrid 機構中的環境名稱。 host_alias_url 混合型設定中定義的虛擬主機的網址,其中包含 hostAlias
。網址開頭必須是https://
。例如:https://apitest.apigee-hybrid-docs.net
hybrid_runtime_namepace 部署 Hybrid 執行階段元件的命名空間。注意:混合式部署的預設命名空間為 apigee
。 - 執行下列指令,為 Apigee hybrid 佈建遠端服務 Proxy:
如果您不升級,請使用這個指令來佈建 Apigee:
./apigee-remote-service-cli provision --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yaml
如果您要升級,請使用此指令搭配
--force-proxy-install
標記,為 Apigee 進行佈建:./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yaml
- 檢查
config.yaml
檔案的內容。內容應如下所示:# Configuration for apigee-remote-service-envoy # generated by apigee-remote-service-cli provision on 2020-07-06 18:03:58 apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.apigee-hybrid-docs.net/remote-service org_name: hybrid-docs env_name: envoy allow_unverified_ssl_cert: true analytics: collection_interval: 10s fluentd_endpoint: apigee-udca-hybrid-docs-envoy.apigee:20001 tls: ca_file: /opt/apigee/tls/ca.crt key_file: /opt/apigee/tls/tls.key cert_file: /opt/apigee/tls/tls.crt --- apiVersion: v1 kind: Secret metadata: name: hybrid-docs-envoy-policy-secret namespace: apigee type: Opaque data: remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci... remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS... remote-service.properties: a2lkPTIwMjAtMDctMDZ...
- 將服務設定 (佈建指令產生的檔案輸出內容) 套用至叢集:
kubectl apply -f $CLI_HOME/config.yaml
- 驗證 Proxy 和憑證。以下應會傳回有效的 JSON:
curl -i $RUNTIME/remote-service/certs
輸出結果如下所示:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kid": "2020-05-11T11:32:26-06:00", "kty": "RSA", "n": "0v-nbTQyAmtVZ-wZRP0ZPIbrVaX91YO9JZ9xCQPb4mOdOSS7yKfTDJGg0KM130sGVYBvR76alN8 fhrrSDEG5VXG8YYMqPXarwRC7MRJWocCQ_ECYrjDD0_Q018M2HyXZYSd8fhAogi9mVUYsEmCKqJH53Dh1 jqsHOQzBLKsX0iDO9hEZNFtjbX0UCbSxsUlmBCub7Uj2S-PahA6DEQOMhQjZM7bBMtkTMpFmaJ_RZTmow BHP57qMna17R8wHD4kUsO2u_-3HHs5PSj1NrEYoVU2dwLQw0GlkB__ZWeFgXTqot81vb-PmoM9YxwoZrm TcHdljugWy_s7xROPzTod0uw" } ] }
建立設定檔範例
使用 apigee-remote-service-cli samples create
指令產生範例設定檔。
在本例中,您需要以下產生的檔案:
httpbin.yaml
:HTTP 服務的部署設定。apigee-envoy-adapter.yaml
:Envoy 遠端服務的部署設定。envoyfilter-sidecar.yaml
- 安裝 EnvoyFilter 的設定。至預設命名空間。
如要產生樣本,請按照下列步驟操作:
- 前往
$CLI_HOME
目錄。 執行以下指令產生檔案:
./apigee-remote-service-cli samples create -c ./config.yaml
以下檔案會輸出至
./samples
目錄:ls samples apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
詳情請參閱「Samples 指令」。
將測試服務部署至叢集
在這個步驟中,您將在部署 Apigee hybrid 的相同叢集中,部署簡單的 HTTP 要求/回應測試服務。
- 在叢集的
default
命名空間中啟用 Istio 注入功能。在後續步驟中,您會將 Envoy 附屬程式部署至同一叢集。啟用 Istio 植入功能可讓您部署 Sidecar。本範例使用default
命名空間,後續所有操作都會假設這個情況。kubectl label namespace default istio-injection=enabled
- 將簡易
httpbin
服務套用至預設命名空間中的叢集:kubectl apply -f $CLI_HOME/samples/httpbin.yaml
- 接下來,請測試這項服務。啟動叢集中執行的
curl
服務,並開啟終端機:kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
- 從叢集內部叫用服務來測試服務:
curl -i httpbin.default.svc.cluster.local/headers
成功後,您會看到 200 狀態,且服務會傳回標頭清單。例如:
HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:09:01 GMT content-type: application/json content-length: 328 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 7 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-B3-Parentspanid": "69f88bc3e322e157", "X-B3-Sampled": "0", "X-B3-Spanid": "8dd725f30e393d8b", "X-B3-Traceid": "38093cd817ad30a569f88bc3e322e157" } }
為 Envoy 執行遠端服務
在這個步驟中,您會在安裝 Apigee hybrid 的服務網格中啟動 Envoy 用戶端的遠端服務。這項服務會為在目標服務上安裝的 Istio sidecar 提供端點。您也會安裝 httpbin
服務的附加元件。
- 將 Apigee 遠端服務套用至服務網格:
kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
- 將
EnvoyFilter
套用至預設命名空間中的 Istio 補充資訊。EnvoyFilter
可讓httpbin
副車與 Apigee 遠端服務通訊。kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
測試安裝結果
- 接著,請返回您在「
將測試服務部署至叢集」步驟中開啟的 curl 殼層,並呼叫
httpbin
服務:curl -i httpbin.default.svc.cluster.local/headers
服務目前由 Apigee 管理,由於您未提供 API 金鑰,因此會傳回以下錯誤。
curl -i httpbin.default.svc.cluster.local/headers HTTP/1.1 403 Forbidden date: Tue, 12 May 2020 17:51:36 GMT server: envoy content-length: 0 x-envoy-upstream-service-time: 11
- 按照「如何取得 API 金鑰」一文所述,設定 API 產品並取得 API 金鑰。
- 使用金鑰發出 API 呼叫:
export APIKEY=YOUR_API_KEY
curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: $APIKEY"
呼叫應成功傳回 200 狀態,並在回應中傳回標頭清單。例如:
curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS" HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:55:34 GMT content-type: application/json content-length: 828 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 301 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-Api-Key": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Accesstoken": "", "X-Apigee-Api": "httpbin.default.svc.cluster.local", "X-Apigee-Apiproducts": "httpbin", "X-Apigee-Application": "httpbin", "X-Apigee-Authorized": "true", "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Developeremail": "jdoe@example.com", "X-Apigee-Environment": "envoy", "X-Apigee-Organization": "acme-org", "X-Apigee-Scope": "", "X-B3-Parentspanid": "1476f9a2329bbdfa", "X-B3-Sampled": "0", "X-B3-Spanid": "1ad5c19bfb4bc96f", "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa" } }
後續步驟
httpbin
服務的 API 流量現在由 Apigee 管理。以下是您可以探索及嘗試的部分功能:
- 如果您按照「如何取得 API 金鑰」一文的說明設定 API 產品,配額限制就會設為每分鐘 5 個要求。請再試著呼叫
httpbin
服務幾次,以觸發配額。配額用盡時,系統會傳回 HTTP 狀態 403 錯誤。 - 在 Apigee UI 中存取 Apigee Analytics。依序前往「Analyze」>「API Metrics」>「API Proxy Performance」。
- 產生及使用 JWT 權杖來驗證 API 呼叫。
- 使用 CLI 管理、建立符記,以及控制繫結。如需 CLI 詳細資訊,請參閱參考資料。