Dans cette section, nous expliquons comment utiliser Apigee Connect pour la communication entre le plan de gestion hybride et le service MART dans le plan d'exécution.
Introduction
Apigee Connect permet au plan de gestion hybride d'Apigee de se connecter en toute sécurité au service MART dans le plan d'exécution sans avoir à exposer le point de terminaison MART sur Internet. Si vous utilisez Apigee Connect, vous n'avez pas besoin de configurer la passerelle d'entrée MART avec un alias d'hôte et un certificat DNS autorisé.
Prérequis
Apigee hybrid 1.2.0. ou version ultérieure.
Ajouter Apigee Connect à l'environnement d'exécution hybride
Apigee Connect est activé par défaut pour les nouvelles installations d'Apigee hybrid version 1.3.0 et ultérieures. Par conséquent, vous devrez probablement suivre ces étapes si vous effectuez une mise à niveau depuis une ancienne version.
Lorsque Apigee Connect est configuré et activé, l'entrée MART est ignorée : le plan de gestion se connecte uniquement à MART à l'aide d'Apigee Connect. Tout le trafic MART entre le plan d'exécution hybride passe par la connexion sécurisée Apigee Connect.
Pour activer et utiliser Apigee Connect avec Apigee hybrid :
- Activez l'API Apigee Connect dans la bibliothèque d'API Google Cloud. Vous pouvez activer l'API dans la console Google Cloud (GCP) ou avec
gcloud
. Pour obtenir des instructions sur l'activation des API dans la console Google Cloud, consultez Étape 3 : Activer les API. Pour utilisergcloud
afin d'activer l'API :- Définissez le projet en cours de gcloud dans le projet GCP pour lequel Apigee a été activé et pour lequel votre organisation Apigee a été provisionnée.
$ gcloud config set project YOUR_GCP_PROJECT_ID
Où
YOUR_GCP_PROJECT_ID
est l'ID du projet. - Vérifiez si l'API Apigee Connect est déjà activée :
gcloud services list
NAME TITLE apigee.googleapis.com Apigee API apigeeconnect.googleapis.com Apigee Connect API bigquery.googleapis.com BigQuery API ...
- Si les résultats n'incluent pas
apigeeconnect.googleapis.com
, activez l'API :$ gcloud services enable apigeeconnect.googleapis.com
- Définissez le projet en cours de gcloud dans le projet GCP pour lequel Apigee a été activé et pour lequel votre organisation Apigee a été provisionnée.
- Ajoutez le rôle Agent Apigee Connect au compte de service MART que vous avez créé à l'étape Créer des comptes de service dans les instructions d'installation d'Apigee hybrid :
- Si nécessaire, récupérez l'adresse e-mail de votre compte de service MART :
gcloud iam service-accounts list
NAME EMAIL DISABLED apigee-mart apigee-mart@hybrid-example.iam.gserviceaccount.com False ...
- Vérifiez si le compte de service MART dispose déjà de ce rôle :
gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
... - members: - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com role: roles/apigeeconnect.Agent ...
- Si les résultats n'incluent pas
role: roles/apigeeconnect.Agent
, attribuez le rôle :gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \ --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent
Où
YOUR_GCP_PROJECT_ID
correspond à l'ID de votre projet GCP etYOUR_MART_SERVICE_ACCOUNT_EMAIL
est l'adresse e-mail du compte de service MART.
Le rôle Agent Apigee Connect est prédéfini et se voit attribuer l'autorisation suivante :
Autorisation Description apigeeconnect.endpoints.connect
Il s'agit de l'autorisation permettant de configurer l'agent Apigee Connect. Pour en savoir plus sur l'attribution d'autorisations d'accès via la console GCP ou les API, consultez les pages suivantes :
- Si nécessaire, récupérez l'adresse e-mail de votre compte de service MART :
- Assurez-vous que le fichier de clé du compte de service MART se trouve dans le répertoire
hybrid_files/service_accounts
, comme expliqué dans Créer des comptes de service. - Ouvrez le fichier de remplacement. Si la propriété
connectAgent:enabled
n'est pas définie sur "true", ou si elle est absente, ajoutez ou mettez à jour le stanza suivant.Le stanza Apigee Connect doit immédiatement suivre sous le stanza k8sCluster.
La configuration nécessite que vous fournissiez le chemin d'accès à la clé de compte de service téléchargée. La clé doit être associée au compte de service doté du rôle Agent Apigee Connect.
# 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
- Activez la fonctionnalité Apigee Connect pour votre organisation. Le nom de la fonctionnalité est
features.mart.connect.enabled
.- Localisez la clé du compte de service doté du rôle Administrateur de l'organisation Apigee que vous avez utilisé lors de l'installation d'Apigee hybrid, comme décrit dans Activer l'accès au synchronisateur. Il s'agit du compte de service
apigee-org-admin . Vous aurez besoin de cette clé pour générer un jeton nécessaire pour les appels d'API, comme expliqué ci-dessous. - Exécutez ces deux commandes pour obtenir un jeton :
export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file $ export TOKEN=$(gcloud auth application-default print-access-token)
Où org-admin-service-account-file est le chemin d'accès du système vers la clé du compte de service doté du rôle Administrateur de l'organisation Apigee.
- Vérifiez si Apigee Connect est déjà activé :
curl https://apigee.googleapis.com/v1/organizations/your_org_name \ -H "Authorization: Bearer $TOKEN"
Dans les résultats, recherchez :
"properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] },
- Si les résultats n'incluent pas
features..mart.connect.enabled
défini surtrue
, appelez l'API Apigee suivante afin d'activer Apigee Connect pour votre organisation :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" } ] } }'
- Localisez la clé du compte de service doté du rôle Administrateur de l'organisation Apigee que vous avez utilisé lors de l'installation d'Apigee hybrid, comme décrit dans Activer l'accès au synchronisateur. Il s'agit du compte de service
- Démarrez l'agent Apigee Connect dans le cluster.
Si vous avez apporté des modifications pendant l'une des étapes ci-dessus, utilisez la commande suivante pour démarrer l'agent Apigee Connect :
$APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml --org
- Consultez le journal de l'agent Apigee Connect. Si aucune erreur n'est signalée, la mise à niveau a réussi :
kubectl logs -n namespace apigee-connect-agent-pod-name
L'agent Apigee Connect remonte des informations sur les catégories de journaux suivantes :Catégorie de journal d'audit Opérations DATA_READ ConnectionService.ListConnections
DATA_WRITE Tether.Egress
- Testez l'installation.
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.
Avec cette mise à niveau, le plan d'exécution hybride communique avec le plan de gestion via Apigee Connect.
Voir aussi Supprimer Apigee Connect.
Tester l'installation
- Ouvrez l'interface utilisateur Apigee hybrid.
- Vérifiez que tous les développeurs et applications de développeur que vous avez créés précédemment sont présents dans l'interface utilisateur. Comme ces entités sont interrogées à partir du serveur MART, elles ne seront présentes que si la communication entre les plans de gestion et d'exécution est correctement configurée.
- Pour vous assurer que les requêtes transitent par Apigee Connect et non par l'entrée MART, consultez le journal du serveur MART. Vous devriez voir des entrées pour l'agent Apigee Connect nommé
apigee-connect-agent-1.0
:kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect
Exemple :
"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"
- Actualisez votre jeton d'autorisation :
export TOKEN=$(gcloud auth application-default print-access-token)
- Appelez l'API Apigee pour afficher les flux disponibles qui se connectent au point de terminaison
apigee-mart
: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 } ] }
- Vérifiez les journaux de l'agent Apigee Connect :
kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>
Les journaux suivants indiquent que l'agent Apigee Connect a démarré et communique correctement :
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 ...
- Dans l'interface utilisateur hybride, créez un produit d'API, un développeur et une application de développeur. Envoyez ensuite plusieurs appels d'API à un proxy.
Les journaux d'agent Connect générés pendant le traitement des requêtes peuvent être utiles pour visualiser l'état ou les erreurs :
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
Journaux générés du fait d'un échec de l'agent Connect imputable à une erreur de type "Autorisation IAM refusée" entraînant le plantage de l'agent :
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.
Supprimer Apigee Connect
Si vous supprimez le déploiement d'Apigee Connect, l'état du pod peut rester à l'état "Arrêt en cours" pendant sept minutes au maximum. Ce délai est prévu. Les agents Apigee Connect attendent que les connexions existantes expirent, au lieu de les arrêter soudainement. Le délai garantit que les requêtes en cours ne sont pas perdues.