Skip to content

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:

sh
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:latest

Kubernetes

Kong può essere installato in Kubernetes tramite Helm:

sh
helm repo add kong https://charts.konghq.com
helm repo update
helm install kong/kong --name kong --set ingressController.enabled=true

Installazione 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:

yaml
_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:
            - apikey

Utilizzo con Go

Kong fornisce SDK per vari linguaggi, incluso Go, per interagire con l'API amministrativa e gestire programmatically le risorse Kong.

go
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 upstream
  • header_filter: Prima che le risposte vengano restituite al client
  • body_filter: Prima che il corpo della risposta venga restituito al client
  • log: Quando una richiesta termina
  • certificate: 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.

Golang by www.golangdev.cn edit