Apigee Connect

In diesem Abschnitt wird die Verwendung von Apigee Connect für die Kommunikation zwischen der hybriden Verwaltungsebene und dem MART-Dienst auf Laufzeitebene beschrieben.

Einführung

Apigee Connect ermöglicht es der hybriden Verwaltungsebene von Apigee, eine sichere Verbindung zum MART-Dienst auf Laufzeitebene herzustellen, ohne dass Sie den MART-Endpunkt im Internet freigeben müssen. Wenn Sie Apigee Connect verwenden, müssen Sie das MART-Ingress-Gateway nicht mit einem Host-Alias und einem autorisierten DNS-Zertifikat konfigurieren.

Primäre Dienste, die auf der Hybridlaufzeitumgebung mit Apigee Connect ausgeführt werden

Vorbereitung

Apigee Hybrid 1.2.0 oder neuer.

Apigee Connect zur Hybridlaufzeit hinzufügen

Apigee Connect ist für neue Installationen der Apigee-Hybridversion 1.3.0 und höher standardmäßig aktiviert. Daher benötigen Sie diese Schritte wahrscheinlich, wenn Sie ein Upgrade von einer älteren Version ausführen.

Wenn Apigee Connect konfiguriert und aktiviert ist, wird der eingehende MART-Traffic ignoriert: die Verwaltungsebene verbindet sich nur über Apigee Connect mit MART. Der gesamte MART-Traffic zwischen der Hybridlaufzeitebene durchläuft die sichere Apigee Connect-Verbindung.

Führen Sie die folgenden Schritte aus, um Apigee Connect mit Apigee Hybrid zu aktivieren und zu verwenden:

  1. Aktivieren Sie die Apigee Connect API in der Google Cloud API-Bibliothek. Sie können die API in der Google Cloud Console oder mit gcloud aktivieren. Informationen zum Aktivieren von APIs in der Google Cloud Console finden Sie unter Schritt 3: APIs aktivieren. So aktivieren Sie die API mit gcloud:
    1. Legen Sie die Einstellung des aktuellen Projekts in gcloud auf dasselbe Google Cloud-Projekt, für das Apigee aktiviert und Ihre Apigee-Organisation bereitgestellt wurde.
      $ gcloud config set project YOUR_GCP_PROJECT_ID

      Dabei ist YOUR_GCP_PROJECT_ID die Projekt-ID.

    2. Prüfen Sie, ob die Apigee Connect API bereits aktiviert ist:
      gcloud services list
      NAME                                 TITLE
      apigee.googleapis.com                Apigee API
      apigeeconnect.googleapis.com         Apigee Connect API
      bigquery.googleapis.com              BigQuery API
      
      ...
    3. Aktivieren Sie die API, wenn in den Ergebnissen apigeeconnect.googleapis.com nicht enthalten ist:
      $ gcloud services enable apigeeconnect.googleapis.com
  2. Fügen Sie die Rolle des Apigee Connect-Agents zu dem MART-Dienstkonto hinzu, das Sie im Schritt Dienstkonten erstellen gemäß Apigee Hybridinstallationsanleitung erstellt haben:
    1. Ermitteln Sie gegebenenfalls die E-Mail-Adresse Ihres MART-Dienstkontos:
      gcloud iam service-accounts list
      NAME                          EMAIL                                                 DISABLED
      apigee-mart                   apigee-mart@hybrid-example.iam.gserviceaccount.com       False
      
      ...
    2. Prüfen Sie, ob dem MART-Dienstkonto bereits die Rolle zugewiesen ist:
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. Weisen Sie die Rolle zu, wenn die Ergebnisse nicht role: roles/apigeeconnect.Agent enthalten sollen:
      gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \
      --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

      Dabei ist YOUR_GCP_PROJECT_ID die ID Ihres Google Cloud-Projekts und YOUR_MART_SERVICE_ACCOUNT_EMAIL die E-Mail-Adresse des MART-Dienstkontos.

    Die Rolle Apigee Connect-Agent ist vordefiniert und die folgende Berechtigung ist zugewiesen:

    Berechtigung Beschreibung
    apigeeconnect.endpoints.connect Dies ist die zum Einrichten des Apigee Connect-Agents erforderliche Berechtigung.

    Weitere Informationen zum Zuweisen von Zugriffsberechtigungen über die Google Cloud Console oder APIs finden Sie unter:

  3. Achten Sie darauf, dass sich die Schlüsseldatei des MART-Dienstkontos im Verzeichnis hybrid_files/service_accounts befindet, wie unter Dienstkonten erstellen beschrieben.
  4. Öffnen Sie die Überschreibungsdatei. Wenn das Attribut connectAgent:enabled nicht auf "true" gesetzt ist oder fehlt, fügen Sie die folgende Stanza hinzu oder aktualisieren sie.

    Die Apigee Connect-Stanza muss unmittelbar unter der k8sCluster-Stanza folgen.

    Für die Konfiguration müssen Sie den Pfad zum heruntergeladenen Dienstkontoschlüssel angeben. Der Schlüssel muss für das Dienstkonto mit der Rolle Apigee Connect-Agent sein.

    # Apigee Connect Agent
    connectAgent:
      enabled: true
      serviceAccountPath: ./service-accounts/MART_SA_KEYFILE.json
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      replicaCountMin: 1
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
  5. mart:
        serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
      
  6. Aktivieren Sie das Apigee Connect-Feature für Ihre Organisation. Der Feature-Name lautet features.mart.connect.enabled.
    1. Suchen Sie den Dienstkontoschlüssel mit der Rolle Apigee Organization Admin, die Sie bei der anfänglichen Installation von Apigee Hybrid verwendet haben, wie im Abschnitt Synchronisierungszugriff aktivieren beschrieben. Dies ist das Dienstkonto apigee-org-admin. Sie benötigen diesen Schlüssel, um ein Token zu generieren, das für einen API-Aufruf erforderlich ist, wie unten erläutert.
    2. Führen Sie die folgenden beiden Befehle aus, um ein Token abzurufen:
      export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
      $ export TOKEN=$(gcloud auth application-default print-access-token)

      Dabei ist org-admin-service-account-file der Pfad auf dem System zum Dienstkontoschlüssel mit der Rolle Apigee Organization Admi.

    3. Prüfen Sie, ob Apigee Connect bereits aktiviert ist:
      curl  https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Authorization: Bearer $TOKEN"

      Suchen Sie in den Ergebnissen nach:

        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
    4. Wenn die Ergebnisse nicht features..mart.connect.enabled enthalten, das auf true gesetzt ist, rufen Sie die folgende Apigee API auf, um Apigee Connect für Ihre Organisation zu aktivieren:
      curl -v -X PUT \
         https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $TOKEN" \
        -d '{
        "name" : "your_org_name",
        "properties" : {
          "property" : [ {
            "name" : "features.hybrid.enabled",
            "value" : "true"
          }, {
            "name" : "features.mart.connect.enabled",
            "value" : "true"
          } ]
        }
      }'

  7. Starten Sie den Apigee Connect-Agent im Cluster.

    Wenn Sie an einem der obigen Schritte Änderungen vorgenommen haben, starten Sie den Apigee Connect-Agent mit dem folgenden Befehl:

    Helm

    helm upgrade ORG_NAME apigee-org/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --org
  8. Prüfen Sie das Log des Apigee Connect-Agents. Wenn keine Fehler gemeldet wurden, ist das Upgrade erfolgreich:
    kubectl logs -n namespace apigee-connect-agent-pod-name

    Der Apigee Connect-Agent meldet die folgenden Logkategorien:
    Audit-Logkategorie Vorgänge
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    Informationen zum Anzeigen von Audit-Logs in Apigee Hybrid finden Sie unter Audit-Logging-Informationen.
  9. Mit diesem Upgrade kommuniziert die hybride Laufzeitebene mit Apigee Connect mit der Verwaltungsebene.

  10. Installation testen

Siehe auch: Apigee Connect entfernen.

Installation testen

  1. Öffnen Sie die Hybrid-Benutzeroberfläche von Apigee.
  2. Prüfen Sie, ob alle zuvor erstellten Entwickler und Entwickler-Apps auf der Benutzeroberfläche vorhanden sind. Da diese Entitäten vom MART-Server abgefragt werden, sind sie nur vorhanden, wenn die Kommunikation zwischen den Verwaltungs- und Laufzeitebenen korrekt konfiguriert ist.
  3. Um sicherzustellen, dass Anfragen über Apigee Connect und nicht über den MART-Eingang geleitet werden, prüfen Sie das Log des MART-Servers. Sie sollten Einträge für den Apigee Connect-Agent mit dem Namen apigee-connect-agent-1.0 sehen:
    kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect

    Beispiel:

    "2020-07-31 04:59:52,321 org: env: target: action: context-id: mode: pool-1-thread-1 INFO.
    gserviceaccount.com 1576040392317 /v1/organizations/apigee-connect-hybrid-prod/developers/
    count=100&expand=true&startKey=4ee9e8f7-12b2-4cde-bf10-32d991469876 200 GET apigee-connect
    -hybrid-prod 10.40.11.3 10.40.0.5 apigee-connect-agent-1.0 null"
  4. Aktualisieren Sie Ihr Autorisierungstoken:
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. Rufen Sie die Apigee API auf, um die verfügbaren Streams anzeigen zu lassen, die eine Verbindung zum Endpunkt apigee-mart herstellen:
    curl -s https://apigeeconnect.googleapis.com/v1/projects/YOUR_GCP_PROJECT_ID/endpoints/apigee_mart/connections \
      -H "Authorization: Bearer $TOKEN"
    {
      "connections": [
        {
          "endpoint": "projects/865098068308/endpoints/apigee_mart",
          "cluster": {
            "name": "apigee-connect-test-cluster2",
            "region": "australia-southeast1"
          },
          "streamCount": 4
        },
        {
          "endpoint": "projects/865098068308/endpoints/apigee_mart",
          "cluster": {
            "name": "apigee-connect-test-cluster",
            "region": "us-central1"
          },
          "streamCount": 2
        }
      ]
    }
  6. Prüfen Sie die Logs des Apigee Connect-Agents:
    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>

    Die folgenden Logs zeigen, dass der Apigee Connect-Agent gestartet wurde und ordnungsgemäß kommuniziert:

    I0719 11.66:10.765526 2314949 main.go:47] Agent's flag values below
    I0719 11.66:10.765928 2314949 main.go:50] "alsologtostderr" : false
    I0719 11.66:10.765940 2314949 main.go:50] "cluster_name" : testABC
    I0719 11.66:10.765947 2314949 main.go:50] "cluster_region" : us-west2
    I0719 11.66:10.765953 2314949 main.go:50] "cpu_profile_enabled" : false
    I0719 11.66:10.765959 2314949 main.go:50] "http_client_timeout" : 2m0s
    I0719 11.66:10.765966 2314949 main.go:50] "http_port" : 7070
    I0719 11.66:10.765972 2314949 main.go:50] "http_server" : false
    I0719 11.66:10.765978 2314949 main.go:50] "insecure_ssl" : false
    I0719 11.66:10.765984 2314949 main.go:50] "local_cert" :
    I0719 11.66:10.765990 2314949 main.go:50] "log_backtrace_at" : :0
    I0719 11.66:10.766001 2314949 main.go:50] "log_dir" :
    I0719 11.66:10.766007 2314949 main.go:50] "logtostderr" : true
    I0719 11.66:10.766012 2314949 main.go:50] "mem_profile_enabled" : false
    I0719 11.66:10.766018 2314949 main.go:50] "project" : projects/apigee-connect-hybrid-prod
    I0719 11.66:10.766025 2314949 main.go:50] "resource_id" :
    I0719 11.66:10.766031 2314949 main.go:50] "server_addr" : apigeeconnect.googleapis.com:443
    I0719 11.66:10.766036 2314949 main.go:50] "server_cert" : ./server.crt
    I0719 11.66:10.766042 2314949 main.go:50] "server_key" : ./server.key
    I0719 11.66:10.766047 2314949 main.go:50] "stderrthreshold" : 2
    I0719 11.66:10.766054 2314949 main.go:50] "target_server" : http://127.0.0.1/
    I0719 11.66:10.766059 2314949 main.go:50] "tether_endpoint" : APIGEE_MART
    I0719 11.66:10.766065 2314949 main.go:50] "v" : 0
    I0719 11.66:10.766072 2314949 main.go:50] "vmodule" :
    I0719 11.66:10.845441 2314949 agent.go:400] successfully initiated http client
    I0719 11.66:10.845772 2314949 agent.go:728] starting metrics http server at ":7070"
    I0719 11.66:11.231.69 2314949 agent.go:245] listening on tether 6407043920806543360
    I0719 11.68:11.346544 2314949 agent.go:245] listening on tether 2101602677040349184
    I0719 12:00:11.461084 2314949 agent.go:245] listening on tether 9109203697228840960
    I0719 12:02:11.683743 2314949 agent.go:245] listening on tether 8978599308035096576
    I0719 12:02:40.325633 2314949 agent.go:255] tether id 6407043920806543360 is closed
    
    ...
  7. Erstellen Sie in der hybriden UI ein API-Produkt, einen Entwickler und eine Entwickler-App. Führen Sie dann mehrere API-Aufrufe an einen Proxy aus.

    Die während der Verarbeitung von Anfragen generierten Connect Agent-Logs sind hilfreich, um den Status oder Fehler zu erkennen:

    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>
    INFO: 2020/04/13 03:29:08 "961ff385-600a-427a-8864-ba066ff42330": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:08 Attempting to send response 961ff385-600a-427a-8864-ba066ff42330 on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:09 "e2fc0492-6e78-4c58-972b-7de8258b9e86": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:09 Attempting to send response e2fc0492-6e78-4c58-972b-7de8258b9e86 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:10 "1ab3023b-b763-4b91-bf4f-ca8c02f62e50": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:10 Attempting to send response 1ab3023b-b763-4b91-bf4f-ca8c02f62e50 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:12 "1fa3e3c3-a36e-4ff1-b2d3-5cf14f2f8fdd": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:12 Attempting to send response 1fa3e3c3-a36e-4ff1-b2d3-5cf14f2f8fdd on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:13 "09b7ef9d-f53d-466a-a174-e88fc7e5286d": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:13 Attempting to send response 09b7ef9d-f53d-466a-a174-e88fc7e5286d on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:14 "c2ce8b73-8faf-4a05-88d9-24fb2bf45552": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:14 Attempting to send response c2ce8b73-8faf-4a05-88d9-24fb2bf45552 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:15 "fdc3bac5-2b83-4b57-a28d-d8b455dae71e": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:15 Attempting to send response fdc3bac5-2b83-4b57-a28d-d8b455dae71e on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:16 "260026a9-f578-4447-a1d2-d8e49cf181d8": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:16 Attempting to send response 260026a9-f578-4447-a1d2-d8e49cf181d8 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:17 "bf3d74a1-94ae-4041-892f-56f1ed9c9cff": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:17 Attempting to send response bf3d74a1-94ae-4041-892f-56f1ed9c9cff on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:18 "6d017278-3b7a-40fb-9c63-7c34320e7df1": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200

    Logs, die durch einen Fehler des Connect-Agents aufgrund eines Fehlers der IAM-Berechtigung verursacht wurden, was zum Absturz des Agents führte:

    F0719 12:34:33.128565 2326128 tether.go:29] failed to register stream with Apigee Connect, got
    'PermissionDenied': rpc error: code = PermissionDenied desc = Permission denied on resource '//
    apigeeconnect.googleapis.com/projects/apigee-connect-hybrid-prod/endpoints/APIGEE_MART' (or it
    may not exist).
    F0719 12:34:33.128565 2326128 tether.go:29] failed to register stream with Apigee Connect, got
    'PermissionDenied': rpc error: code = PermissionDenied desc = Permission denied on resource pro
    ject apigee-connect-hybrid-prod.

Apigee Connect entfernen

Wenn Sie die Apigee Connect-Bereitstellung löschen, kann der Pod bis zu sieben Minuten im Status "Wird beendet" bleiben. Diese Zeitspanne wird erwartet. Apigee Connect-Agents warten, bis die vorhandenen Verbindungen ablaufen, anstatt sie plötzlich zu stoppen. Durch die Verzögerung wird gewährleistet, dass Inflight-Anfragen nicht verloren gehen.