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