Un poco de Apache APISIX

Apache APISIX, como indica en su propia página web, es un API Gateway al estilo de otros como Kong, Tyk, Gloo, Ambassador o Gravitee.

APISIX API Gateway proporciona funciones de gestión de tráfico, como equilibrio de carga, upstream dinámico, circuit-breaking, autenticación, observabilidad, etc.

APISIX También puede utilizarse como k8s ingress controller.

APISIX fue desarrollo por ZhiLiu Technology y donado a la Fundación Apache en junio de 2019, se convirtió en un proyecto Top-Level en julio de 2020.

APISIX se basa en el popular servidor web Nginx, con un motor Lua encima (OpenResty) y una arquitectura de plugins.

APISIX tiene 2 partes principales:

  • El core de APISIX, que gestiona las funciones importantes como la correspondencia de rutas, balanceo de carga, el descubrimiento de servicios, la gestión de la configuración y proporciona una API de gestión. También incluye el plugin APISIX en runtime que soporta Lua y plugins multilingües (Go, Java , Python, JavaScript, etc) incluyendo el plugin WASM.
  • Plugins incorporados que añaden características como autenticación, seguridad, observabilidad, etc. Están escritos en Lua.

APISIX proporciona varios objetos básicos:

  • Upstream: Abstracción de host virtual que realiza el balanceo de carga en un conjunto dado de nodos de servicio según reglas de configuración
  • Consumer: Identidad de un cliente.
  • Route: La ruta coincide con la solicitud del cliente mediante la definición de reglas, luego carga y ejecuta el plugin correspondiente basado en el resultado coincidente, y reenvía la solicitud al Upstream especificado."
  • Service: Un objeto reutilizable que vincula tanto un conjunto de plugins como un upstream.

Los objetos se almacenan en etcd, un almacén distribuido de claves y valores que también utiliza Kubernetes.

El Request Handling se gestiona así:

API REST de APISIX:

Apache APISIX expone una API REST para que puedas acceder a la configuración.

Por ejemplo para definir una Route:

O un Upstream:

Principales características

Se puede utilizar APISIX API Gateway como entrada de tráfico para procesar todos los datos de negocio, incluyendo enrutamiento dinámico, upstream dinámico, certificados dinámicos, pruebas A/B, liberación canaria, despliegue blue-green, defensa contra ataques maliciosos, métricas, alarmas de monitorización, observabilidad de servicios, gobernanza de servicios, etc.

Todas las plataformas

  • Cloud.native: Plataforma agnóstica, No vendor lock-in, APISIX API Gateway puede funcionar desde bare-metal hasta Kubernetes.
  • Compatible con ARM64¡

Multi-protocolo:

  • Proxy TCP/UDP: Proxy dinámico TCP/UDP.
  • Proxy Dubbo: Proxy dinámico HTTP a Dubbo.
  • Proxy MQTT dinámico: Soporta balanceo de carga MQTT por client_id, ambos soportan MQTT 3.1.*, 5.0.
  • Proxy gRPC: Proxy de tráfico gRPC.
  • Proxy Web gRPC: Proxy del tráfico Web gRPC al servicio gRPC.
  • Transcodificación gRPC: Soporta transcodificación de protocolos para que los clientes puedan acceder a su API gRPC utilizando HTTP/JSON.
  • Proxy Websocket
  • Protocolo Proxy
  • Proxy de reenvío HTTP(S)
  • SSL: Carga dinámicamente un certificado SSL.

Capacidades dinámicas:

  • Hot Updates And Hot Plugins: Actualiza continuamente sus configuraciones y plugins sin reinicios.
  • Proxy Rewrite: Soporta reescribir el host, uri, esquema, método, cabeceras de la petición antes de enviarla al upstream.
  • Response Rewrite: Establecer código de estado de respuesta, cuerpo y cabeceras personalizados para el cliente.
  • Dynamic Load Balancing: Equilibrio de carga round-robin con peso.
  • Hash-based Load Balancing: Equilibrio de carga con sesiones hash coherentes.
  • Health Checks: Habilita la comprobación de la salud en el nodo ascendente y filtrará automáticamente los nodos no saludables durante el equilibrio de carga para garantizar la estabilidad del sistema.
  • Circuit-Breaker: Seguimiento inteligente de los servicios ascendentes insalubres.
  • Proxy Mirror: Ofrece la posibilidad de reflejar las solicitudes de los clientes.
  • Traffic Split: Permite a los usuarios dirigir incrementalmente porcentajes de tráfico entre varios flujos ascendentes.
  • Fine-grained routing

Seguridad:

  • Amplio soporte de autenticación y autorización:
    • key-auth
    • JWT
    • basic-auth
    • wolf-rbac
    • casbin
    • keycloak
    • casdoor
  • IP Whitelist/Blacklist
  • Referer Whitelist/Blacklist
  • IdP: Support external Identity platforms, such as Auth0, okta, etc..
  • Limit-req
  • Limit-count
  • Limit-concurrency
  • Anti-ReDoS(Regular expression Denial of Service): Políticas integradas para Anti ReDoS sin configuración.
  • CORS Habilite CORS (Cross-origin resource sharing) para su API.
  • URI Blocker: Bloquear solicitud de cliente por URI.
  • Request Validator
  • CSRF basada en Double Submit Cookie way, protect your API from CSRF attacks.

OPS friendly

  • Zipkin tracing:
  • Open source APM: soporta Apache SkyWalking
  • Works with external service discovery: Además del etcd incorporado, también es compatible con Consul, Nacos, Eureka y Zookeeper (CP).
  • Monitoring And Metrics: Prometheus
  • Clustering: Los nodos APISIX son apátridas, crea clustering del centro de configuración, por favor refiérase a etcd Clustering Guide.
  • High availability: Soporte para configurar múltiples direcciones etcd en el mismo cluster.
  • Dashboard
  • Version Control
  • CLI: startstopreload APISIX through the command line.
  • Stand-Alone: Soporta cargar reglas de ruta desde archivo YAML local, es más amigable bajo kubernetes(k8s).
  • Global Rule: Permite ejecutar cualquier plugin para todas las peticiones, por ejemplo: tasa límite, filtro IP, etc.
  • High performance: El QPS enun solo núcleo alcanza las 18.000 peticiones con un retardo medio inferior a 0,2 milisegundos.
  • Fault Injection
  • REST Admin API
  • External Loggers: Exportación de registros de acceso a herramientas externas de logs (HTTP Logger, TCP Logger, Kafka Logger, UDP Logger, RocketMQ Logger, SkyWalking Logger, Alibaba Cloud Logging(SLS), Google Cloud Logging, Splunk HEC Logging, File Logger, SolarWinds Loggly Logging, TencentCloud CLS).
  • ClickHouse: envíe los registros a ClickHouse.
  • Elasticsearch: enviar los registros a Elasticsearch.
  • Datadog: enviar métricas personalizadas al servidor DogStatsD, que viene incluido con el agente Datadog, a través del protocolo UDP. DogStatsD es básicamente una implementación del protocolo StatsD que recoge las métricas personalizadas para el agente Apache APISIX, las agrega en un único punto de datos y las envía al servidor Datadog configurado.
  • Helm charts
  • HashiCorp Vault: Soporta la solución de gestión de secretos para acceder a secretos desde el almacenamiento seguro Vault respaldado en un entorno de baja confianza. Actualmente, las claves RS256 (pares de claves pública-privada) o las claves secretas se pueden vincular desde el Vault en el plugin de autenticación jwt-auth.

Altamente escalable

  • Plugins personalizados: Permite enganchar fases comunes, como reescritura, acceso, filtro de cabecera, filtro de cuerpo y log, también permite enganchar la fase de balanceador.
  • Plugin puede ser escrito en Java/Go/Python
  • Plugin puede ser escrito con Proxy Wasm SDK
  • Algoritmos de balanceo de carga personalizados: Puede utilizar algoritmos de balanceo de carga personalizados durante la fase del balanceador.
  • Enrutamiento personalizado: Soporta que los usuarios implementen algoritmos de enrutamiento por sí mismos.

Serverless

  • Funciones Lua: Invoca funciones en cada fase en APISIX.
  • AWS Lambda: Integración con la función AWS Lambda como un upstream dinámico para proxyar todas las peticiones de un URI concreto al endpoint del API gateway de AWS. Soporta autorización vía api key y AWS IAM access secret.
  • Azure Functions: Perfecta integración con Azure Serverless Function como un upstream dinámico para proxyar todas las solicitudes de un URI particular a la nube de Microsoft Azure.
  • Apache OpenWhisk: Integración perfecta con Apache OpenWhisk como flujo ascendente dinámico para enviar todas las solicitudes de un URI concreto a su propio clúster OpenWhisk.

Uso con Docker

Como APISIX usa etcd, para poder lanzarlo con Docker tendré que añadir la dependencia y la configuración:

Quién usa APISIX

APISIX es usado por una amplia variedad de empresas y organizaciones, a continuación se muestran algunas de ellas: Airwallex, Geely, HONOR, Horizon Robotics, NADA JPL, Nayuki, OPPO, Swisscom, Tencent Game, VIVO, XPENG, Zom, …

Deja un comentario