Ocelot Nedir ve Nasıl Yapılandırılır?

Pelin Işıldar
FowApps
Published in
2 min readDec 28, 2022

Ocelot, .NET Core tabanlı bir API Gateway’dir. Bir API Gateway, bir uygulamanın birden çok arka uç hizmetine erişimini ve bunların bir araya getirilmesini sağlar. Ocelot, bu görevi yerine getirirken aynı zamanda yük dağıtımı, isteklerin yeniden yönlendirilmesi ve çeşitli güvenlik önlemleri gibi özellikleri de destekler. Örneğin, bir mobil uygulamanın çeşitli arka uç hizmetlerine erişimini sağlamak için kullanılabilir. Ocelot, kullanımı kolay olması ve özelleştirilebilir yapısı nedeniyle popüler bir seçenektir.

Ocelot nasıl yapılandırılır?

Ocelot, yapılandırma dosyası kullanılarak yapılandırılır. Bu yapılandırma dosyası, Ocelot’un nasıl çalışacağını ve hangi hizmetlere nasıl erişileceğini belirtir.

Ocelot yapılandırma dosyası, projenizin kök dizininde “ocelot.json” adında bir dosya olarak oluşturulur. Bu dosya, JSON formatında yazılır ve aşağıdaki ögeleri içerebilir:

  • “GlobalConfiguration”: Ocelot’un genel yapılandırmasını belirtir. Örneğin, önbellekleme ayarları ve güvenlik önlemleri burada belirtilebilir.
  • “ReRoutes”: Ocelot’un nasıl çalışacağını belirleyen yönlendirme ayarlarını belirtir. Bu bölümde, gelen isteklerin hangi hizmete yeniden yönlendirileceği ve bu hizmete nasıl erişileceği belirtilebilir.
  • “Aggregates”: Birden çok arka uç hizmetine erişimi birleştirerek tek bir cevapla geri döndürmeyi sağlar.
  • “DownstreamHostAndPorts”: Arka uç hizmetlerin hangi IP adresleri ve port numaraları kullanılacağını belirtir.

Örnek bir Ocelot yapılandırma dosyası aşağıdaki gibidir:

{
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000",
"RequestIdKey": "OcRequestId",
"AdminPath": "admin"
},
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/values",
"UpstreamHttpMethod": [ "Get" ]
}
]
}

Bu yapılandırma dosyası, “/values” yolunu kullanan istekleri “http://localhost:5001/api/values" yoluna yeniden yönlendirir.

“DownstreamPathTemplate” ve “DownstreamScheme” ögeleri, yeniden yönlendirilecek hizmetin yolunu ve ağ protokolünü belirtir. “DownstreamHostAndPorts” öğesi ise, yeniden yönlendirilecek hizmetin IP adresini ve port numarasını belirtir. “UpstreamPathTemplate” ve “UpstreamHttpMethod” ögeleri ise, yeniden yönlendirilecek isteğin yolunu ve HTTP metodunu belirtir.

Bu örnekte verilen yapılandırma, sadece “GET” metodu kullanan “/values” yolunu kullanan istekleri “http://localhost:5001/api/values" yoluna yeniden yönlendirir. Eğer farklı bir metot veya yol kullanılırsa, yeniden yönlendirme gerçekleşmez. Ocelot yapılandırma dosyasında birden çok “ReRoutes” öğesi olabilir ve bu öğelerin her birinin farklı yönlendirme ayarları olabilir.

Ocelot için güvenlik önlemleri nelerdir?

Ocelot, çeşitli güvenlik önlemleri uygulamaya yardımcı olur. Bunlar şunlardır:

  1. Kimlik doğrulama: Ocelot, kimlik doğrulama mekanizmalarını (örneğin, OAuth2) destekler ve gelen istekleri sadece doğrulanmış kullanıcıların erişimine izin verir.
  2. İsteklerin filtreleme: Ocelot, istekleri belirli kriterlere göre filtrelemeyi sağlar. Örneğin, sadece belirli IP adreslerinden gelen isteklere izin verilebilir veya sadece belirli HTTP metodları kullanılabilir.
  3. İsteklerin sınırlandırılması: Ocelot, belirli bir zaman aralığı içinde bir IP adresinden gelen isteklerin sayısını sınırlandırmayı sağlar. Bu, istemci tarafından yapılan isteklerin sisteme yük bindirme gibi saldırıları önler.
  4. SSL/TLS kullanımı: Ocelot, isteklerin şifrelenmesini ve güvenliğini artırmak için SSL/TLS gibi kriptografik protokoller kullanımını sağlar.

Güvenlik önlemleri, Ocelot yapılandırma dosyasının “GlobalConfiguration” bölümünde yapılandırılır. Örneğin:

"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000",
"RequestIdKey": "OcRequestId",
"AdminPath": "admin",
"Security": {
"IPAllowedList": [ "127.0.0.1" ],
"IPBlockedList": [ "10.0.0.0/8" ],
"AllowedHttpMethods": [ "GET", "POST" ],
"RateLimitOptions": {
"ClientWhitelist": [ "127.0.0.1" ],
"EnableRateLimiting": true,
"Period": "1m",
"PeriodTimespan": 60000,
"Limit": 1000
}
}
}

Bu örnekte, sadece “127.0.0.1” IP adresinden gelen isteklere izin verilir ve “10.0.0.0/8” IP adres ailesinden gelen istekler engellenir. Ayrıca, sadece “GET” ve “POST” HTTP metodları kullanılabilir.

--

--