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.
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:
- Aktivieren Sie die Apigee Connect API in der
Google Cloud API-Bibliothek. Sie können die API in der
Google Cloud (GCP) 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 mitgcloud
:- Legen Sie die Einstellung des aktuellen Projekts in gcloud auf dasselbe GCP-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. - 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 ...
- Aktivieren Sie die API, wenn in den Ergebnissen
apigeeconnect.googleapis.com
nicht enthalten ist:$ gcloud services enable apigeeconnect.googleapis.com
- Legen Sie die Einstellung des aktuellen Projekts in gcloud auf dasselbe GCP-Projekt, für das Apigee aktiviert und Ihre Apigee-Organisation bereitgestellt wurde.
- 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:
- 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 ...
- 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 ...
- 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 GCP-Projekts undYOUR_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 Berechtigung zum Einrichten des Apigee Connect-Agents. Weitere Informationen zum Zuweisen von Zugriffsberechtigungen über die GCP Console oder APIs finden Sie unter:
- Ermitteln Sie gegebenenfalls die E-Mail-Adresse Ihres MART-Dienstkontos:
- Achten Sie darauf, dass sich die Schlüsseldatei des MART-Dienstkontos im Verzeichnis
hybrid_files/service_accounts
befindet, wie unter Dienstkonten erstellen beschrieben. - Ö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: 3 serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
- Aktivieren Sie das Apigee Connect-Feature für Ihre Organisation. Der Feature-Name lautet
features.mart.connect.enabled
.- 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. - 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.
- 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" } ] },
- Wenn die Ergebnisse nicht
features..mart.connect.enabled
enthalten, das auftrue
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" } ] } }'
- 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
- 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:
$APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml --org
- 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
- Installation testen
mart: hostAlias: "mart.apigee-hybrid-docs.net" # ignored when Apigee Connect is enabled. serviceAccountPath: ./service-accounts/example-project-apigee-mart.json sslCertPath: ./certs/fullchain.pem # ignored when Apigee Connect is enabled. sslKeyPath: ./certs/privkey.key # ignored when Apigee Connect is enabled.
Mit diesem Upgrade kommuniziert die hybride Laufzeitebene mit Apigee Connect mit der Verwaltungsebene.
Siehe auch: Apigee Connect entfernen.
Installation testen
- Öffnen Sie die Hybrid-Benutzeroberfläche von Apigee.
- 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.
- 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"
- Aktualisieren Sie Ihr Autorisierungstoken:
export TOKEN=$(gcloud auth application-default print-access-token)
- 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 } ] }
- 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 ...
- 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.