Ortam (Environment) Nedir?

Ortam (Environment), bir kuruluştaki API Proxy'leri (API Proxy) için bir çalışma zamanı yürütme bağlamıdır (Runtime Execution Context).

Bir veya birden fazla API Proxy'e erişilebilmesi için ortama dağıtılması gerekir. Bir API Proxy tek bir ortama veya birden çok ortama dağıtılabilir.

Bir ortam, API Geçit'lerini çalıştırmak için sistem kaynağı olarak yalıtılmış, izole bir alan sağlar. Apinizer platformunda birden çok ortam oluşturulmasına izin verir.

Ortam Rolleri

Bir ortam, Üretim (Production), Geliştirme/Test (Development/Test) veya Sandbox olarak farklı rollerde oluşturulabilir.

Burada dikkat edilmesi gereken nokta, istemcinin API Proxy'e erişebilmesi için en az bir ortama dağıtılmış (deploy) olması gerekir.


Test Environment

Test environment da etkin olan API Proxy'ler veya Uygulamalar'ı test etmek amaçlı kullanılır. Donanımdaki kaynakların yeterliliğini ölçmek için de test yapılabilir.

Eğer test ortamından uzak bir ürün geliştirme yapılırsa ilerleme konusunda sorunlar yaşatabilir. 

Sandbox Environment

Sandbox ortamında etkin olan API Proxy'ler ve Uygulamalar, geliştirme (development) ve test etme sürecinde kullanılır. Bu ortam, production sürecini etkilemeden ve üretim sürecine yakın olarak güvenli test yapabilme imkanı sağlar.

Ürünün production environment üzerindeki durumunu taklit ettiği için önemlidir. Mesela, ilgili API Proxy'e poliçe ekleyip production environment üzerinde erişim öncesinde test etmeyi kolaylaştırır. Böylelikle production environment'ın güvenliğini sağlar ve bir geliştiricinin (developer) yanlışlıkla canlıdaki (production) bir uygulamayı değiştirme riskini ortadan kaldırmasına yardımcı olur. Ayrıca uygulamanın çalıştığından emin olarak son kullanıcının erişmesi de sağlanır. 

  • Test environment ve sandbox environment arasındaki farkın ne olduğu düşünülebilir. Ürün (API Proxy ya da Uygulama), geliştirme sürecinde test etmek için test environment, ürün bitmiş ve son kullanıcıya çıkmadan önce gerçek kullanıcıyı simüle etmek için sandbox environment üzerinde etkin hale getirilir. 
  • API Proxy'nin kullanım amacına göre ilgili roldeki ortama kurulum gerçekleştirir. Aynı API Proxy farklı amaçlar için farklı ortamlar üzerinde etkinleştirilebilir. Her bir environment diğerlerinden bağımsız olarak çalışır.

Production Environment

Production oratamında etkin olan API Proxy'ler veya Uygulamalar'a son kullanıcıların kullanımı için kullanılır. Bu ortam istemcilerin yükünü taşıyabilecek şekilde tasarlanmadır.

Ortam Mimarisi

Ortam, birçok API'nin birden çok ekibe veya projeye yayıldığı ortamlarda kullanılmak üzere tasarlanmıştır. Apinizer'daki Ortam kavramı birebir kubernetes'deki namespace'e denk gelmektedir.

Apinizer'da oluşturduğunuz ve dağıttığınız (deploy) ortam kubernetes'de bir namespace olarak oluşturulmaktadır. Bir ortam içinde namespace, deployment (dağıtım), pod, replica set, service ve access URL (erişim adresi) bileşenleri bulunur.

Apinizer Platformu ile oluşturulan tüm ortamlar da Kubernetes kümesinin içinde yer alır.

Kubernetes kümeleri büyük miktarda bağlantısız iş yüklerini eş zamanlı olarak yönetebilir. Kubernetes, küme içindeki objelerin karmaşasını gidermek için namespace denilen bir kavram kullanır. Namespace’ler objelerin birbirleriyle gruplanmasına ve bu grupların bir birim gibi filtrelenip kontrol edilmesine imkan sağlar. İster özelleştirilmiş erişim kontrol politikalarını uygulamak, ister bir test ortamı için tüm birimleri ayırmak için kullanılsın, namespace’ler objeleri bir grup olarak yönetmek için güçlü ve esnek bir yapıdır.

Namespace’ler küme içindeki obje isimleri için bir faaliyet alanı sağlar. Bir namespace içindeki isimler özgün olmalı iken, farklı namespace’lerde aynı isim kullanılabilir. Bu durum pratikte bazı senaryolar için yararlı olabilir.

Örneğin; uygulama yaşam süresi ortamlarını geliştirme, test, ürün gibi kategorilere ayırmak için Namespace’lerden yararlanılarak her ortamda aynı objenin aynı isimli kopyaları elde edilebilir. Ayrıca kolaylıkla kümenin belli kısımlarına istenilen bir politika (policy) uygulanabilir.

Obje isimlerinin yeniden kullanılabilmesi de kullanışlı bir özelliktir. Namespace’ler geliştirme, test ve ürün ortamlarının biçimlenmesi için de uygundur. Objeler test edildikçe ve orijinal isimlerini koruyarak yeni ortamlara gidebilir.

Detaylı bilgi için Kubernetes Dokümantasyonu.

Ortam Bileşenleri

Namespace: Apinizer Platformundaki ortam kavramı, Kubernetes ortamındaki Namespace kavramına karşılık gelmektedir.

Log Server: Oluşturulan ortamdaki tüm API Trafiğinin ve isteklerin loglanacağı Elasticsearch kümesi bağlantı tanımıdır.

Deployment (Dağıtım): Gateway Engine (Worker Server) ve Cache Server olarak iki tane deployment tanımlanır. 

  • Worker Server: Apinizer Platforum'un çekirdek (core) modülüdür, tüm API isteklerinin BackendAPI'ye yönlendirilmesinden sorumludur ve Policy Enforcement Point olarak çalışır.

  • Cache Server: Apinizer'da gerek duyulan Cache değerlerinin tutulduğu ortamdır.

Service (Servis): Environment Service (Ortam servisi), Environment Deployment da yer alan Apinizer Worker pod’una erişebilmek için oluşturulur. Servis, tüm podlara gelen istekleri karşılayan katmandır. Konum olarak podların önünde yer alır. Servis bilgisi her ortam oluşturulduğunda tanımlanır. Fakat küme içindeki tüm Apinizer Worker’ların bir servis ile yönetilmesi önemlidir. Ayrıca Apinizer Platformu’nda servis portları da özgün olmalıdır. Varsayılan olarak NodePort kullanılmakta ve bunun haricindeki servis tipleri Apinizer tarafından desteklenmemektedir.

Access URL (Erişim Adresi): Access Url, Proxy'nin dış erişim adresidir. https://<your-IP-address> şeklinde belirtilir. Dışarıdan erişim adres bilgisi kullanılarak Proxy'lere mesaj gönderilebilir. 

Access URL değerinin girilmesi servislerinin çalışma mantığında bir değişiklik oluşturmaz, sadece servisin tanım dosyasındaki erişim adresinin düzenlenmesini ve Apinizer üzerinden servisleri tüketecek olan istemcilerin Apinizer'da tanımlı olan adrese gelmelerini kolaylaştırıcı olması açısından önemlidir.


Ortam Erişim Adresi

Bir API Proxy'e, dağıtıldığı ortamın erişim adresi üzerinden erişebilir.

Bir API Proxy'nin erişimi adresi şöyle olsun; http://demo.apinizer.com/apigateway/myproxy

Ortam için tanımlanacak erişim adresi genelde, WAF veya Nginx gibi bir load balancer'da tanımlanan DNS adresidir. Apinizer'da tanımlanan ortamlar kubernetes'de bir namespace'e karşılık gelmektedir. Namespace içinde çalışan Apinizer Worker'larına erişim için Apinizer tarafından otomatik bir NodePort tipinde Kubernetes servisi oluşturulmaktadır. Ortam oluştururken Engine Service Port'a girilen değer ile bir servis oluşturulmaktadır.

Apinizer Worker'a erişmek için örnek bir servis bilgisi;

  • Eğer Engine Service Port değeri 30080 (default değerdir ve her ortam için farklı olmalıdır.) ise, WAF'da veya Nginx sunucunuzdaki DNS tanımına aşağıdaki gibi belirtmek gerekir.
     http://kubernetes-worker-node-IP:30080/