Mettre à jour les règles de gestion des API avec l'opérateur Apigee APIM pour Kubernetes

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

Consultez la documentation d'Apigee Edge.

À mesure que vos besoins en gestion d'API évolueront, vous devrez peut-être ajouter de nouveaux services à votre cluster, ou mettre à jour les routes et les options d'entrée existantes. Dans cette page, nous expliquons comment mettre à jour votre cluster pour effectuer les tâches suivantes :

Avant de commencer

Avant de commencer cette tâche, assurez-vous de suivre les étapes décrites dans Appliquer une stratégie avec l'opérateur Apigee APIM pour Kubernetes. Sur cette page, nous supposons que vous avez configuré un cluster Google Kubernetes Engine (GKE), installé l'opérateur Apigee APIM pour Kubernetes, créé une passerelle Google Kubernetes Engine (GKE) et appliqué au moins une stratégie de gestion des API à la passerelle.

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.

Ajouter une passerelle et une ressource HTTPRoute

Dans cette section, vous allez ajouter une passerelle et une ressource HTTPRoute à votre cluster. Dans les guides de tâches précédents, les exemples de configurations utilisaient une passerelle GKE externe. Si plusieurs passerelles sont déployées dans la même région, elles doivent être du même type (toutes externes ou toutes internes). C'est pourquoi l'exemple de configuration de ce guide utilisera également une passerelle externe.

L'opérateur APIM peut être utilisé avec des passerelles GKE internes ou externes, mais vous ne pouvez pas déployer les deux types de passerelles dans la même région.

Pour ajouter une passerelle et une ressource HTTPRoute à votre cluster, procédez comme suit :

  1. Configurez une nouvelle passerelle GKE externe. Pour en savoir plus et découvrir la procédure à suivre, consultez Déployer une passerelle externe.
  2. Créez une ressource SslCertificate globale gérée par Google :
    gcloud compute ssl-certificates create CERT_NAME \
      --domains=HOST_NAME \
      --global

    Où :

    • CERT_NAME est le nom du certificat que vous souhaitez créer.
    • HOST_NAME_2 est le nom d'hôte de la nouvelle passerelle.

  3. Créez un fichier nommé gateway2.yaml dans l'espace de noms apim.
  4. Copiez ce qui suit dans le nouveau fichier :
    # gateway2.yaml
    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      name: global-ext-lb2
      spec:
      gatewayClassName: gke-l7-global-external-managed
      listeners:
      - name: https
        protocol: HTTPS
        allowedRoutes:
          kinds:
          - kind: HTTPRoute
          namespaces:
            from: All
        port: 443
        tls:
          options:
            networking.gke.io/pre-shared-certs: CERT_NAME
  5. Ajoutez une ressource HTTPRoute pour /post au même fichier, comme indiqué ci-dessous :
    # http-route2.yaml
      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http-bin-route-post
        namespace: http
      spec:
        parentRefs:
          - kind: Gateway
            name: global-ext-lb2
            namespace: default
        hostnames:
          - HOST_NAME_2
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: "/post"
          backendRefs:
          - name: httpbin
            kind: Service
            port: 80
            namespace: http
  6. Appliquez la nouvelle passerelle et la nouvelle ressource HTTPRoute :
    kubectl apply -f gateway2.yaml
  7. Vérifiez l'état de la ressource HTTPRoute à l'aide de la commande suivante :
    kubectl -n http get HttpRoute

    La sortie devrait ressembler à ce qui suit :

    NAME             HOSTNAMES                                                  AGE
    http-bin-route   ["my-hostname-2"]   12d
    
  8. Vérifiez l'état de la passerelle à l'aide de la commande suivante :
    kubectl get gateway global-ext-lb2

    La sortie devrait ressembler à ce qui suit :

    NAME             CLASS                            ADDRESS        PROGRAMMED   AGE
    global-ext-lb2   gke-l7-global-external-managed   34.54.193.92   True         11d
    

    Vérifiez que la colonne Address contient une adresse IP valide et que l'état Programmed est défini sur True.

  9. Décrivez la passerelle pour vous assurer que la route est associée :
    kubectl describe gateway global-ext-lb2
  10. La sortie devrait ressembler à ce qui suit :

    ...
    Listeners:
      Attached Routes:  1
      Conditions:
        Last Transition Time:  2024-10-03T03:10:17Z
    ...

    Vérifiez que la valeur Attached Routes est définie sur 1.

  11. Envoyez une requête à la passerelle pour vérifier que la route fonctionne :
    curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

    Où :

    • GATEWAY_IP_ADDRESS correspond à l'adresse IP de la passerelle, comme indiqué dans la colonne Address de la réponse renvoyée à l'étape 7.
    • HOST_NAME_2 correspond au nom d'hôte défini dans la ressource HTTPRoute de la passerelle.

  12. La sortie devrait ressembler à ce qui suit :
      {
        "args": {},
        "headers": {
          "Accept": "*/*",
          "Host": "apigee-apim-operator-test.apigee.net",
          "User-Agent": "curl/8.7.1",
          "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701"
        },
        "origin": "67.164.1.10,34.54.193.72",
        "url": "https://apigee-apim-operator-test.apigee.net/post"
      }
      
  13. Créez une règle d'extension APIM qui référence la ressource HTTPRoute de la nouvelle passerelle créée lors d'une étape précédente :
    1. Créez un fichier nommé apim-policy2.yaml dans l'espace de noms apim.
    2. Copiez ce qui suit dans le nouveau fichier :
      # apim-policy2.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIMExtensionPolicy
      metadata:
        name: global-ext-lb2-apim-policy-2
        namespace: apim
      spec:
        location: global
        failOpen: false
        timeout: 1000ms
        defaultSecurityEnabled: true
        targetRef: # identifies the Gateway where the extension should be installed
          name: global-ext-lb2
          kind: Gateway
          namespace: default
    3. Appliquez la nouvelle règle d'extension APIM :
      kubectl apply -f apim-policy2.yaml

      Une fois le fichier 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 APIM :
      kubectl -n apim get APIMExtensionPolicy

      La sortie devrait ressembler à ce qui suit :

      NAME                           STATE        ERRORMESSAGE
      global-ext-lb2-apim-policy-2   RUNNING
      

      Vérifiez que la valeur STATE est RUNNING.

    5. Attendez cinq minutes pour vous assurer que les modifications sont propagées à toutes les instances à équilibreur de charge, puis utilisez la commande suivante pour vérifier qu'une requête adressée à la nouvelle passerelle échoue :
      curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

      Où :

      • GATEWAY_IP_ADDRESS correspond à l'adresse IP de la passerelle obtenue à une étape précédente.
      • HOST_NAME_2 correspond au nom d'hôte défini dans la ressource HTTPRoute de la passerelle.

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

      {
        "fault": {
          "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault",
          "detail": {
            "errorcode": "steps.raisefault.RaiseFault"
          }
        }
      }

      Cela signifie que l'extension du service à Apigee est active et que la vérification des clés API et des jetons d'accès est appliquée. Pour savoir comment créer une application de développeur, obtenir une clé API et tester votre nouvelle passerelle avec cette clé, consultez Tester l'extension de service Apigee.

Mettre à jour un produit d'API

Modifiez un produit d'API existant pour référencer la nouvelle règle d'extension APIM :

  1. Créez un fichier nommé api-product-2.yaml dans l'espace de noms apim.
  2. Copiez ce qui suit dans le nouveau fichier :
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
    EnforcementRefs:
      - name: global-ext-lb1-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Appliquez le nouveau fichier de produit d'API comme suit :
    kubectl apply -f api-product-2.yaml

    L'application des modifications à l'ensemble du cluster prendra environ trois minutes.

Dans cet exemple, la section EnforcementRefs du produit d'API api-product-2 est mise à jour pour référencer à la fois global-ext-lb1-apim-policy et global-ext-lb2-apim-policy, comme indiqué dans les parties du fichier yaml mises en surbrillance.

Créer un produit d'API

Créez un produit d'API comme suit :

  1. Créez un fichier nommé api-product-2.yaml dans l'espace de noms apim.
  2. Copiez ce qui suit dans le nouveau fichier :
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
      enforcementRefs:
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Appliquez le nouveau fichier de produit d'API comme suit :
    kubectl apply -f api-product-2.yaml

    L'application des modifications à l'ensemble du cluster prendra environ trois minutes.

Dans cet exemple, la section EnforcementRefs du nouveau produit d'API api-product-2 est créée pour référencer global-ext-lb2-apim-policy, comme indiqué dans les parties du fichier yaml mises en surbrillance.

Créer un ensemble d'opérations d'API

Créez un ensemble d'opérations d'API comme suit :

  1. Créez un fichier nommé item-set-post.yaml dans l'espace de noms apim.
  2. Copiez ce qui suit dans le nouveau fichier :
    # item-set-post.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIOperationSet
    metadata:
      name: item-set-post
      namespace: apim
    spec:
      apiProductRefs:
        - name: api-product-2
          kind: APIProduct
          group: apim.googleapis.com
          namespace: apim
      quota:
        limit: 1
        interval: 1
        timeUnit: minute
      restOperations:
        - name: PostItems
          path: "/post"
          methods:
          - POST
  3. Appliquez le nouveau fichier d'ensemble d'opérations d'API comme suit :
    kubectl apply -f item-set-post.yaml

    L'application des modifications à l'ensemble du cluster prendra environ trois minutes.

Dans cet exemple, la valeur restOperations du nouvel ensemble d'opérations d'API item-set-post est créée pour faire référence au chemin d'accès /post, comme indiqué dans les parties mises en surbrillance du fichier.

Tester la nouvelle configuration de la passerelle

Pour tester la nouvelle configuration de la passerelle, envoyez la requête suivante au nouveau chemin d'accès /post :

curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

Où :

  • GATEWAY_IP_ADDRESS correspond à l'adresse IP de la passerelle, obtenue à une étape précédente.
  • HOST_NAME correspond au nom d'hôte défini dans la ressource HTTPRoute de la passerelle.

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": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt",
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  },
  "origin": "34.54.193.72",
  "url": "https://34.54.193.72/post"
}

Résoudre les problèmes

Si vous rencontrez des problèmes lors de la mise à jour et de l'extension des règles de gestion des API utilisées avec l'opérateur APIM, consultez Résoudre les problèmes liés à l'opérateur APIM pour trouver des solutions pour les erreurs courantes.

Étapes suivantes