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
Erledigen Sie zuerst Folgendes: |
---|
|
Ü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
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.
- Wechseln Sie zum Verzeichnis "Remote Service":
cd $REMOTE_SERVICE_HOME
- 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 samples/istio/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" } }
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
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
. - 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 --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 --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 # 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...
- 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 --http1.1 -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" } ] }
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. In einem späteren Schritt installieren Sie einen Sidecar mit dem Dienst httpbin
.
- Öffnen Sie
$REMOTE_SERVICE_HOME/samples/istio/hybrid-apigee-remote-service-envoy.yaml
in einem Editor. - Wenn Sie nicht die neueste Version des Remote-Dienstes verwenden, müssen Sie die Konfiguration möglicherweise anpassen. Wenn Sie die neueste Version verwenden, fahren Sie mit dem nächsten Schritt fort. Wenn Sie nicht die neueste Version verwenden, legen Sie das Element
image:
so fest, dass es auf Ihre Version verweist. Wenn Sie beispielsweise die Versionv1.0.0-beta.4
verwenden, ändern Sie das Tagimage
in:image: "gcr.io/apigee-api-management-istio/apigee-remote-service-envoy:v1.0.0-beta.4"
- Legen Sie das Element
tls-volume.secretName
für Ihre Organisation und Umgebung fest:... volumes: - name: tls-volume secret: defaultMode: 420 secretName: apigee-runtime-$ORG-$ENV-tls - name: policy-secret secret: defaultMode: 420 secretName: $ORG-$ENV-policy-secret
Beispiel:
... volumes: - name: tls-volume secret: defaultMode: 420 secretName: apigee-runtime-myorg-myenv-tls - name: policy-secret secret: defaultMode: 420 secretName: myorg-myenv-policy-secret ...
- Wenden Sie den Apigee Remote Service auf das Service Mesh an:
kubectl apply -f $REMOTE_SERVICE_HOME/samples/istio/hybrid-apigee-remote-service-envoy.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 $REMOTE_SERVICE_HOME/samples/istio/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 erkunden 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 Sie das Kontingent überschreiten, wird folgende Fehlermeldung angezeigt:HTTP/1.1 429 Too Many Requests
- Greifen Sie über die Edge-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.