Apigee Connect

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é.

Services principaux qui s'exécutent sur le plan d'exécution hybride montrant Apigee Connect

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 :

  1. 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 la section Étape 3 : Activer les API. Pour utiliser gcloud afin d'activer l'API, procédez comme suit :
    1. 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

      YOUR_GCP_PROJECT_ID est l'ID du projet.

    2. 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
      
      ...
    3. Si les résultats n'incluent pas apigeeconnect.googleapis.com, activez l'API :
      $ gcloud services enable apigeeconnect.googleapis.com
  2. 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 :
    1. 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
      
      ...
    2. Vérifiez si le compte de service MART dispose déjà du rôle qui lui est attribué :
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. 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

      YOUR_GCP_PROJECT_ID correspond à l'ID de votre projet GCP et YOUR_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 :

    Permission Description
    apigeeconnect.endpoints.connect Il s'agit de l'autorisation 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 :

  3. 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.
  4. 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: 3
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
  5. Activez la fonctionnalité Apigee Connect pour votre organisation. Le nom de la fonctionnalité est features.mart.connect.enabled.
    1. 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.
    2. 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)

      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.

    3. 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"
            }
          ]
        },
    4. Si les résultats n'incluent pas features..mart.connect.enabled défini sur true, 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"
          } ]
        }
      }'

  6. 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 :

     $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml --org

  7. 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.
  8. 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
    Pour obtenir de l'aide sur l'affichage des journaux d'audit dans Apigee hybride, consultez la section Informations sur les journaux d'audit.
  9. Avec cette mise à niveau, le plan d'exécution hybride communique avec le plan de gestion via Apigee Connect.

  10. Testez l'installation.

Voir aussi Suppression d'Apigee Connect.

Tester l'installation

  1. Ouvrez l'interface utilisateur Apigee hybride.
  2. 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.
  3. 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"
  4. Actualisez votre jeton d'autorisation :
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. 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
        }
      ]
    }
  6. 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
    
    ...
  7. 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.