Gateway Runtime'ları
Gateway Altyapısı, Apinizer platformunda API Proxy'lerin çalışacağı Gateway Runtime ortamlarını oluşturmak ve yönetmek, Kubernetes kaynaklarını yönetmek, Gateway Engine yapılandırması yapmak, SSL/TLS sertifikaları yapılandırmak ve API trafik log konnektörlerini yönetmek için gerekli tüm araçları sunar.
Modül Bileşenleri
Gateway Altyapısı modülü aşağıdaki sayfalar üzerinden yönetilir:
Gateway Runtime ortamları oluşturma, Gateway Engine yapılandırması, ortam yayımlama ve metrik izleme.
Dağıtık Cache Server'ları oluşturma ve yapılandırma. Cache Server'ları Gateway pod'larından bağımsız namespace'lerde çalışabilir.
Apinizer Platformu ortamlarının genel ayarları, deployment ve pod yönetimi, monitör ve ayarlar.
Gateway Runtime ortamlarındaki API trafiğini diğer ortamlara göndermek için konnektör yapılandırması.
Apinizer modüllerini (Manager, Gateway, Portal) SSL/TLS sertifikaları ile güvenli şekilde başlatma ve HTTPS bağlantıları sağlama.
Gateway Runtime Nedir?
Gateway Runtime (Ortam), bir kuruluştaki API Proxy'leri 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 Gateway Runtime ortamına dağıtılması gerekir. Bir API Proxy tek bir Gateway Runtime ortamına veya birden çok ortama dağıtılabilir.
Sistem Genel Ayarlar ekranı üzerinden, Kubernetes Namespace ve Resource'lar Apinizer ile yönetilsin seçeneği Aktif olarak işaretlendiğinde gelmektedir.
Bir Gateway Runtime ortamı, Gateway'leri çalıştırmak için sistem kaynağı olarak yalıtılmış, izole bir alan sağlar. Apinizer platformunda birden çok Gateway Runtime ortamı oluşturulmasına izin verir.
Gateway Runtime yönetimi iki şekilde gerçekleştirilir:
- Apinizer Tarafından Yönetilen (Managed by Apinizer): Gateway Runtime'ları için gereken tüm Kubernetes tanımları API Manager ekranı üzerinden oluşturulur ve yönetilir
- Uzak Gateway (Remote Gateway): API Manager ekranında mevcut Kubernetes tanımlarının sadece standart verileri kaydedilir
Gateway Runtime'ları ve Cache Server'ları ayrı ayrı yönetilmektedir. Cache Server oluşturma ve yönetimi için Dağıtık Cache sayfasına bakabilirsiniz.
:::
Gateway Runtime Rolleri
Bir Gateway Runtime ortamı, Üretim (Production), Geliştirme/Test (Development/Test) olarak farklı rollerde oluşturulabilir.
Burada dikkat edilmesi gereken nokta, istemcinin API Proxy'e erişebilmesi için en az bir Gateway Runtime ortamına dağıtılmış olması gerekir.
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.
Production ortamı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 tasarlanmıştır.
Gateway Runtime Mimarisi
Gateway Runtime ortamı, birçok API'nin birden çok ekibe veya projeye yayıldığı ortamlarda kullanılmak üzere tasarlanmıştır. Apinizer'daki Gateway Runtime kavramı birebir Kubernetes'deki namespace'e denk gelmektedir.
Apinizer'da oluşturduğunuz ve dağıttığınız Gateway Runtime ortamı Kubernetes'de bir namespace olarak oluşturulmaktadır. Bir Gateway Runtime 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 Gateway Runtime ortamları da Kubernetes kümesinin içinde yer alır.
Kubernetes Namespace Kavramı:
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.
Detaylı bilgi için Kubernetes Dokümantasyonu.
Gateway Runtime Bileşenleri
Namespace
Apinizer Platformundaki Gateway Runtime kavramı, Kubernetes ortamındaki Namespace kavramına karşılık gelmektedir.
Log Konnektörleri
Oluşturulan Gateway Runtime ortamındaki tüm API Trafiğinin ve isteklerin loglanacağı log konnektörleri tanımlarıdır.
Deployment (Dağıtım)
Gateway Runtime olarak deployment tanımlanır:
- Gateway Runtime (Worker Server): Apinizer Platform'un çekirdek (core) modülüdür, tüm API isteklerinin BackendAPI'ye yönlendirilmesinden sorumludur ve Policy Enforcement Point olarak çalışır. Gateway Runtime'ları artık Cache Server'larından bağımsız olarak yönetilir ve farklı namespace'lerde çalışabilir.
Service (Servis)
Gateway Runtime Service (Gateway Runtime servisi), Gateway Runtime Deployment'da yer alan Gateway pod'una erişebilmek için oluşturulur. Servis, tüm pod'lara gelen istekleri karşılayan katmandır. Konum olarak pod'ların önünde yer alır.
Servis bilgisi her Gateway Runtime ortamı oluşturulduğunda tanımlanır. Fakat küme içindeki tüm Gateway pod'larını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.
Gateway Runtime Erişim Adresi
Bir API Proxy'e, dağıtıldığı Gateway Runtime ortamının erişim adresi üzerinden erişilebilir.
Erişim Adresi Yapısı
Bir API Proxy'nin erişimi adresi şöyle olsun:
http://demo.apinizer.com/apigateway/myproxy
| Bileşen | Açıklama |
|---|---|
http://demo.apinizer.com/ | Gateway Runtime Erişim Adresi |
apigateway/ | Root Context |
myproxy | API Proxy Relative Path |
Erişim Adresi Yapılandırması
Gateway Runtime 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 Gateway Runtime ortamları Kubernetes'de bir namespace'e karşılık gelmektedir. Namespace içinde çalışan Gateway pod'larına erişim için Apinizer tarafından otomatik bir NodePort tipinde Kubernetes servisi oluşturulmaktadır. Gateway Runtime ortamı oluştururken Engine Service Port'a girilen değer ile bir servis oluşturulmaktadır.
Örnek Servis Yapılandırması
Gateway pod'larına erişmek için örnek bir servis bilgisi:
Eğer Engine Service Port değeri 30080 (default değerdir ve her Gateway Runtime 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/
Gateway Runtime Oluşturma
Gateway Runtime ortamı oluştururken genel tanım bilgilerini içeren görsellere aşağıda yer verilmiştir:
Gateway Runtime ortamı oluştururken genel tanım bilgilerini içeren alanlar:
| Alan | Açıklama |
|---|---|
| Yönetim Türü (Managed Type) | Gateway Runtime'ın nasıl yönetileceğini belirler. Apinizer Tarafından Yönetilen (Managed by Apinizer): Apinizer namespace, deployment, service ve tüm gerekli Kubernetes kaynaklarını otomatik olarak oluşturur. Uzak Gateway (Remote Gateway): Gateway pod'unuzun çalıştığından ve erişilebilir olduğundan emin olun. Apinizer sadece bağlantı detaylarını kaydeder, deployment'ı yönetmez. |
| Tür (Type) | Lisans'a ve kullanılan ortama uygun bir değer seçilmesi gerekmektedir. Test veya Üretim (Production) seçilebilir. |
| İletişim Protokolü Türü (Communication Protocol Type) | HTTP, gRPC, HTTP+Websocket iletişim protokollerinden birisi seçilebilir. |
| Ad (Name) | Gateway Runtime ortamının adı. Kubernetes'teki namespace'e karşılık gelmektedir. |
| Anahtar (Key) | Oluşturulan Gateway Runtime ortamı için kullanılan ve ortama özgü kısaltılmış bir anahtardır. |
| Erişim URL Adresi (Access URL) | Gateway Runtime ortamı içinde çalışan API Proxy'lerin dış erişim adresidir. |
| Açıklama (Description) | Yönetim kolaylığı ve önemli notlar için kullanılabilir. |
| Ortam Yayımlama Erişimi / Proje (Environment Publishing Access / Projects) | Gateway Runtime ortamının kullanılabileceği projeleri buradan seçebilir ya da tüm projelerde kullanılabilmesi için seçimi boş bırakılabilir. Eğer bir veya birden çok proje seçimi yapılırsa, yeni oluşturulan projelerde de kullanılmak için onların da eklenmesi gerekmektedir. Varsayılan değer olarak seçimsiz gelir. |
| Node Listesi (Node List) | Oluşturulan Gateway Runtime ortamının hangi kubernetes sunucularında çalışacağı seçilir. |
Namespace Bağımsızlığı:
Gateway pod'ları ve Cache Server pod'ları artık farklı Kubernetes namespace'lerinde çalışabilir. Gateway pod'ları
diğer namespace'lerdeki Cache Server'larına Kubernetes service discovery kullanarak eri şebilir (örn:
http://cache-http-service.apinizer-cache.svc.cluster.local:8090). Bu, daha esnek bir altyapı yönetimi sağlar ve
Gateway ve Cache iş yüklerini ayırmanıza olanak tanır.
İletişim Protokolü Türü Seçimi:
API Proxylerin hangi Gateway Runtime ortamına deploy edilebileceğini burada seçilen tür belirler:
- REST ve SOAP API Proxyler → HTTP tipindeki Gateway Runtime ortamına
- gRPC API Proxyleri → gRPC tipindeki Gateway Runtime ortamına
- Websocket API Proxyler → HTTP+Websocket tipindeki Gateway Runtime ortamına deploy edilebilir
Proje Seçimi: Proje seçilmesi durumunda sadece o proje içerisinde yer alan API Proxy'lerin bu Gateway Runtime ortamına deploy edilebileceği anlamına gelir.
Yönetim API Erişim Endpoint'leri
Gateway ve Cache iletişimi için birden fazla Yönetim API Erişim Endpoint'i yapılandırabilirsiniz. Her endpoint yapılandırması şunları içerir:
| Alan | Açıklama |
|---|---|
| Ad | API endpoint yapılandırması için açıklayıcı bir ad (örn: "Üretim Cluster", "DR Site") |
| Gateway Yönetim API'si Erişim URL'si | Gateway sunucunuzun health check adresi. Apinizer Yönetim Konsolu, Gateway pod'larına konfigürasyon güncellemeleri için bu adrese bağlanır. Örnek: http://worker-management-api-http-service.prod.svc.cluster.local:8091 |
| Cache Yönetim API'si Erişim URL'si | Cache Server'ınızın health check adresi. Gateway pod'ları Cache Server'larına bağlanmak için bu URL'yi kullanır. Örnek: http://cache-http-service.apinizer-cache.svc.cluster.local:8090 |
Çoklu Endpoint'ler:
Farklı senaryolar için birden fazla Yönetim API endpoint'i yapılandırabilirsiniz:
- Çok bölgeli dağıtımlar: Her bölge için ayrı endpoint'ler yapılandırın
- Yüksek erişilebilirlik: Failover için yedek endpoint'ler kurun
- Cluster ayrımı: Farklı Kubernetes cluster'ları için farklı endpoint'ler kullanın
Birden fazla endpoint yapılandırıldığında, Ek Değişkenler'deki environmentClusterName değişkeni ile hangi
endpoint'in kullanılacağını seçebilirsiniz.
Endpoint Yapılandırması:
- Her endpoint'te hem Gateway hem de Cache Yönetim API URL'leri yapılandırılmalıdır
- URL'ler cross-namespace iletişim için Kubernetes service discovery formatını kullanmalıdır
- Yönetim Konsolu, Gateway pod'ları ve Cache Server pod'ları arasında ağ bağlantısının olduğundan emin olun