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.

Antes de comenzar

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

Roles requeridos

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

Puedes optar por autorizar acciones en los recursos de tu clúster de Google Kubernetes Engine con 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 con 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 y usar políticas de Apigee con el operador de APIM. En esta explicación, 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. Visualiza 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, y funciona de manera similar a un flowhook a nivel del entorno en Apigee hoy en día.

Define la política de extensión 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/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

    Aquí, 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 Apigee Environments 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 redes en segundo plano.

  4. Verifica el estado de la política de extensión de la 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 porque la seguridad predeterminada está habilitada estableciendo 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 la clave de API y la verificación del token 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/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 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 la 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. Este archivo define una política de cuotas y las operaciones de descanso 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 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.

Prueba de configuración

Configura los recursos de la API que necesitas para realizar 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 cualquier otro desarrollador de la lista.
    4. En la sección Credenciales de la app, haz clic en + Agregar credencial.
    5. En la sección Credencial, completa los campos obligatorios en la sección Detalles de la credencial 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 Key.

    Copia el valor de Key. Usarás esta clave para realizar llamadas a la API de 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 de 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 la clave 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 prueba.

La solicitud debería completarse 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"
}

Prueba la aplicación de la cuota

Para probar la aplicación de la cuota definida en la política de extensión de APIM, envía la solicitud del paso anterior al Gateway diez veces en el lapso 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 prueba.

Esta acción debería activar un incumplimiento de la cuota y generar una falla similar a la 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 descanso

Para probar la aplicación de las operaciones de descanso, usa el siguiente comando para enviar una solicitud a Gateway 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 prueba.

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

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

Visualiza 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 entorno 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 cuando usas políticas de administración de APIs con APIM Operator, consulta Soluciona problemas de APIM Operator para encontrar soluciones a errores comunes.

¿Qué sigue?