Docker ile Kong API Gateway Kurulumu
🐵 Kong, açık kaynak kodlu, ölçeklenebilir bir API Gateway yazılımıdır. Kong herhangi bir RESTful API’ın önünde çalışır. NGINX’in üzerine inşa edilmiştir ve Kong topluluğu tarafından sağlanan açık kaynak eklentileri kullanılarak genişletilebilir veya Lua diliyle kendi eklentinizi ekleyerek özelleştirebilirsiniz.
Kong herhangi bir RESTful API’ın önünde çalışır. API’ye yapılan her istek önce Kong’a düşer, ardından Kong üzerinde kurulu kimlik doğrulama (authentication), güvenlik (security), trafik kontrolü (traffic control), loglama (logging) gibi eklentiler sayesinde güçlü kontrollerden geçirilerek nihai API’ye ulaştırılarak cevap döndürülür.
Örneğin authentication eklentisini aktifleştirerek, client’ların API’nizdeki bir servise direk erişimini engelleyebilirsiniz. Veya mikroservis dünyasında client’tan gelen bir isteği, birden fazla servisi tetikleyerek sonucu döndürdüğünde bu bir servisten diğer servislere giden istekleri takip edebilmemizi sağlayan Correlation ID eklentisini aktif edebilirsiniz. Zahmetsiz şekilde servislerinizi loglayabilirsiniz.
Loglama işlemlerinde Correlation ID kullanımı konusundaki detaylı anlatımı için Gökhan Gökalp’ın aşağıdaki yazısını inceleyebilirsiniz.
🛠 Kurulum
KONG kurulumuna başlayalım.
🔷 İlk olarak docker üzerinde konteynerlerin birbirlerini görebilmeleri ve iletişim kurmalarına izin vermek için özel bir ağ oluşturmak gerekiyor.
Aşağıdaki şekilde kong-net
adında bir ağ oluşturalım.
docker network create kong-net
🔷 İkinci olarak veritabanını başlatalım;
Kong veritabanı olarak Cassandra veya PostgreSQL’i destekler. Biz PostgreSQL ile kullanmayı tercih ettik.
docker run -d --name kong-postgres-database \
--network=kong-net \
-p 5532:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:9.6
NOT: 5432
portundaki postgresi 5532
de çalıştırıyoruz.
🔷 Üçüncü olarak Kong konteyneriyle veritabanı migration işlemini yaparak veritabanını hazır hale getirelim:
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-postgres-database" \
-e "KONG_PG_PASSWORD=kong" \
kong:latest kong migrations bootstrap
🔷 Dördüncü olarak sıra geldi Kong konteynerı başlatmaya:
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-postgres-database" \
-e "KONG_PG_PASSWORD=kong" \
-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_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 127.0.0.1:8001:8001 \
-p 127.0.0.1:8444:8444 \
kong:latest
🔹 PostgreSQL ve Kong konteynerleri hatasız şekilde başlattıktan sonra son olarak başarılı şekilde çalışıp çalışmadığını kontrol edelim:
$ curl -i http://localhost:8001/
Kong kullanıma hazır demektir. 🎉
Ek Kaynak
🌈 İlkay Narlı’nın Kong API Gateway’in gerçek hayattaki problemlerinin çözümünde nasıl kullanıldığını ve Kong’u diğerlerinden ayırılan özelliklerini detaylı şekilde paylaştığı sunumunu izleyebilirsiniz.
Bir çok farklı kurulum desteği için resmi dökümantasyonu inceleyiniz.