Utiliser Apigee Adapter for Envoy avec Apigee Edge

Vous consultez la documentation d'Apigee Edge.
Accéder à la documentation sur Apigee X
en savoir plus

Cet exemple montre comment utiliser Apigee Adapter for Envoy avec Apigee Edge.

Prérequis

Avant de commencer :

Présentation

Cet exemple explique comment utiliser Apigee Adapter for Envoy avec Apigee Edge for Public Cloud. Les appels de proxy d'API passent par Envoy s'exécutant en tant qu'application native, Edge fournissant des services de gestion d'API via le service à distance Apigee pour Envoy.

La figure suivante illustre l'architecture de base de l'intégration d'Apigee Edge:

Vue d'ensemble de l'adaptateur Envoy exécuté en mode natif pour communiquer avec Apigee Edge Cloud, y compris le plan de gestion, le plan d'exécution et les services GCP

Un proxy Envoy et un service distant s'exécutent localement. Envoy gère le trafic de l'API vers et depuis le service cible, et communique avec le service distant. Le service distant communique également avec Apigee Edge Cloud pour récupérer des informations sur le proxy et le produit d'API.

Provisionner Apigee Edge

Au cours de cette étape, vous allez utiliser la CLI Remote Service pour provisionner des éléments d'Apigee Adapter for Envoy vers Apigee Edge. La commande de provisionnement déploie un proxy d'API sur Apigee Edge, configure également un certificat sur Apigee et génère des identifiants que le service distant utilisera pour se connecter de manière sécurisée à partir de votre système à Apigee.

  1. Accédez au répertoire $CLI_HOME :
    cd $CLI_HOME
  2. Créez les variables d'environnement suivantes. Ces variables seront utilisées en tant que paramètres du script de provisionnement :
    export ORG=organization_name
    export ENV=environment_name
    export USER=your_apigee_username
    export PASSWORD=your_apigee_password

    Où :

    Variable Description
    organization_name Nom de votre organisation Apigee
    environment_name Nom d'un environnement dans votre organisation
    your_apigee_username Nom d'utilisateur de votre compte Apigee. Il s'agit généralement d'une adresse e-mail.
    your_apigee_password Votre mot de passe Apigee.
  3. Exécutez la commande suivante pour provisionner le proxy de service distant sur Apigee Edge :
    ./apigee-remote-service-cli provision --legacy --mfa $MFA --username $USER --password $PASSWORD \
        --organization $ORG --environment $ENV > config.yaml
  4. Vérifiez le contenu du fichier config.yaml. Voici un exemple :
    # Configuration for apigee-remote-service-envoy (platform: SaaS)
    # generated by apigee-remote-service-cli provision on 2020-08-26 09:43:41
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          internal_api: https://istioservices.apigee.net/edgemicro
          remote_service_api: https://my-username-test.apigee.net/remote-service
          org_name: my-org
          env_name: my-env
          key: f7e09c32f827cab87b8ce43842ed8467ffd2c58e6f795241e38fe7b1aec7664
          secret: 1cb5cca00dfb433cb80b32837451fce4bf694633cddbb73d704517e12b35e75

    Les valeurs de clé et de secret sont utilisées pour valider les requêtes du proxy de service distant vers Apigee Edge.

Exécuter le service Apigee Remote Service for Envoy

Vous pouvez exécuter Remote Service en tant que binaire natif ou sur Docker.

Exécuter le service de manière native

Exécutez le binaire du service avec le fichier de configuration généré par la commande de provisionnement :

$REMOTE_SERVICE_HOME/apigee-remote-service-envoy -c config_file_path/config.yaml

Exécuter le service sur Docker

Les images Docker sont publiées avec des tags de version. Pour cette installation, utilisez la dernière version. Il existe trois variantes d'image :

Variante Image
Distroless Google gcr.io/distroless/base
Ubuntu google/apigee-envoy-adapter:v1.1.0-ubuntu
Ubuntu avec Boring Crypto google/apigee-envoy-adapter:v1.1.0-boring

Par exemple, pour exécuter l'image test avec votre fichier config.yaml local disponible sous le nom /config.yaml via une installation de volume, utilisez la commande suivante :

docker run -v ./config.yaml:/config.yaml google/apigee-envoy-adapter:v1.1.0

Créer des exemples de fichiers de configuration

Utilisez la commande apigee-remote-service-cli samples create pour générer des exemples de fichiers de configuration.

Pour cet exemple, vous avez besoin des fichiers générés :

  • envoy-config.yaml : configuration de déploiement pour un service HTTP.

Pour générer les exemples, procédez comme suit :

  1. Accédez au répertoire $CLI_HOME :
  2. Exécutez cette commande pour générer les fichiers :

    ./apigee-remote-service-cli samples create --template native -c ./config.yaml

    Les fichiers suivants renvoient le répertoire ./samples :

    ls samples
    envoy-config.yaml
    

Pour en savoir plus, consultez la section Commande d'exemples.

Installer et exécuter le proxy Envoy

Pour installer et exécuter le proxy Envoy, procédez comme suit :

  1. Téléchargez un binaire Envoy, créez-le ou utilisez Docker.
  2. Exécutez Envoy à l'aide d'un exemple de fichier de configuration que vous avez généré précédemment pour le service httpbin.org :
    envoy -c $CLI_HOME/samples/envoy-config.yaml

Tester l'installation

  1. Appelez le service httpbin :
    curl -i http://localhost:8080/httpbin/headers -H "HOST:httpbin.org"
    

    Le service est désormais géré par Apigee, et puisque vous n'avez pas fourni de clé API, cet appel renvoie l'erreur suivante.

    curl -i http://localhost:8080/httpbin/headers -H "HOST:httpbin.org"
    HTTP/1.1 403 Forbidden
    date: Tue, 12 May 2020 17:51:36 GMT
    server: envoy
    content-length: 0
    x-envoy-upstream-service-time: 11
  2. Configurez un produit d'API et obtenez une clé API comme expliqué dans la section Comment obtenir une clé API.
  3. Effectuez un appel d'API à l'aide de la clé :
    export APIKEY=YOUR_API_KEY
    curl -i http://localhost:8080/httpbin/headers \
    -H "HOST:httpbin.org" -H "x-api-key: $APIKEY"

    L'appel doit réussir avec un code d'état 200 et renvoyer une liste d'en-têtes dans la réponse. Exemple :

    curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS"
    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 12 May 2020 17:55:34 GMT
    content-type: application/json
    content-length: 828
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 301
    
    {
      "headers": {
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.default.svc.cluster.local",
        "User-Agent": "curl/7.70.0-DEV",
        "X-Api-Key": "kyOTalNNLMPfOSy6rneclmVSL6pA2zS",
        "X-Apigee-Accesstoken": "",
        "X-Apigee-Api": "httpbin.default.svc.cluster.local",
        "X-Apigee-Apiproducts": "httpbin",
        "X-Apigee-Application": "httpbin",
        "X-Apigee-Authorized": "true",
        "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rVeclmVSL6pA2zS",
        "X-Apigee-Developeremail": "user@example.com",
        "X-Apigee-Environment": "test",
        "X-Apigee-Organization": "my-org",
        "X-Apigee-Scope": "",
        "X-B3-Parentspanid": "1476f9a2329bbdfa",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "1ad5c19bfb4bc96f",
        "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa"
      }
    }

Étapes suivantes

Le trafic d'API vers le service httpbin est désormais géré par Apigee. Voici quelques fonctionnalités que vous pouvez explorer et essayer:

  • Si vous avez configuré votre produit d'API comme expliqué dans la section Comment obtenir une clé API, la limite de quota a été définie sur 5 requêtes par minute. Essayez d'appeler le service httpbin plusieurs fois pour déclencher le quota. Lorsque le quota est épuisé, une erreur HTTP 403 est renvoyée.
  • Accédez à Apigee Analytics dans l'interface utilisateur Edge. Accédez à Analyser> Métriques API > Performances des proxys d'API.
  • Générez et utilisez des jetons JWT pour authentifier les appels d'API.
  • Utilisez l'interface de ligne de commande pour gérer, créer des jetons et contrôler les liaisons. Pour plus d'informations sur la CLI, consultez la documentation de référence.