Blog
DevOps5 min czytania

KrakenD — kompleksowy przewodnik instalacji i konfiguracji

KrakenD to wysokowydajny API Gateway typu open-source, który upraszcza dostarczanie danych przez scentralizowane zarządzanie żądaniami HTTP i agregację odpowiedzi z wielu mikroserwisów.

Wprowadzenie

KrakenD to wysokowydajny API Gateway typu open-source, który upraszcza i przyspiesza dostarczanie danych przez scentralizowane zarządzanie żądaniami HTTP i gromadzenie odpowiedzi z różnych mikroserwisów. Dzięki jego elastycznym możliwościom, możesz zredukować liczbę zapytań do serwera, poprawić czas odpowiedzi i uprościć infrastrukturę aplikacji. KrakenD sprawdzi się idealnie zarówno w środowiskach deweloperskich, jak i produkcyjnych.

W tym artykule omówimy krok po kroku proces instalacji oraz konfiguracji KrakenD.

Czym jest KrakenD i dlaczego warto go używać?

KrakenD działa jako API Gateway i umożliwia integrację danych z wielu źródeł, ograniczając potrzebę wielokrotnych wywołań API. Jego główne zalety to:

  • Wysoka wydajność — dzięki wykorzystaniu technologii Go, KrakenD jest szybki i sprawnie obsługuje duże wolumeny ruchu.
  • Modularna architektura — łatwość dostosowania funkcjonalności dzięki dodatkom i integracjom.
  • Elastyczność — umożliwia pełną kontrolę nad routingiem, buforowaniem, limitami prędkości i logowaniem.
  • Bezpieczeństwo — wsparcie dla JWT, OAuth2, API Key i innych mechanizmów uwierzytelniania.

KrakenD to doskonały wybór dla projektów, które muszą gromadzić dane z wielu źródeł lub ograniczyć liczbę żądań wysyłanych do backendu.

Instalacja KrakenD

KrakenD można zainstalować na kilka sposobów, jednak w poniższym przewodniku skupimy się na instalacji przy użyciu Dockera.

Instalacja KrakenD za pomocą Dockera

1. Utwórz plik docker-compose.yml w katalogu projektu.

services:
  krakend:
    image: devopsfaith/krakend
    container_name: krakend
    ports:
      - "8080:8080"  # Mapowanie portu 8080 na lokalnym hoście
    volumes:
      - ./krakend.json:/etc/krakend/krakend.json:ro  # Montowanie pliku konfiguracyjnego KrakenD

2. Utwórz plik konfiguracyjny krakend.json, który będzie zawierał konfigurację dla KrakenD (szczegóły konfiguracji w dalszej części artykułu).

3. Uruchom KrakenD w Dockerze:

docker-compose up -d

KrakenD będzie teraz dostępny pod adresem http://localhost:8080.

Konfiguracja KrakenD

KrakenD wykorzystuje do konfiguracji plik JSON, który definiuje, jak aplikacja będzie obsługiwać żądania HTTP, autoryzację, routing i inne ustawienia. Oto przykład podstawowej konfiguracji w pliku krakend.json.

Przykład pliku krakend.json

{
  "version": 2,
  "name": "KrakenD API Gateway",
  "port": 8080,
  "cache_ttl": "300s",
  "endpoints": [
    {
      "endpoint": "/api/v1/data",
      "method": "GET",
      "output_encoding": "json",
      "extra_config": {},
      "backend": [
        {
          "url_pattern": "/data",
          "host": [
            "http://jsonplaceholder.typicode.com"
          ],
          "encoding": "json",
          "extra_config": {}
        }
      ]
    }
  ]
}

Wyjaśnienie konfiguracji

  • version — określa wersję konfiguracji. Wersja 2 to najnowsza specyfikacja.
  • name — nazwa API Gateway, która pojawi się w logach.
  • port — port, na którym będzie nasłuchiwać KrakenD (w tym przypadku 8080).
  • cache_ttl — czas życia cache (TTL), domyślnie ustawiony na 300 sekund.
  • endpoints — określa punkty końcowe, które KrakenD wystawi publicznie.
  • endpoint — określa publiczny adres API, który będzie dostępny przez KrakenD.
  • method — definiuje metodę HTTP (np. GET).
  • backend — konfiguracja backendu; w tym przypadku żądanie zostanie skierowane do jsonplaceholder.typicode.com.

Po zapisaniu konfiguracji możesz ponownie uruchomić serwer KrakenD, aby zastosować zmiany.

Rozszerzona konfiguracja: autoryzacja i buforowanie

KrakenD pozwala na dodanie dodatkowych konfiguracji, takich jak autoryzacja JWT, ograniczenie liczby żądań, logowanie oraz zaawansowane buforowanie.

Autoryzacja JWT

Dodanie autoryzacji JWT wymaga dodania sekcji extra_config w backendzie lub endpoincie. Poniżej znajduje się przykład dla autoryzacji JWT w sekcji endpoints:

{
  "endpoints": [
    {
      "endpoint": "/api/v1/data",
      "method": "GET",
      "output_encoding": "json",
      "extra_config": {
        "auth/validator": {
          "alg": "HS256",
          "jwk_url": "https://your-auth-provider/.well-known/jwks.json",
          "audience": "your-audience",
          "issuer": "your-issuer"
        }
      },
      "backend": [
        {
          "url_pattern": "/data",
          "host": [
            "http://jsonplaceholder.typicode.com"
          ],
          "encoding": "json"
        }
      ]
    }
  ]
}

Limity żądań

Aby skonfigurować limity żądań, dodajemy sekcję rate_limit:

{
  "endpoints": [
    {
      "endpoint": "/api/v1/data",
      "method": "GET",
      "output_encoding": "json",
      "extra_config": {
        "rate_limit/disable": false,
        "rate_limit/max_rate": 10,
        "rate_limit/period": "1s"
      },
      "backend": [
        {
          "url_pattern": "/data",
          "host": [
            "http://jsonplaceholder.typicode.com"
          ],
          "encoding": "json"
        }
      ]
    }
  ]
}

Powyższa konfiguracja ogranicza liczbę żądań do 10 na sekundę dla danego punktu końcowego.

Testowanie i uruchamianie KrakenD

Aby uruchomić KrakenD lokalnie z pliku konfiguracyjnego, wykonaj następujące polecenie:

krakend run -c /etc/krakend/krakend.json

Dzięki temu poleceniu KrakenD załaduje ustawienia z pliku konfiguracyjnego i uruchomi serwer API Gateway.

Podsumowanie

KrakenD to doskonałe rozwiązanie API Gateway, które dzięki swojej elastyczności i wysokiej wydajności może obsłużyć duże wolumeny ruchu i złożone konfiguracje API. W artykule pokazaliśmy, jak uruchomić KrakenD z Docker Compose, a także jak skonfigurować podstawowe ustawienia i zaawansowane funkcje, takie jak autoryzacja JWT oraz limity żądań.

Korzyści z używania KrakenD:

  • Redukcja liczby wywołań API i uproszczenie infrastruktury,
  • wsparcie dla zaawansowanych funkcji, takich jak autoryzacja JWT, limity żądań i buforowanie odpowiedzi.