Kong

Indirizzo documentazione: (konghq.com)
Repository open source: Kong/kong: 🦍 The Cloud-Native API Gateway (github.com)
Kong è un gateway API open source basato su Nginx e OpenResty, progettato per gestire e scalare le API in ambienti cloud native. Offre funzionalità come autenticazione, limitazione della velocità, trasformazione delle richieste e risposte, monitoraggio e molto altro attraverso un sistema di plugin estensibile.
Caratteristiche Principali
Architettura Scalabile
Kong può essere eseguito in modalità cluster, consentendo di scalare orizzontalmente per gestire grandi volumi di traffico.
Sistema di Plugin
Kong offre una vasta gamma di plugin pre-costruiti per funzionalità comuni come:
- Autenticazione (JWT, OAuth2, Key Auth, Basic Auth, LDAP, HMAC)
- Sicurezza (CORS, IP Restriction, Bot Detection, ACL)
- Traffico (Rate Limiting, Request Size Limiting, Response Ratemaking)
- Analisi e Monitoraggio (Prometheus, Datadog, Zipkin, Log)
- Trasformazione (Request Transformer, Response Transformer)
Indipendente dalla Piattaforma
Kong può essere eseguito su qualsiasi infrastruttura, inclusi ambienti on-premise, cloud pubblici e privati, e container.
Gestione delle API
Fornisce un'interfaccia amministrativa per gestire API, plugin e consumatori in modo centralizzato.
Installazione
Kong può essere installato in diversi modi:
Docker
Il modo più semplice per eseguire Kong è tramite Docker:
docker run -d --name kong \
-e "KONG_DATABASE=off" \
-e "KONG_DECLARATIVE_CONFIG=/kong/declarative/kong.yml" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_PROXY_LISTEN=0.0.0.0:8000" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
-p 8000:8000 \
-p 8001:8001 \
kong:latestKubernetes
Kong può essere installato in Kubernetes tramite Helm:
helm repo add kong https://charts.konghq.com
helm repo update
helm install kong/kong --name kong --set ingressController.enabled=trueInstallazione Nativa
Per l'installazione nativa su vari sistemi operativi, consultare la documentazione ufficiale.
Configurazione di Base
Kong utilizza un file di configurazione dichiarativa in formato YAML per definire API, servizi, route e plugin. Ecco un esempio di configurazione di base:
_format_version: "2.1"
services:
- name: example-service
url: http://example.com
routes:
- name: example-route
paths:
- /example
plugins:
- name: rate-limiting
config:
minute: 100
policy: local
- name: key-auth
config:
key_names:
- apikeyUtilizzo con Go
Kong fornisce SDK per vari linguaggi, incluso Go, per interagire con l'API amministrativa e gestire programmatically le risorse Kong.
package main
import (
"fmt"
"net/http"
)
func main() {
// Esempio di chiamata all'API amministrativa di Kong
resp, err := http.Get("http://localhost:8001/services")
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Status:", resp.Status)
}Plugin Personalizzati
Kong supporta la creazione di plugin personalizzati utilizzando Lua o PDK (Plugin Development Kit). I plugin possono essere eseguiti in diverse fasi del ciclo di vita della richiesta:
access: Prima che la richiesta venga inoltrata al servizio upstreamheader_filter: Prima che le risposte vengano restituite al clientbody_filter: Prima che il corpo della risposta venga restituito al clientlog: Quando una richiesta terminacertificate: Durante la negoziazione TLS
Integrazione con Microservizi
Kong è particolarmente adatto per architetture a microservizi, dove funge da punto di ingresso unificato per tutte le richieste API. Può gestire:
- Routing delle richieste ai servizi appropriati
- Autenticazione e autorizzazione centralizzate
- Limitazione della velocità e throttling
- Monitoraggio e tracciamento delle richieste
- Transformazione di richieste e risposte
Per ulteriori informazioni, consultare la documentazione ufficiale di Kong.
