Cette section décrit l'utilisation d'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 plus récente.
Ajouter Apigee Connect à l'environnement d'exécution hybride
Apigee Connect est activé par défaut pour les nouvelles installations d'Apigee hybride version 1.3.0 et ultérieure. 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, procédez comme suit :
- Activez l 'API Apigee Connect dans la
bibliothèque d'API Google Cloud. Vous pouvez activer l'API via la
console Google Cloud ou avec
gcloud
. Pour obtenir des instructions sur l'activation des API dans la console Google Cloud, consultez la section Étape 3 : Activer les API. Pour utilisergcloud
afin d'activer l'API, procédez comme suit :- Définissez le projet actuel de gcloud dans le projet Google Cloud 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 actuel de gcloud dans le projet Google Cloud 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 de Apigee hybrid :
- Si nécessaire, obtenez 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 ne contiennent 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 Google Cloud etYOUR_MART_SERVICE_ACCOUNT_EMAIL
est l'adresse e-mail du compte de service MART.
Le rôle Apigee Connect Agent est prédéfini et se voit attribuer l'autorisation suivante :
Autorisation Description apigeeconnect.endpoints.connect
Il s'agit de l'autorisation requise de configurer l'agent Apigee Connect. Pour en savoir plus sur l'attribution d'autorisations d'accès via la console Google Cloud ou les API, consultez les pages suivantes :
- Si nécessaire, obtenez 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 la section 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 Apigee Connect Agent .
# 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
- 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 avec le rôle Administrateur de l'organisation Apigee que vous avez utilisé lors de l'installation d'Apigee hybride, comme décrit dans la section Activer l'accès au synchroniseur. 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é de compte de service disposant 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 avec le rôle Administrateur de l'organisation Apigee que vous avez utilisé lors de l'installation d'Apigee hybride, comme décrit dans la section Activer l'accès au synchroniseur. Il s'agit du compte de service
- Démarrez l'agent Apigee Connect dans le cluster.
Si vous avez modifié l'une des étapes ci-dessus, utilisez la commande suivante pour démarrer l'agent Apigee Connect :
Helm
helm upgrade ORG_NAME apigee-org/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply -f 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 signale les catégories de journal suivantes :Catégorie de journaux d'audit Opérations DATA_READ ConnectionService.ListConnections
DATA_WRITE Tether.Egress
- Testez l'installation.
mart: serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
Avec cette mise à niveau, le plan d'exécution hybride communique avec le plan de gestion via Apigee Connect.
Voir aussi Suppression d'Apigee Connect.
Tester l'installation
- Ouvrez l'interface utilisateur Apigee hybride.
- 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 via 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 se connectant 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. Effectuez ensuite plusieurs appels d'API à un proxy.
Les journaux Connect Agent générés pendant le traitement des requêtes peuvent être utiles pour voir 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 provoqués par l'échec de l'agent Connect en raison d'une erreur d'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" pendant sept minutes au maximum. Cette durée est prévue. 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.