Beispiel für Apigee Hybrid mit Kubernetes

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:

Eine allgemeine Ansicht des in eine Apigee Hybrid-Umgebung integrierten Envoy-Adapters, einschließlich der Verwaltungsebene, Laufzeitebene und Google Cloud-Dienste

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

  1. Prüfen Sie, ob Ihre gcloud-Konfiguration auf das Google Cloud-Projekt festgelegt ist, das Ihrer Hybrid-Organisation zugeordnet ist.

    So listen Sie die aktuellen Einstellungen auf:

    gcloud config list

    Legen Sie gegebenenfalls mit folgendem Befehl die richtige Google Cloud-Projekt-ID fest:

    gcloud config set project project-id
  2. Sie müssen für das Google Cloud-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.

  1. Wechseln Sie in das Verzeichnis $CLI_HOME:
    cd $CLI_HOME
  2. Wenn Sie kein Inhaber des Google Cloud-Projekts sind, das mit der Apigee Hybrid-Organisation verknüpft ist, achten Sie darauf, dass Ihr Google Cloud-Nutzerkonto entweder die Rolle Administrator der Apigee-Organisation oder sowohl die Rolle API-Ersteller als auch die Rolle Bereitsteller enthält.

    Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.

  3. Führen Sie folgenden Befehl aus, um ein Zugriffstoken abzurufen:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  4. (Optional) Standardmäßig sucht der Adapter nach Standarddienstkonto-Anmeldedaten in Ihrem Google Cloud-Projekt, um die Berechtigung zum Senden von Analysedaten an Apigee zu erhalten. Wenn Sie die Standarddienstkonto-Anmeldedaten nicht verwenden möchten, können Sie ein Dienstkonto erstellen und im Bereitstellungsbefehl auf seinen Schlüssel verweisen. Das Dienstkonto muss die Rolle apigee.analyticsAgent haben. Eine Anleitung dazu finden Sie unter Dienstkonten erstellen und verwalten.
  5. 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  ## Optional

    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 mit https:// 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 (Optional) 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.
  6. 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
  7. Prüfen Sie den Inhalt der Datei config.yaml. Die Ausgabe sollte ungefähr so aussehen:
    # Configuration for apigee-remote-service-envoy (platform: Google Cloud)
    # 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-token/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
  8. Wenden Sie die Dienstkonfiguration (die Dateiausgabe vom Bereitstellungsbefehl) auf den Cluster an:
    kubectl apply -f $CLI_HOME/config.yaml
  9. Prüfen Sie den Proxy und das Zertifikat. Im Folgenden sollte das gültige JSON-Format zurückgegeben werden:
    curl -i $RUNTIME/remote-token/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:

  1. Wechseln Sie in das Verzeichnis $CLI_HOME.
  2. Führen Sie diesen Befehl aus, um die Dateien zu generieren:

    ./apigee-remote-service-cli samples create -c ./config.yaml --template istio-1.12

    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.

  1. 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 Namespace default verwendet. Bei allen nachfolgenden Anweisungen wird davon ausgegangen, dass dies der Fall ist.

    Wenn Sie das Open-Source-Framework Istio verwenden:

    kubectl label namespace default istio-injection=enabled --overwrite

    Wenn Sie ASM verwenden:

    kubectl label namespace default istio-injection=enabled istio.io/rev=REVISION --overwrite
  2. Wenden Sie den einfachen httpbin-Dienst auf den Cluster im Standard-Namespace an:
    kubectl apply -f $CLI_HOME/samples/httpbin.yaml
  3. 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
  4. 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 Remotedienst für Envoy-Client. 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.

  1. Wenden Sie den Apigee Remote Service auf das Service Mesh an:
    kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
  2. Wenden Sie EnvoyFilter auf die Istio-Sidecars an den Standard-Namespace an. Mit EnvoyFilter kann die Sidecar-Datei httpbin mit dem Apigee-Remotedienst kommunizieren:
    kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml

Installation testen

  1. 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, gibt der Server folgenden Fehler zurück.

    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
  2. Konfigurieren Sie ein API-Produkt und rufen Sie einen API-Schlüssel ab, wie unter API-Schlüssel abrufen erläutert.
  3. 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:

  • Greifen Sie über die Edge-Benutzeroberfläche auf Apigee Analytics zu. Rufen Sie Analysieren > API-Messwerte > API-Proxy-Leistung auf.
  • Verwenden Sie die Kommandozeile zum Verwalten, Erstellen und Steuern von Bindungen. Details zur Befehlszeile finden Sie in der Referenz.

Apigee Adapter for Envoy deinstallieren

So entfernen Sie eine Installation des Apigee Envoy-Adapters:

  1. Entfernen Sie den Hadoop-Adapter, den Sie nativ oder in Docker ausführen möchten.
  2. Löschen Sie die Proxys remote-service und remote-token aus Ihren Apigee-Umgebungen. Siehe API-Proxy löschen.
  3. Entfernen Sie nicht verwendete API-Produkte oder Vorgänge, die von den Envoy-Adapter-Anwendungsfällen verwendet werden. Siehe API-Produkt löschen.

Außerdem können Sie die folgenden Befehle ausführen:

kubectl delete -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
  kubectl delete -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
  kubectl delete -f $CLI_HOME/samples/httpbin.yaml
  kubectl delete -f $CLI_HOME/config.yaml