Apis

Descubriendo apis

Es posible encontrar nuevas apis en kubernetes usando archivos yaml, los cuales permiten agregar nuevas You can discover apis in kubernetes using yamls files, which allow add new apis in the gateways and configure this using differents options.

Integración

Aeol Gateway permite las siguientes integraciones, las cuales se deben realizar basadas en la configuración de externos.

  • Amazon Integrations (AWS)
  • Azure Integrations (az)
  • Google Functions
  • Istio
  • Envoy
  • Kuma
  • Maesh
 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-service
    port: 6000
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
    externalRef: my-external-definition          # external definition
  setting:
    name: mysetting
    option:
      gzip:
        enable: true
        level: BestCompression

Políticas

El sistema provee de diferentes tipo de políticas tales como:

  • Seguridad
  • SLA
  • Mutual TLS (tls 1.1, 1.2 and mtls 1.2, 1.3), por favor para mayor detalle revise la configuración del geteway

Para poder configurar estas politicas es necesario agregar la referencia a la política tal como se indica a continuación:

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-service
    port: 6000
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    policyRef: my-policy    #Policy Reference
    option:
      gzip:
        enable: true
        level: BestCompression

Configuración Básica

  • Gzip
  • Allow and Block List
  • Header Injector
  • Mime Type
  • Rate Limits
  • Payload Limits

Gzip

Para agregar soporte de compresión a los servicios, se de usar la siguiente configuración

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-service
    port: 6000
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      gzip:
        enable: true
        level: BestCompression

Es importante destacar que al habilitar la compresíon el sistema comprime cuando el cuerpo del mensaje de salida supera 1.4KB, ya que un mensaje con longitud menor a este número puede elevar la cantidad de bytes que el cuerpo posee originalmente.

Diferentes niveles de compresión:

Nivel Descripción
BestCompression Mejora la compresión por encima de la velocidad de procesamiento
BestSpeed Mejora la velocidad de compresión por encima de la cantidad de bytes comprimidos
DefaultCompression Compresión por omisión
HumanCompression Desabilita Lempel-Ziv
NoCompression Compresión desabilitada

Para sistemas que se encuentran ejecutando sobre procesadores compartidos con otros clientes se recomienda la utilización de BestSpeed.

Allow and Block List

Permite habilitar la lista permitidos/bloqueados de ip, dependiendo de las necesidades del servicio.

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-service
    port: 6000
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      balist:
        allow:  #use allow|block
        - 170.180.190.200
        - 200.140.9.10

Tipo Descripción
allow solo se admiten las ip en la lista
block no se permiten las ip en la lista

Si el sistema se encuentra desplegado detras de un balanceador como Nginx, Apache httpd, Traffik, entre otros, es requerido habilitar la opción x-forward-ip.

Header Injector

Permite inyectar en el encabezado de la respuesta http, diferentes opciones.

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-service
    port: 6000
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      headerinjector:
        header:
        - key: x-developer
          value: developer

Mime Type

Cambia la respuesta del servicio, permitiendo la utilización de diferents “Mime Types”

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-service
    port: 6000
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      mime:
        name: json #json|yaml|text

tipo Descripción
json retorna Content-Type application/json
yaml retorna Content-Type text/yaml
text retorna Content-Type text

Rate Limits

Esta opción habilita los limites en la cantidad de llamadas que se hagan al servicio, en caso de superar la cantidad el sistema retorna el error 423 (Too Many Request)

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-svc
    port: 8080
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      ratelimit:
        limitype: ip
        timeunit: minute
        quantity: 1

Timeunit Descripción
minute se reestablece cada 1 minuto
second se reestablece cada 1 segundo
hour se reestablece cada 1 hora
day se reestablece cada dia (solo version enterprise)
LimitType Descripción
ip permite establecer limites por ip
time establece limites por horario (solo version enterprise)
token establece limites por token (solo version enterprise)
user establece limites por usuario (solo version enterprise)*

Para las opciones de token y usuario, se debe habilitar la politicas siguientes políticas:

  • Para token se debe habilitar la política KEY, JWT, OAUTH2, OPENID, HMAC
  • Para user se debe habilitar la política BASIC

Si no se habilitan las políticas pero se habilitan las opciones el sistema devolverá el código 429 (Too Many Request)

Payload Limits

Esta opción habilita los limites de los mensajes tanto de entrada como de salida, estos límites se establecen sobre el cuerpo del mensaje. Si el limite es excedido el sistema retorna un error 413 (Status Request Entity Too Large)

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-svc
    port: 8080
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      payloadlimit:
        bodyrequest: 1  #The limit is set in kilobytes.
        bodyresponse: 1 #The limit is set in kilobytes.

Extensiones

Wasm

WebAssembly es un estandar de código binario, que permite la ejecución de código creado en diferentes lenguajes y hoy es adoptado por los diferentes web-browser (para ver la tabla de compatibilidad pueder ir al sitio web WebAssembly.org)

 
apiVersion: aeolabs.io/v1alpha1
kind: VirtualApi
metadata:
  name: hello-world
  namespace: demoaeol
spec:
  apiname: hello-world
  apiversion: v1.0.1
  service:
    servicename:  hello-world-svc
    port: 8080
    protocol: http
  environment: dev
  proxy:
    listenmethod: GET
    targetmethod: GET
  setting:
    name: mysetting
    option:
      wasm:
      - name: headertrasnformation
        url: wasm://demo:demo@wasm.aeolabs.io/wasm/feature/headertransformation.wasm?sha1=lasdjflkasdfk
        entrymethod: entry
        height: 1

Las propiedades para la utilización de wasm son simples y cumplen con el schema de url, tal como se detalla a continuación.

  • name: propiedad que indica el nombre que se le dara internamente.
  • url: ubicación del archivo wasm
  • entrymethod: metodo que se utilizará para invocar
  • height: permite determinar en caso de existir mas de una definición de wasm el orden en que se ejecutarán
Ubicación Cadena de Conexión Descripción
file file://[wasm file] Se utiliza cuando el archivo wasm esta almacenado dentro del disco local
http wasm://[wasm url] Se utiliza cuando el archivo wasm se encuentra en un sitio web

Aeolabs dispone de extensiones ya desarrolladas que pueden ser utilizadas de manera pública o privada (bajo licencia), para mayor detalle referirse a aeol wasm