Utiliser des règles de gestion des API avec l'opérateur APIM Apigee pour Kubernetes

Cette page s'applique à Apigee, mais pas à Apigee hybrid.

Consultez la documentation d' Apigee Edge.

Cette page explique comment modifier la passerelle Google Kubernetes Engine (GKE) exécutée dans votre cluster pour appliquer des règles de gestion des API Apigee à l'aide de l'opérateur APIM Apigee pour Kubernetes.

Avant de commencer

Avant de commencer cette tâche, assurez-vous d'avoir effectué les étapes suivantes :

Rôles requis

Si vous avez attribué les rôles requis à votre compte de service, comme décrit dans Installer l'opérateur Apigee APIM pour Kubernetes, aucun rôle ni autorisation IAM supplémentaires ne sont nécessaires pour effectuer ces tâches.

Vous pouvez choisir d'autoriser des actions sur les ressources de votre cluster Google Kubernetes Engine à l'aide du mécanisme intégré de contrôle des accès basé sur les rôles (RBAC) dans Kubernetes. Pour en savoir plus, consultez Autoriser des actions dans les clusters à l'aide du contrôle des accès basé sur les rôles.

Présentation

Les sections suivantes décrivent les étapes nécessaires pour modifier votre passerelle GKE afin d'utiliser les règles Apigee à l'aide de l'opérateur APIM. Dans ce tutoriel, vous allez :

  1. Définissez la règle d'extension APIM.
  2. Définissez le produit d'API.
  3. Définissez l'ensemble des opérations d'API.
  4. Testez l'extension de service Apigee.
  5. Affichez Apigee API Analytics dans la console Google Cloud .

Définir la règle d'extension APIM

Dans cette étape, vous allez définir la règle d'extension APIM et l'appliquer à la passerelle GKE exécutée dans votre cluster. Cette règle régit tout le trafic transitant par la passerelle et son HTTPRoutes associé, fonctionnant de la même manière qu'un flowhook au niveau de l'environnement dans Apigee aujourd'hui.

Définissez la règle d'extension APIM :

  1. Créez un fichier nommé global-ext-lb1-apim-policy.yaml dans l'espace de noms apim.
  2. Copiez le contenu suivant dans le nouveau fichier :
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeenv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default

    ENV_NAME correspond au nom de l'environnement Apigee créé à l'étape d'installation Créer un environnement Apigee.

    Vous pouvez afficher tous les environnements disponibles sur la page Environnements Apigee de la console Google Cloud  :

    Accéder à la page Environnements

  3. Appliquez la règle :
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

    Une fois le yaml appliqué, l'opérateur APIM crée des ressources réseau en arrière-plan.

  4. Vérifiez l'état de la règle d'extension d'API à l'aide de la commande suivante :
    kubectl -n apim get APIMExtensionPolicy

    Le résultat doit ressembler à ce qui suit, avec un State de RUNNING :

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. Utilisez la commande suivante pour envoyer une requête à la passerelle :
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"

    Où :

    • GATEWAY_IP_ADDRESS est l'adresse IP de la passerelle. Vous pouvez récupérer l'adresse IP de la passerelle à l'aide de la commande suivante, où GATEWAY_NAME est le nom de la passerelle :
      kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
    • HOST_NAME correspond au nom d'hôte défini dans le HTTPRoute de la passerelle.
  6. La requête devrait échouer, car la sécurité par défaut est activée en définissant defaultSecurityEnabled: true dans la ressource de règle d'extension d'API. Un résultat semblable à celui-ci doit s'afficher :
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}

    Cela indique que la règle d'extension Apigee est active et que l'application des clés API et la vérification des jetons d'accès sont actives.

Définir le produit d'API

Définissez le produit d'API :

  1. Créez un fichier nommé api-product.yaml dans l'espace de noms apim.
  2. Copiez le contenu suivant dans le nouveau fichier :
    # api-product.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIProduct
      metadata:
        name: api-product
        namespace: apim
      spec:
        approvalType: auto
        description: Http bin GET calls
        displayName: api-product
        enforcementRefs:
          - name: global-ext-lb1-apim-policy
            kind: APIMExtensionPolicy
            group: apim.googleapis.com
            namespace: apim
        attributes:
          - name: access
            value: private
  3. Appliquez le fichier à la passerelle à l'aide de la commande suivante :
    kubectl -n apim apply -f api-product.yaml

Définir l'ensemble d'opérations de l'API

Définissez l'ensemble d'opérations d'API pour le produit d'API créé à l'étape précédente :

  1. Créez un fichier nommé apim-policies.yaml dans l'espace de noms apim.
  2. Copiez le contenu suivant dans le nouveau fichier. Ce fichier définit une règle de quotas et les opérations REST disponibles pour le produit d'API défini à l'étape précédente :
    # apim-policies.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIOperationSet
      metadata:
        name: item-set
        namespace: apim
      spec:
        apiProductRefs:
          - name: api-product
            kind: APIProduct
            group: apim.googleapis.com
            namespace: apim
        quota:
          limit: 10
          interval: 1
          timeUnit: minute
        restOperations:
          - name: GetItems
            path: /get
            methods:
              - GET
  3. Appliquez le fichier à la passerelle :
    kubectl -n apim apply -f apim-policies.yaml

Tester l'extension de service Apigee

Au cours de cette étape, vous allez utiliser l'interface utilisateur Apigee dans la console Google Cloud pour tester l'extension de service Apigee et la règle d'extension Apigee appliquée à votre passerelle.

Tester la configuration

Configurez les ressources d'API dont vous avez besoin pour les tests :

  1. Accédez à la page Gestion des API Apigee dans la console Google Cloud  :

    Gestion des API Apigee

  2. Sélectionnez l'organisation Apigee dans laquelle vous avez installé l'opérateur APIM.
  3. Créez un développeur :
    1. Sélectionnez Distribution > Développeurs.
    2. Sur la page Développeurs, cliquez sur + Créer.
    3. Sur la page Ajouter un développeur, renseignez les champs obligatoires avec les valeurs de votre choix.
    4. Cliquez sur Ajouter.
  4. Créer une application :
    1. Sélectionnez Distribution> Applications.
    2. Sur la page Applications, cliquez sur + Créer.
    3. Sur la page Create App (Créer une application), renseignez les champs obligatoires de la section App Details (Détails de l'application) en utilisant les valeurs suivantes :
      • Nom de l'application : demo-app
      • Développeur : sélectionnez le développeur que vous avez créé à l'étape précédente ou un autre développeur de la liste.
    4. Dans la section App Credentials (Identifiants de l'application), cliquez sur + Add Credential (+ Ajouter un identifiant).
    5. Dans la section Identifiant, renseignez les champs obligatoires de la section Détails de l'identifiant avec les valeurs suivantes :
      • Nom de l'identifiant : demo-credential
      • Type d'identifiant : sélectionnez Clé API.
    6. Cliquez sur Créer.
    7. Dans la section Produits, cliquez sur + Ajouter des produits.
    8. Sélectionnez le api-product-1 créé à l'étape précédente.
    9. Cliquez sur Ajouter.
    10. Cliquez sur Créer.
  5. Sur la page Informations sur l'application, dans la section Identifiant, cliquez sur pour afficher la valeur de la clé.

    Copiez la valeur Key. Vous utiliserez cette clé pour effectuer des appels d'API vers votre service lors d'une étape ultérieure.

  6. Sur la page App Details (Informations sur l'application), dans la section Credential (Identifiant), cliquez sur pour afficher la valeur de App Secret (Secret de l'application).

    Copiez la valeur Code secret de l'application. Vous utiliserez cette valeur pour générer un jeton d'accès lors d'une étape ultérieure.

Tester l'application des clés API

Utilisez la commande suivante pour envoyer une requête à votre passerelle à l'aide de la clé API obtenue lors d'une étape précédente :

curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

Où :

  • GATEWAY_IP_ADDRESS est l'adresse IP de la passerelle. Vous pouvez récupérer l'adresse IP de la passerelle à l'aide de la commande suivante, où GATEWAY_NAME est le nom de la passerelle :
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME correspond au nom d'hôte défini dans le HTTPRoute de la passerelle.
  • API_KEY correspond à la valeur de la clé API obtenue dans Tester la configuration.

La requête devrait aboutir et renvoyer une réponse semblable à celle-ci :

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "apigee-apim-operator-test.apigee.net",
    "User-Agent": "curl/8.7.1",
    "X-Api-Key": "f0N6sYYYclGYYYe0oP5YYYdA20PjgrP2x8YYYh7z4YYYKiYt",
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  },
  "origin": "34.54.193.72",
  "url": "https://34.54.193.72/get"
}

Tester l'application des quotas

Pour tester l'application du quota définie dans la règle de votre extension APIM, envoyez la requête de l'étape précédente à la passerelle dix fois en l'espace d'une minute.

Vous pouvez exécuter le script suivant pour générer les requêtes :

#!/bin/sh
for i in $(seq 1 11); do
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
    sleep 1
done

Où :

  • GATEWAY_IP_ADDRESS est l'adresse IP de la passerelle. Vous pouvez récupérer l'adresse IP de la passerelle à l'aide de la commande suivante, où GATEWAY_NAME est le nom de la passerelle :
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME correspond au nom d'hôte défini dans le HTTPRoute de la passerelle.
  • API_KEY correspond à la valeur de la clé API obtenue dans Tester la configuration.

Cette action devrait déclencher un non-respect du quota et générer une erreur semblable à celle-ci :

{"fault":{"faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}

Tester l'application des opérations REST

Pour tester l'application des opérations REST, utilisez la commande suivante pour envoyer une requête à la passerelle à l'aide d'une URL qui n'est pas dans l'ensemble des opérations d'API :

curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

Où :

  • GATEWAY_IP_ADDRESS est l'adresse IP de la passerelle. Vous pouvez récupérer l'adresse IP de la passerelle à l'aide de la commande suivante, où GATEWAY_NAME est le nom de la passerelle :
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME correspond au nom d'hôte défini dans le HTTPRoute de la passerelle.
  • API_KEY correspond à la valeur de la clé API obtenue dans Tester la configuration.

La requête doit échouer et renvoyer une réponse semblable à celle-ci :

{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}

Afficher Apigee API Analytics dans la console Google Cloud

Vous pouvez afficher le trafic d'API géré par la passerelle GKE et l'APIMExtensionPolicy que vous avez installée à l'aide d'Apigee API Analytics dans la console Google Cloud  :

  1. Accédez à la page Gestion des API Apigee dans la console Google Cloud  :

    Gestion des API Apigee

  2. Sélectionnez l'organisation Apigee dans laquelle vous avez installé l'opérateur APIM.
  3. Sélectionnez Analytics > Métriques de l'API dans le menu de navigation latéral.
  4. Dans l'onglet Performances du proxy d'API, sélectionnez l'environnement que vous avez créé lors de l'étape d'installation facultative Créer un environnement Apigee ou l'environnement créé par l'opérateur APIM lors de l'installation. Le nom de l'environnement commencera par le préfixe apigee-ext-proc-enabled-env.
  5. Observez le trafic d'API enregistré.

Résoudre les problèmes

Si vous rencontrez des problèmes lors de l'utilisation de règles de gestion des API avec l'opérateur APIM, consultez la section Résoudre les problèmes liés à l'opérateur APIM pour trouver des solutions aux erreurs courantes.

Étapes suivantes