Crea 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 puerta de enlace de Kubernetes creando un recurso personalizado APIMExtensionPolicy. El operador de Apigee para Kubernetes supervisa los recursos APIMExtensionPolicy y configura la puerta de enlace según corresponda.

Apigee

Sigue estos pasos si usas Apigee.

Antes de comenzar

Antes de comenzar con esta tarea, completa los siguientes pasos:

Crea el APIMExtensionPolicy

En este paso, crea el archivo APIMExtensionPolicy y aplícalo 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.

Para crear el APIMExtensionPolicy, haz lo siguiente:

  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. Reemplaza ENV_NAME por el nombre del entorno de Apigee que creaste en el paso de instalación Crea un entorno de Apigee.

    Nota: Si instalas el operador de Apigee para Kubernetes con la marca generateEnv=TRUE, no se requiere el campo apigeeEnv.

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

  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 redes en segundo plano.

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

Prueba la política

Usa el siguiente comando para enviar una solicitud a la puerta de enlace:

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

    Reemplaza GATEWAY_NAME por el nombre de la puerta de enlace, por ejemplo, global-ext-lb1.

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

    Reemplaza HOST_NAME por el nombre de host definido en HTTPRoute de la puerta de enlace, por ejemplo, example.httpbin.com.

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

¿Qué sigue?

Apigee Hybrid

Sigue estos pasos si usas Apigee Hybrid.

Antes de comenzar

En este procedimiento, se supone que instalaste el operador de Apigee para Kubernetes siguiendo los pasos que se indican en Instala el operador de Apigee para Kubernetes para Apigee Hybrid.

Crea un secreto de certificado TLS

APIMExtensionPolicy requiere el certificado público codificado en base64 asociado al nombre de host del grupo de entornos. Creaste este certificado en Instala el entorno de Apigee Hybrid con Helm. Para proporcionar este certificado al operador, crea un Secret de Kubernetes en el espacio de nombres apim.

  1. Obtén la cadena del certificado codificada en base64 del archivo que creaste 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. Reemplaza 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
        

Define y aplica 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 administrado por la puerta de enlace y su HTTPRoutes asociado, y aplica políticas de Apigee antes de reenviar las solicitudes al destino de 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. Reemplaza las siguientes variables:
    • ENV_NAME: Es el nombre del entorno de Apigee Hybrid que creaste con las extensiones de servicio habilitadas, por ejemplo, my-hybrid-env.
    • HOST_NAME: Es el nombre de dominio que se usa para el grupo de entornos, por ejemplo, my-proxies.example.com.
    • INGRESS_IP_ADDRESS: Es la dirección IP de entrada para la entrada del entorno de ejecución de Apigee Hybrid. Consulta Cómo exponer la entrada de Apigee para obtener detalles sobre cómo recuperar 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 comienza a configurar los recursos de redes de la puerta de enlace. Verifica el estado de APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. Espera hasta que el STATE muestre RUNNING. El resultado debería ser similar al siguiente:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Prueba la política

En el APIMExtensionPolicy creado en el paso anterior, defaultSecurityEnabled se estableció en true. Esto habilita automáticamente las políticas de verificación de claves de API y tokens de OAuth2 para el tráfico que coincide con esta puerta de enlace. Para probar esto, envía una solicitud no autenticada al servicio de muestra httpbin que configuraste cuando verificaste la configuración de la puerta de enlace de Istio en Verifica la configuración de la puerta de enlace de Istio.

  1. Obtén la dirección IP de la puerta de enlace:
    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 extremo /get configurado en tu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Dado que defaultSecurityEnabled: true requiere autenticación (como una clave de API válida), Apigee debería rechazar la solicitud con un error de autenticación. La respuesta podrí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 la puerta de enlace de Istio está aplicando las políticas de Apigee.

¿Qué sigue?

Aprende a crear productos de API, desarrolladores y apps para obtener claves de API para solicitudes autenticadas: