Usar políticas de gestión de APIs con el operador de gestión de APIs de Apigee para Kubernetes

Esta página se aplica a Apigee, pero no a Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En esta página se describe cómo modificar la pasarela de Google Kubernetes Engine (GKE) que se ejecuta en tu clúster para aplicar políticas de gestión de APIs de Apigee mediante el operador APIM de Apigee para Kubernetes.

Antes de empezar

Antes de empezar esta tarea, asegúrate de completar los siguientes pasos:

Roles obligatorios

Si has asignado los roles necesarios a tu cuenta de servicio tal como se describe en Instalar el operador de gestión de APIs de Apigee para Kubernetes, no se necesitan roles ni permisos de gestión de identidades y accesos adicionales para completar estas tareas.

Puedes autorizar acciones en recursos de tu clúster de Google Kubernetes Engine mediante el mecanismo de control de acceso basado en roles (RBAC) integrado en Kubernetes. Para obtener más información, consulta Autorizar acciones en clústeres mediante el control de acceso basado en roles.

Información general

En las siguientes secciones se describen los pasos necesarios para modificar tu GKE Gateway y usar las políticas de Apigee con el operador de APIM. En este tutorial, harás lo siguiente:

  1. Define la política de extensión de APIM.
  2. Define el producto de API.
  3. Define el conjunto de operaciones de la API.
  4. Prueba la extensión de servicio de Apigee.
  5. Consulte las analíticas de la API de Apigee en la consola Google Cloud .

Definir la política de extensión de APIM

En este paso, definirá la política de extensión de APIM y la aplicará a la GKE Gateway que se ejecuta en su clúster. Esta política rige todo el tráfico que pasa por la pasarela y su HTTPRoutes asociada, y funciona de forma similar a un flowhook a nivel de entorno en Apigee.

Define la política de extensión de APIM:

  1. Crea un archivo llamado global-ext-lb1-apim-policy.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el archivo nuevo:
    # 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

    Donde ENV_NAME es el nombre del entorno de Apigee creado en el paso de instalación Crear un entorno de Apigee.

    Puedes ver todos los entornos disponibles en la página Entornos de Apigee de la Google Cloud consola:

    Ir a Entornos

  3. Aplica la política:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

    Una vez que se aplica el yaml, el operador de APIM crea recursos de red en segundo plano.

  4. Comprueba el estado de la política de extensiones de la API con el siguiente comando:
    kubectl -n apim get APIMExtensionPolicy

    La salida debería ser similar a la siguiente, con un State de RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. Usa el siguiente comando para enviar una solicitud a la pasarela:
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"

    Donde:

    • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela. Puedes obtener la dirección IP de la pasarela con el siguiente comando, donde GATEWAY_NAME es el nombre de la pasarela:
      kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
    • HOST_NAME es el nombre de host definido en HTTPRoute de la pasarela.
  6. La solicitud debería fallar porque la seguridad predeterminada está habilitada al definir defaultSecurityEnabled: true en el recurso de política de extensión de la API. Deberías ver una respuesta similar a la siguiente:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}

    Esto indica que la política de extensión de Apigee está activa y que la aplicación de claves de API y la verificación de tokens de acceso también lo están.

Definir el producto de API

Define el producto de API:

  1. Crea un archivo llamado api-product.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el archivo nuevo:
    # 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. Aplica el archivo a la pasarela con el siguiente comando:
    kubectl -n apim apply -f api-product.yaml

Definir el conjunto de operaciones de la API

Define el conjunto de operaciones de la API del producto de API creado en el paso anterior:

  1. Crea un archivo llamado apim-policies.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el nuevo archivo. Este archivo define una política de cuotas y las operaciones REST disponibles para el producto de API definido en el paso anterior:
    # 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. Aplica el archivo a la pasarela:
    kubectl -n apim apply -f apim-policies.yaml

Probar la extensión de servicio de Apigee

En este paso, usarás la interfaz de usuario de Apigee en la consola Google Cloud para probar la extensión de servicio de Apigee y la política de extensión de Apigee aplicada a tu pasarela.

Configuración de pruebas

Configura los recursos de la API que necesites para las pruebas:

  1. Ve a la página Gestión de APIs de Apigee de la consola de Google Cloud :

    Gestión de APIs con Apigee

  2. Selecciona la organización de Apigee en la que has instalado el operador de APIM.
  3. Crear un desarrollador:
    1. Selecciona Distribución > Desarrolladores.
    2. En la página Desarrolladores, haz clic en + Crear.
    3. En la página Añadir desarrollador, rellene los campos obligatorios con los valores que quiera.
    4. Haz clic en Añadir.
  4. Crear una aplicación:
    1. Selecciona Distribución> Aplicaciones.
    2. En la página Aplicaciones, haz clic en + Crear.
    3. En la página Create App (Crear aplicación), rellena los campos obligatorios de la sección App Details (Detalles de la aplicación) con los siguientes valores:
      • Nombre de la aplicación: demo-app
      • Desarrollador: selecciona el desarrollador que has creado en el paso anterior u otro de la lista.
    4. En la sección Credenciales de la aplicación, haz clic en + Añadir credencial.
    5. En la sección Credenciales, rellena los campos obligatorios de la sección Detalles de las credenciales con los siguientes valores:
      • Nombre de la credencial: demo-credential
      • Tipo de credencial: selecciona Clave de API.
    6. Haz clic en Crear.
    7. En la sección Productos, haga clic en + Añadir productos.
    8. Selecciona el api-product-1 que has creado en el paso anterior.
    9. Haz clic en Añadir.
    10. Haz clic en Crear.
  5. En la página Detalles de la aplicación, en la sección Credencial, haz clic en para ver el valor de Clave.

    Copia el valor de Key. Usarás esta clave para hacer llamadas a la API de tu servicio en un paso posterior.

  6. En la página Detalles de la aplicación, en la sección Credencial, haz clic en para ver el valor de Secreto de aplicación.

    Copia el valor de Secreto de la aplicación. Usarás este valor para generar un token de acceso en un paso posterior.

Probar la aplicación de la clave de API

Usa el siguiente comando para enviar una solicitud a tu pasarela con la clave de API que has obtenido en un paso anterior:

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

Donde:

  • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela. Puedes obtener la dirección IP de la pasarela con el siguiente comando, donde GATEWAY_NAME es el nombre de la pasarela:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME es el nombre de host definido en HTTPRoute de la pasarela.
  • API_KEY es el valor de la clave de API que se ha obtenido en Configuración de pruebas.

La solicitud debería realizarse correctamente y devolver una respuesta similar a la siguiente:

{
  "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"
}

Probar la aplicación de las cuotas

Para probar la aplicación de la cuota definida en tu política de extensión de APIM, envía la solicitud del paso anterior a la pasarela diez veces en el plazo de un minuto.

Puedes ejecutar la siguiente secuencia de comandos para generar las solicitudes:

#!/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

Donde:

  • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela. Puedes obtener la dirección IP de la pasarela con el siguiente comando, donde GATEWAY_NAME es el nombre de la pasarela:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME es el nombre de host definido en HTTPRoute de la pasarela.
  • API_KEY es el valor de la clave de API que se ha obtenido en Configuración de pruebas.

Esta acción debería activar una infracción de cuota y generar un error similar al siguiente:

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

Probar la aplicación de operaciones REST

Para probar la aplicación de las operaciones REST, usa el siguiente comando para enviar una solicitud a la pasarela con una URL que no esté en el conjunto de operaciones de la API:

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

Donde:

  • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela. Puedes obtener la dirección IP de la pasarela con el siguiente comando, donde GATEWAY_NAME es el nombre de la pasarela:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME es el nombre de host definido en HTTPRoute de la pasarela.
  • API_KEY es el valor de la clave de API que se ha obtenido en Configuración de pruebas.

La solicitud debería fallar y devolver una respuesta similar a la siguiente:

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

Ver las analíticas de la API de Apigee en la consola Google Cloud

Puedes ver el tráfico de la API gestionado por la GKE Gateway y la APIMExtensionPolicy que has instalado con Apigee API Analytics en la Google Cloud consola:

  1. Ve a la página Gestión de APIs de Apigee de la consola: Google Cloud

    Gestión de APIs con Apigee

  2. Selecciona la organización de Apigee en la que has instalado el operador de APIM.
  3. En el menú de navegación lateral, selecciona Analytics > Métricas de la API.
  4. En la pestaña Rendimiento del proxy de API, elige el entorno que has creado en el paso de instalación opcional Crear un entorno de Apigee o el entorno creado por el operador de APIM durante la instalación. El nombre del entorno empezará por el prefijo apigee-ext-proc-enabled-env.
  5. Observa el tráfico de la API registrado.

Solucionar problemas

Si tienes problemas al usar políticas de gestión de APIs con el operador APIM, consulta el artículo Solucionar problemas del operador APIM para encontrar soluciones a errores habituales.

Siguientes pasos