Building and Deploying an API Gateway Using KrakenD and Docker

Introduction

Di era microservices, penggunaan API Gateway sangat penting untuk menyatukan berbagai layanan backend ke dalam satu pintu masuk yang aman dan efisien. Salah satu pilihan open-source yang populer adalah KrakenD. Dalam artikel ini, kita akan mempelajari bagaimana:

  • Menyusun konfigurasi API Gateway dengan KrakenD
  • Membangunnya menggunakan Docker
  • Menjalankan dan mendepoy-nya dengan cara yang sederhana namun powerful

Flow

Preparation

  • Docker & Docker Compose terinstal
  • Basic YAML & JSON
  • Familiar dengan konsep API Gateway

Langkah-langkah :

1. Struktur Directory

2. Dockerfile

Berisi langkah-langkah untuk:

  • Menggunakan base image krakend
  • Menambahkan gomplate, nano, dan curl
  • Men-generate file krakend.json dari template (krakend.tmpl)
  • Menentukan environment (ENV=dev, ENV=prod) saat build
FROM devopsfaith/krakend:2.9.2

#Install Dependecies
RUN apk add nano && apk add curl

# Install Gomplate for templateing
RUN apk add --no-cache gomplate

# Set working directory
WORKDIR /etc/krakend

# Copy file
COPY krakend.tmpl .
COPY config config/

ARG ENV

# Generate krakend config
RUN gomplate \ 
-d service=config/settings/service.json \        
-d settings=config/settings/${ENV}/urls.json \
-d api_igunawan=config/settings/api_igunawan.json \
-d api_blogigunawan=config/settings/api_blogigunawan.json \
-f krakend.tmpl -o krakend.json

# Expose port default KrakenD
EXPOSE 8080

# Run krakend.json
CMD ["krakend", "run", "-c", "krakend.json"]

3. Krakend Template

File template utama konfigurasi KrakenD — file ini akan digenerate menjadi krakend.json berdasarkan environment dan data yang kamu beri via gomplate.

contoh generate nya, di sesuaikan dengan name file masing-masing:

gomplate \ 
-d service=config/settings/service.json \        
-d settings=config/settings/${ENV}/urls.json \
-d api_igunawan=config/settings/api_igunawan.json \
-d api_blogigunawan=config/settings/api_blogigunawan.json \
-f krakend.tmpl -o krakend.json

4. config

Folder utama untuk menyimpan semua file konfigurasi.

a. partials/

Berisi potongan template (*.tmpl) untuk berbagai API:

  • api_blogigunawan.tmpl → konfigurasi endpoint blog
  • api_igunawan.tmpl → konfigurasi endpoint igunawan

Biasanya akan di-include dari krakend.tmpl menggunakan {{ file "..." }} atau {{ include "..." }}.

b. settings/

Tempat file konfigurasi JSON statis yang dipakai gomplate.

  • api_blogigunawan.json → data statis untuk endpoint igunawan krakend
  • api_igunawan.json → data statis untuk endpoint igunawan healthcheck
  • service.json → konfigurasi global service (misal: timeout, base_url, version)
  • dev/urls.json dan prod/urls.json → masing-masing berisi daftar URL back-end untuk environment tertentu

Mechanisme :
– endpoint : adalah path yang kita buat untuk diakses dari luar / outside
– backend : adalah path asli dari source endpoint API kita

Jadi seperti memanipulasi path aslinya untuk di expose di public

5. Mekanisme saat Build Docker

Arg ENV diberikan (misalnya ENV=dev)

gomplate membaca:

  • config/settings/service.json
  • config/settings/dev/urls.json
  • config/settings/api_igunawan.json
  • config/settings/api_blogigunawan.json

gomplate akan merender krakend.tmpl menjadi krakend.json

Container akan menjalankan: krakend run -c krakend.json

Build & Run

docker build -t krakend-igunawan --build-arg ENV=dev .
docker run -p 8080:8080 krakend-igunawan

6. Testing endpoint

curl http://localhost:8080/api/igunawan

curl http://localhost:8080/api/blog

Link repository : https://github.com/gunawan-d/api-gateway-krakend

Leave a Reply

Your email address will not be published. Required fields are marked *