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:
- Confirma que tu clúster de GKE tenga configurada una identidad de carga de trabajo. Consulta Crea una identidad de carga de trabajo para conocer los pasos necesarios.
- Confirma que tu clúster tenga una puerta de enlace de GKE configurada y en funcionamiento. Consulta Implementa puertas de enlace para obtener más detalles.
- Instala el operador de APIM. Consulta Instala el operador de APIM de Apigee para Kubernetes para obtener instrucciones de instalación.
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:
- Define la política de extensiones de APIM.
- Define el producto de API.
- Define el conjunto de operaciones de la API.
- Prueba la extensión de servicio de Apigee.
- 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:
- Crea un archivo nuevo llamado
global-ext-lb1-apim-policy.yaml
en el espacio de nombresapim
. - 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:
- 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. - 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
deRUNNING
:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
- 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 queGATEWAY_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 elHTTPRoute
de la puerta de enlace.
- 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:
- Crea un archivo nuevo llamado
api-product.yaml
en el espacio de nombresapim
. - 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
- 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:
- Crea un archivo nuevo llamado
apim-policies.yaml
en el espacio de nombresapim
. - 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
- 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:
Ve a la página Administración de la API de Apigee en la consola de Google Cloud:
- Selecciona la organización de Apigee en la que instalaste el operador de APIM.
- Crea un desarrollador:
- Selecciona Distribución > Desarrolladores.
- En la página Desarrolladores, haz clic en + Crear.
- En la página Agregar desarrollador, completa los campos obligatorios con los valores que desees.
- Haz clic en Agregar.
- Crea una app:
- Selecciona Distribución> Apps.
- En la página Apps, haz clic en + Crear.
- 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.
- En la sección Credenciales de la app, haz clic en + Agregar credencial.
- 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.
- Haz clic en Crear.
- En la sección Productos, haz clic en + Agregar productos.
- Selecciona el
api-product-1
que creaste en el paso anterior. - Haz clic en Agregar.
- Haz clic en Crear.
- En la página App Details, en la sección Credential, haz clic en
visibility_off 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. - En la página App Details, en la sección Credential, haz clic en visibility_off 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 queGATEWAY_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 elHTTPRoute
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 queGATEWAY_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 elHTTPRoute
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 queGATEWAY_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 elHTTPRoute
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:
- Ve a la página Administración de la API de Apigee en la consola de Google Cloud:
- Selecciona la organización de Apigee en la que instalaste el operador de APIM.
- Selecciona Analytics > Métricas de API en el menú de navegación lateral.
- 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
. - 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?
- Obtén información para agregar políticas a la puerta de enlace de GKE.
- Obtén información para desinstalar el operador de APIM de Apigee para Kubernetes.