Usa políticas de administración de API con el operador de APIM 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 puerta de enlace de Google Kubernetes Engine (GKE) que se ejecuta en tu clúster para aplicar políticas de administración de APIs de Apigee con el operador de APIM de Apigee para Kubernetes (versión preliminar).

Antes de comenzar

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

Roles obligatorios

Si asignaste los roles necesarios a tu cuenta de servicio como se describe en Instala el operador de APIM de Apigee para Kubernetes, no se requieren roles ni permisos de IAM adicionales para completar estas tareas.

Puedes autorizar acciones en los 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 Autoriza acciones en clústeres mediante el control de acceso basado en roles.

Descripción general

En las siguientes secciones, se describen los pasos necesarios para modificar tu puerta de enlace de GKE para usar las políticas de Apigee con el operador de APIM. En esta explicación, harás lo siguiente:

  1. Define la política de extensiones 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. Consulta las Estadísticas de la API de Apigee en la consola de Google Cloud.

Define la política de extensión de APIM

En este paso, definirás la política de extensión de APIM y la aplicarás a la puerta de enlace de GKE que se ejecuta en tu clúster. Esta política rige todo el tráfico que pasa por la puerta de enlace y su HTTPRoutes asociado, que funciona de manera similar a un hook de flujo a nivel del entorno en Apigee en la actualidad.

Define la política de extensiones de APIM:

  1. Crea un archivo nuevo 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/v1alpha1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy 
      namespace: apim
    spec:
      apigeeenv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1 
        kind: Gateway
        namespace: default

    En el ejemplo anterior, ENV_NAME es el nombre del entorno de Apigee creado en el paso de instalación Crea un entorno de Apigee.

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

    Ir a Entornos

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

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

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

    El resultado debería ser similar al 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 puerta de enlace:
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"

    Aquí:

    • GATEWAY_IP_ADDRESS es la dirección IP de la puerta de enlace. Puedes recuperar la dirección IP de la puerta de enlace con el siguiente comando, en el que GATEWAY_NAME es el nombre de la puerta de enlace:
      kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
    • HOST_NAME es el nombre de host definido en el HTTPRoute de la puerta de enlace.
  6. La solicitud debería fallar con 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 forzosa de claves de API y la verificación de tokens de acceso están activas.

Define el producto de API

Define el producto de API:

  1. Crea un archivo nuevo 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/v1alpha1
      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 puerta de enlace con el siguiente comando:
    kubectl -n apim apply -f api-product.yaml

Define el conjunto de operaciones de la API

Define el conjunto de operaciones de API para el producto de API que creaste en el paso anterior:

  1. Crea un archivo nuevo llamado apim-policies.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el archivo nuevo. En este archivo, se define una política de cuotas y las operaciones de REST disponibles para el producto de API definido en el paso anterior:
    # apim-policies.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      kind: APIOperationSet
      metadata:
        name: item-set
      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 puerta de enlace:
    kubectl -n apim apply -f apim-policies.yaml

Prueba la extensión de servicio de Apigee

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

Configuración de pruebas

Configura los recursos de API que necesitas para las pruebas:

  1. Ve a la página Administración de la API de Apigee en la consola de Google Cloud:

    Administración de API de Apigee

  2. Selecciona la organización de Apigee en la que instalaste el operador de APIM.
  3. Crea un desarrollador:
    1. Selecciona Distribución > Desarrolladores.
    2. En la página Desarrolladores, haz clic en + Crear.
    3. En la página Agregar desarrollador, completa los campos obligatorios con los valores que desees.
    4. Haz clic en Agregar.
  4. Crea una app:
    1. Selecciona Distribución> Apps.
    2. En la página Apps, haz clic en + Crear.
    3. En la página Create App, completa los campos obligatorios de la sección App Details con los siguientes valores:
      • Nombre de la app: demo-app
      • Desarrollador: Selecciona el desarrollador que creaste en el paso anterior o elige otro de la lista.
    4. En la sección Credenciales de la app, haz clic en + Agregar credencial.
    5. En la sección Credential, completa los campos obligatorios de la sección Credential Details 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, haz clic en + Agregar productos.
    8. Selecciona el api-product-1 que creaste en el paso anterior.
    9. Haz clic en Agregar.
    10. Haz clic en Crear.
  5. En la página App Details, en la sección Credential, haz clic en para mostrar el valor de la Clave.

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

  6. En la página App Details, en la sección Credential, haz clic en para mostrar el valor del App Secret.

    Copia el valor de App secret. Usarás este valor para generar un token de acceso en un paso posterior.

Prueba la aplicación de claves de API

Usa el siguiente comando para enviar una solicitud a tu puerta de enlace con la clave de API que obtuviste en un paso anterior:

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

Aquí:

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

La solicitud debería realizarse correctamente y mostrar 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": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt", 
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  }, 
  "origin": "34.54.193.72", 
  "url": "https://34.54.193.72/get"
}

Prueba la aplicación de la cuota

Para probar la aplicación forzosa de cuotas definida en tu política de extensión de APIM, envía la solicitud del paso anterior a la puerta de enlace diez veces en un 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

Aquí:

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

Esta acción debería activar un incumplimiento 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"}}}

Prueba la aplicación de las operaciones de REST

Para probar la aplicación forzosa de las operaciones REST, usa el siguiente comando para enviar una solicitud a la puerta de enlace 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"

Aquí:

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

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

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

Cómo ver las Estadísticas de la API de Apigee en la consola de Google Cloud

Puedes ver el tráfico de la API que controla la puerta de enlace de GKE y la APIMExtensionPolicy que instalaste con las Estadísticas de la API de Apigee en la consola de Google Cloud:

  1. Ve a la página Administración de la API de Apigee en la consola de Google Cloud:

    Administración de API de Apigee

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

Solucionar problemas

Si tienes problemas para usar las políticas de administración de API con APIM Operator, consulta Soluciona problemas de APIM Operator para obtener soluciones a errores comunes.

¿Qué sigue?