Crear un APIMExtensionPolicy

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En esta página se describe cómo aplicar políticas de Apigee al tráfico que pasa por una pasarela de Kubernetes creando un recurso personalizado APIMExtensionPolicy. El operador de Apigee para Kubernetes monitoriza los recursos APIMExtensionPolicy y configura la pasarela en consecuencia.

Apigee

Sigue estos pasos si usas Apigee.

Antes de empezar

Antes de empezar esta tarea, sigue estos pasos:

Crea el APIMExtensionPolicy.

En este paso, crea el APIMExtensionPolicy y aplícalo a la GKE Gateway que se ejecuta en tu clúster. Esta política rige todo el tráfico que pasa por la pasarela y su HTTPRoutes asociado, y funciona de forma similar a un flowhook a nivel de entorno en Apigee.

Para crear el APIMExtensionPolicy, sigue estos pasos:

  1. Crea un archivo llamado global-ext-lb1-apim-policy.yaml con el siguiente contenido:
    # 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. Sustituye ENV_NAME por el nombre del entorno de Apigee creado en el paso de instalación Crear un entorno de Apigee.

    Nota: Si instala Apigee Operator para Kubernetes con la marca generateEnv=TRUE, no es necesario rellenar el campo apigeeEnv.

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

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

    Una vez que se aplica la política, el operador de Apigee para Kubernetes crea recursos de red en segundo plano.

  4. Comprueba el estado de APIMExtensionPolicy 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
        

Probar la política

Usa el siguiente comando para enviar una solicitud a la pasarela:

  1. Obtén la dirección IP de la pasarela:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    Sustituye GATEWAY_NAME por el nombre de la pasarela (por ejemplo, global-ext-lb1).

  2. Envía una solicitud a un endpoint configurado en tu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    Sustituye HOST_NAME por el nombre de host definido en el HTTPRoute de la pasarela. Por ejemplo, example.httpbin.com.

  3. La solicitud debería fallar porque defaultSecurityEnabled: true se ha definido en el recurso APIMExtensionPolicy, lo que habilita la verificación de la clave de API y del token de acceso. 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 también lo están.

Siguientes pasos

Apigee Hybrid

Sigue estos pasos si usas Apigee Hybrid.

Antes de empezar

En este procedimiento se da por hecho que has instalado el operador de Apigee para Kubernetes siguiendo los pasos que se indican en el artículo Instalar el operador de Apigee para Kubernetes en Apigee Hybrid.

Crear un secreto de certificado TLS

El APIMExtensionPolicy requiere el certificado público codificado en Base64 asociado al nombre de host del grupo de entornos. Has creado este certificado en Instalar el entorno híbrido de Apigee con Helm. Proporciona este certificado al operador creando un secreto de Kubernetes en el espacio de nombres apim.

  1. Obtén la cadena de certificado codificada en Base64 del archivo que has creado durante la instalación:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. Crea un archivo llamado secret-cert.yaml con el siguiente contenido:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. Sustituye BASE64_ENCODED_CERT_STRING por el resultado del comando cat del paso 1.
  4. Aplica el secreto a tu clúster:
    kubectl apply -f secret-cert.yaml
        

Definir y aplicar el APIMExtensionPolicy

Define un recurso APIMExtensionPolicy y aplícalo a la puerta de enlace de Istio que se ejecuta en tu clúster. Esta extensión de política intercepta el tráfico gestionado por la pasarela y su HTTPRoutes asociado, y aplica las políticas de Apigee antes de reenviar las solicitudes al destino backend.

  1. Crea un archivo llamado istio-gateway-apim-policy.yaml con el siguiente contenido:
    # 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. Sustituye las siguientes variables:
    • ENV_NAME: el nombre del entorno de Apigee hybrid que has creado con las extensiones de servicio habilitadas. Por ejemplo, my-hybrid-env.
    • HOST_NAME: nombre de dominio usado en el grupo de entornos. Por ejemplo, my-proxies.example.com.
    • INGRESS_IP_ADDRESS: la dirección IP de entrada de Apigee Hybrid runtime ingress. Consulta el artículo Exponer el acceso de Apigee para obtener información sobre cómo obtener esta IP.
  3. Aplica la política a tu clúster:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. Una vez que se aplica el recurso, el operador de Apigee para Kubernetes empieza a configurar los recursos de red de la pasarela. Comprueba el estado de la APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. Espera hasta que STATE muestre RUNNING. La salida debería ser similar a la siguiente:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Probar la política

En el APIMExtensionPolicy creado en el paso anterior, se ha definido defaultSecurityEnabled como true. De esta forma, se habilitan automáticamente las políticas de verificación de claves de API y tokens de OAuth2 para el tráfico que coincida con esta pasarela. Para probarlo, envía una solicitud no autenticada al servicio de ejemplo httpbin que configuraste al verificar la configuración de Istio Gateway en Verificar la configuración de Istio Gateway.

  1. Obtén la dirección IP de la pasarela:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. Envía una solicitud al endpoint /get configurado en tu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Como defaultSecurityEnabled: true requiere autenticación (por ejemplo, una clave de API válida), Apigee debe rechazar la solicitud con un error de autenticación. La respuesta debería ser similar a la siguiente:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Este resultado confirma que APIMExtensionPolicy está activo y que Istio Gateway aplica las políticas de Apigee.

Siguientes pasos

Consulta cómo crear productos de API, desarrolladores y aplicaciones para obtener claves de API para solicitudes autenticadas: