Diese Seite gilt für Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen
Dieses Beispiel zeigt, wie der Apigee-Adapter für Envoy mit einer Apigee-Hybridbereitstellung verwendet wird.
Vorbereitung
Hinweis |
---|
|
Übersicht
In diesem Beispiel wird erläutert, wie Sie den Apigee Adapter for Envoy mit Apigee Hybrid verwenden. In diesem Beispiel stellen Sie einen einfachen HTTP-Dienst im selben Kubernetes-Cluster bereit, in dem Apigee Hybrid bereitgestellt wird. Anschließend konfigurieren Sie den Apigee-Adapter für Envoy, um API-Aufrufe dieses Dienstes mit Apigee zu verwalten.
Die folgende Abbildung zeigt die grundlegende Architektur der Apigee-Hybridintegration:
Ein Envoy-Proxy wird mit dem Ziel-HTTP-Dienst als Istio-Sidecar im Istio-Service Mesh bereitgestellt. Der Sidecar verarbeitet den API-Traffic vom und zum Zieldienst und kommuniziert mit dem Remotedienst. Der Remote Service kommuniziert auch mit der hybriden Verwaltungsebene, um API-Produkt- und Proxy-Informationen abzurufen.
gcloud-Konfiguration prüfen
- Prüfen Sie, ob Ihre
gcloud
-Konfiguration auf das GCP-Projekt festgelegt ist, das Ihrer hybriden Organisation zugeordnet ist.So listen Sie die aktuellen Einstellungen auf:
gcloud config list
Legen Sie gegebenenfalls mit folgendem Befehl die richtige GCP-Projekt-ID fest:
gcloud config set project project-id
- Sie müssen für das GCP-Projekt mit dem Google Cloud SDK (gcloud) authentifiziert sein:
gcloud auth login
Apigee Hybrid bereitstellen
In diesem Schritt stellen Sie mit der Remote Service CLI Hybrid-Cloud über den API-Proxy remote-service
bereit. Der Bereitstellungsbefehl richtet auch ein Zertifikat für Apigee ein und generiert Anmeldedaten, die der Remotedienst verwendet, um eine sichere Verbindung zu Apigee herzustellen.
- Wechseln Sie in das Verzeichnis
$CLI_HOME
:cd $CLI_HOME
- Wenn Sie kein Inhaber des GCP-Projekts sind, das mit der Apigee-Hybridorganisation verknüpft ist, prüfen Sie, ob Ihr GCP-Nutzerkonto die Rolle
Apigee Organization Admin
enthält. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen. - Führen Sie folgenden Befehl aus, um ein Zugriffstoken abzurufen:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- Erstellen Sie die folgenden Umgebungsvariablen. Diese Variablen werden als Parameter für das Bereitstellungsskript verwendet:
export ORG=organization_name
export ENV=environment_name
export RUNTIME=host_alias_url
export NAMESPACE=hybrid_runtime_namespace
export AX_SERVICE_ACCOUNT=analytics_service_account
Dabei gilt:
Variable Beschreibung organization_name Der Name der Apigee-Organisation für Ihre Apigee-Hybridinstallation. environment_name Der Name einer Umgebung in Ihrer Apigee-Hybridorganisation. host_alias_url Eine URL, die hostAlias
für einen virtuellen Host enthält, der in Ihrer Hybridkonfiguration definiert ist. Die URL muss mithttps://
beginnen. Beispiel:https://apitest.apigee-hybrid-docs.net
hybrid_runtime_namepace Der Namespace, in dem die Hybrid-Laufzeitkomponenten bereitgestellt werden. Hinweis: Der Standard-Namespace für eine Hybridbereitstellung ist apigee
.analytics_service_account Der Pfad zu einer JSON-Datei des Google Cloud-Dienstkontoschlüssels mit der Rolle Apigee Analytics Agent
. Eine ausführliche Beschreibung dieses Parameters finden Sie unter Bereitstellungsbefehl. - Führen Sie den folgenden Befehl aus, um den Remotedienst-Proxy für Apigee Hybrid bereitzustellen:
Wenn Sie kein Upgrade durchführen, können Sie Apigee mit dem folgenden Befehl bereitstellen:
./apigee-remote-service-cli provision --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
Wenn Sie ein Upgrade durchführen, verwenden Sie den folgenden Befehl mit dem Flag
--force-proxy-install
, um Apigee bereitzustellen:./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
- Prüfen Sie den Inhalt der Datei
config.yaml
. Die Ausgabe sollte ungefähr so aussehen:# Configuration for apigee-remote-service-envoy (platform: GCP) # generated by apigee-remote-service-cli provision on 2020-11-20 02:49:28 apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.example.com/remote-service org_name: hybrid-gke env_name: test analytics: collection_interval: 10s auth: jwt_provider_key: https://apitest.example.com/remote-service/token --- apiVersion: v1 kind: Secret metadata: name: hybrid-gke-new-test-policy-secret namespace: apigee type: Opaque data: remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci... remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS... remote-service.properties: a2lkPTIwMjAtMDctMDZ... --- apiVersion: v1 kind: Secret metadata: name: hybrid-gke-new-test-analytics-secret namespace: apigee type: Opaque data: client_secret.json: ewogICJ0eXBlIjogInNlcnZ... --- apiVersion: v1 kind: ServiceAccount metadata: name: apigee-remote-service-envoy namespace: apigee
- Wenden Sie die Dienstkonfiguration (die Dateiausgabe vom Bereitstellungsbefehl) auf den Cluster an:
kubectl apply -f $CLI_HOME/config.yaml
- Prüfen Sie den Proxy und das Zertifikat. Im Folgenden sollte das gültige JSON-Format zurückgegeben werden:
curl -i $RUNTIME/remote-service/certs
Die Ausgabe sieht in etwa so aus:
{ "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" } ] }
Beispielkonfigurationsdateien erstellen
Verwenden Sie den Befehl apigee-remote-service-cli samples create
, um Beispielkonfigurationsdateien zu generieren.
Für dieses Beispiel benötigen Sie diese generierten Dateien:
httpbin.yaml
– Eine Bereitstellungskonfiguration für einen HTTP-Dienst.apigee-envoy-adapter.yaml
– Eine Bereitstellungskonfiguration für den Remotedienst für Envoy.envoyfilter-sidecar.yaml
– Eine Konfiguration, die einen Envoy-Filter im Standard-Namespace installiert.
So generieren Sie die Beispiele:
- Wechseln Sie in das Verzeichnis
$CLI_HOME
. Führen Sie diesen Befehl aus, um die Dateien zu generieren:
./apigee-remote-service-cli samples create -c ./config.yaml
Die folgenden Dateien geben das Verzeichnis
./samples
aus:ls samples apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
Weitere Informationen finden Sie unter Befehl „Beispiele“.
Testdienst auf dem Cluster bereitstellen
In diesem Schritt stellen Sie einen einfachen HTTP-Anfrage-/Antwort-Testdienst in demselben Cluster bereit, in dem Apigee Hybrid bereitgestellt wird.
- Aktivieren Sie die Istio-Injection im Namespace
default
des Clusters. In einem späteren Schritt stellen Sie eine Envoy-Sidecar-Datei in demselben Cluster bereit. Wenn Sie Istio Injection aktivieren, wird die Sidecar-Bereitstellung ermöglicht. In diesem Beispiel wird der Namespacedefault
verwendet. Bei allen nachfolgenden Anweisungen wird davon ausgegangen, dass dies der Fall ist.kubectl label namespace default istio-injection=enabled
- Wenden Sie den einfachen
httpbin
-Dienst auf den Cluster im Standard-Namespace an:kubectl apply -f $CLI_HOME/samples/httpbin.yaml
- Testen Sie jetzt den Dienst. Starten Sie einen
curl
-Dienst, der im Cluster ausgeführt wird, und öffnen Sie ein Terminal:kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
- Testen Sie den Dienst, indem Sie ihn aus dem Cluster heraus aufrufen:
curl -i httpbin.default.svc.cluster.local/headers
Bei Erfolg wird Status 200 angezeigt und der Dienst gibt eine Liste der Header zurück. Beispiel:
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" } }
Remotedienst für Envoy ausführen
In diesem Schritt starten Sie den Remote Service for Envoy-Client in dem Service Mesh, in dem Apigee Hybrid installiert ist. Dieser Dienst stellt die Endpunkte für die Istio-Sidecars bereit, die in Zieldiensten installiert sind. Außerdem installieren Sie eine Sidecar-Datei mit dem Dienst httpbin
.
- Wenden Sie den Apigee Remote Service auf das Service Mesh an:
kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
- Wenden Sie
EnvoyFilter
auf die Istio-Sidecars an den Standard-Namespace an. MitEnvoyFilter
kann die Sidecar-Dateihttpbin
mit dem Apigee-Remotedienst kommunizieren:kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
Installation testen
- Kehren Sie nun zu der curl-Shell zurück, die Sie im Schritt
Testdienst im Cluster bereitstellen geöffnet haben, und rufen Sie den Dienst
httpbin
auf:curl -i httpbin.default.svc.cluster.local/headers
Der Dienst wird jetzt von Apigee verwaltet. Da Sie keinen API-Schlüssel angegeben haben, wird der folgende Fehler zurückgegeben.
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
- Konfigurieren Sie ein API-Produkt und rufen Sie einen API-Schlüssel ab, wie unter API-Schlüssel abrufen erläutert.
- Führen Sie einen API-Aufruf mit dem Schlüssel aus:
export APIKEY=YOUR_API_KEY
curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: $APIKEY"
Der Aufruf sollte erfolgreich mit Status 200 funktionieren und eine Liste der Header in der Antwort zurückgeben. Beispiel:
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" } }
Tipp
Der API-Traffic zum Dienst httpbin
wird jetzt von Apigee verwaltet. Hier sind einige Funktionen, die Sie entdecken und versuchen können:
- Wenn Sie Ihr API-Produkt wie unter API-Schlüssel abrufen beschrieben konfiguriert haben, wurde das Kontingentlimit auf 5 Anfragen pro Minute festgelegt. Rufen Sie den Dienst
httpbin
noch einmal auf, um das Kontingent auszulösen. Wenn das Kontingent aufgebraucht ist, wird der HTTP-Statusfehler 403 zurückgegeben. - Greifen Sie über die Apigee-Benutzeroberfläche auf Apigee Analytics zu. Rufen Sie Analysieren > API-Messwerte > API-Proxy-Leistung auf.
- Generieren und verwenden Sie JWT-Tokens zur Authentifizierung von API-Aufrufen.
- Verwenden Sie die Kommandozeile zum Verwalten und Erstellen von Tokens und zum Steuern von Bindungen. Details zur Befehlszeile finden Sie in der Referenz.