Créer une APIMExtensionPolicy

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d' Apigee Edge.

Cette page explique comment appliquer des règles Apigee au trafic transitant par une passerelle Kubernetes en créant une ressource personnalisée APIMExtensionPolicy. L'opérateur Apigee pour Kubernetes surveille les ressources APIMExtensionPolicy et configure la passerelle en conséquence.

Apigee

Suivez ces étapes si vous utilisez Apigee.

Avant de commencer

Avant de commencer cette tâche, effectuez les étapes suivantes :

Créer le APIMExtensionPolicy

Dans cette étape, créez le fichier APIMExtensionPolicy et appliquez-le à 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.

Pour créer le APIMExtensionPolicy :

  1. Créez un fichier nommé global-ext-lb1-apim-policy.yaml avec le contenu suivant :
    # 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
        
  2. Remplacez ENV_NAME par le nom de l'environnement Apigee créé à l'étape d'installation Créer un environnement Apigee.

    Remarque : Si vous installez l'opérateur Apigee pour Kubernetes à l'aide de l'indicateur generateEnv=TRUE, le champ apigeeEnv n'est pas obligatoire.

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

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

    Une fois la règle appliquée, l'opérateur Apigee pour Kubernetes crée des ressources réseau en arrière-plan.

  4. Vérifiez l'état de APIMExtensionPolicy à 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
        

Tester la stratégie

Utilisez la commande suivante pour envoyer une requête à la passerelle :

  1. Obtenez l'adresse IP de la passerelle :
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    Remplacez GATEWAY_NAME par le nom de la passerelle, par exemple global-ext-lb1.

  2. Envoyez une requête à un point de terminaison configuré dans votre HTTPRoute :
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    Remplacez HOST_NAME par le nom d'hôte défini dans la ressource HTTPRoute de la passerelle, par exemple example.httpbin.com.

  3. La requête doit échouer, car defaultSecurityEnabled: true a été défini dans la ressource APIMExtensionPolicy, ce qui permet la vérification des clés API et des jetons d'accès. 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.

Étapes suivantes

Apigee hybrid

Suivez ces étapes si vous utilisez Apigee hybrid.

Avant de commencer

Cette procédure suppose que vous avez installé l'opérateur Apigee pour Kubernetes en suivant les étapes décrites dans Installer l'opérateur Apigee pour Kubernetes pour Apigee hybrid.

Créer un secret de certificat TLS

APIMExtensionPolicy nécessite le certificat public encodé en base64 associé au nom d'hôte du groupe d'environnements. Vous avez créé ce certificat dans Installer l'environnement Apigee hybrid à l'aide de Helm. Fournissez ce certificat à l'opérateur en créant un secret Kubernetes dans l'espace de noms apim.

  1. Obtenez la chaîne de certificat encodée en base64 à partir du fichier que vous avez créé lors de l'installation :
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. Créez un fichier nommé secret-cert.yaml avec le contenu suivant :
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. Remplacez BASE64_ENCODED_CERT_STRING par le résultat de la commande cat à l'étape 1.
  4. Appliquez le secret à votre cluster :
    kubectl apply -f secret-cert.yaml
        

Définir et appliquer le APIMExtensionPolicy

Définissez une ressource APIMExtensionPolicy et appliquez-la à la passerelle Istio exécutée dans votre cluster. Cette extension de règle intercepte le trafic géré par la passerelle et son HTTPRoutes associé, et applique les règles Apigee avant de transférer les requêtes à la cible de backend.

  1. Créez un fichier nommé istio-gateway-apim-policy.yaml avec le contenu suivant :
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. Remplacez les variables suivantes :
    • ENV_NAME : nom de l'environnement Apigee hybrid que vous avez créé avec les extensions de service activées (par exemple, my-hybrid-env).
    • HOST_NAME : nom de domaine utilisé pour le groupe "Environnement", par exemple my-proxies.example.com.
    • INGRESS_IP_ADDRESS : adresse IP d'entrée pour l'entrée du runtime Apigee Hybrid. Pour savoir comment récupérer cette adresse IP, consultez Exposer l'entrée Apigee.
  3. Appliquez la règle à votre cluster :
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. Une fois la ressource appliquée, l'opérateur Apigee pour Kubernetes commence à configurer les ressources réseau de la passerelle. Vérifiez l'état du APIMExtensionPolicy.
    kubectl -n apim get APIMExtensionPolicy
        
  5. Attendez que STATE indique RUNNING. Le résultat doit ressembler à ce qui suit :
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Tester la stratégie

Dans le APIMExtensionPolicy créé à l'étape précédente, defaultSecurityEnabled a été défini sur true. Cela active automatiquement les règles de vérification des clés API et des jetons OAuth2 pour le trafic correspondant à cette passerelle. Pour tester cela, envoyez une requête non authentifiée au service httpbin exemple que vous avez configuré lors de la vérification de la configuration d'Istio Gateway dans Vérifier la configuration d'Istio Gateway.

  1. Obtenez l'adresse IP de la passerelle :
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. Envoyez une requête au point de terminaison /get configuré dans votre HTTPRoute :
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Étant donné que defaultSecurityEnabled: true nécessite une authentification (par exemple, une clé API valide), Apigee doit rejeter la requête avec une erreur d'authentification. La sortie devrait ressembler à ce qui suit :
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Ce résultat confirme que APIMExtensionPolicy est actif et que les règles Apigee sont appliquées par la passerelle Istio.

Étapes suivantes

Découvrez comment créer des produits d'API, des développeurs et des applications pour obtenir des clés API pour les requêtes authentifiées :