Giriş
Apinizer, Kubernetes Platformu üzerinde çalışan, API Manager (Yönetim Konsolu), API Gateway ve API Cache Server isimlerinde üçü temel beş bileşenden oluşur.API Manager (Yönetim Konsolu)
API Manager, API’lerin, Politikaların, Kullanıcı, Credential’ların ve konfigürasyonların tanımladığı ve API Trafik ve Analitik verilerinin görüntülenip analiz edildiği web tabanlı bir yönetim arayüzüdür.API Gateway
Apinizer’in en önemli bileşenidir. İstemcilerden gelen isteklerin karşılandığı noktadır. Aynı zamanda Politika Uygulama Noktası (Policy Enforcement Point) olarak görev yapar. Gelen isteği tanımlanmış politikalara uygun şekilde işleyerek ilgili Backend API/Servise yönlendirir. Yönlendirme yaparken yük dengeleyici olarak çalışabilir. TLS/SSL sonlandırması burada yapılır. Backend API/Servisten dönen yanıtı da yine tanımlı politikalara uygun olarak işleyerek istemciye gönderir. Bu esnada yapılan tüm işlemleri kayıt altına alarak asenkron olarak log sunucusuna gönderir. Hassas verilerin kayıt altına alınması işini, belirlenen kurallara (silme, maskeleme, şifreleme) uygun şekilde ele alır. Her Gateway bir Ortam’a (Environment) ait olup, ayarları çalıştığı Ortam’a göre değişir. Apinizer’de birden fazla Ortam ve her bir Ortam’da da birden fazla Gateway olabilir.API Cache Server
API Cache Server, dağıtılmış önbellekte saklayarak hem bileşenlerinin paylaştığı verileri yönetir, hem de performans iyileştirmesi sağlar.Apinizer imajları Kubernetes ortamına deploy edildikten sonra Apinizer tarafından size verilen Lisans Anahtarını veri tabanına eklemeniz gerekir.
Kurulum Öncesi Adımlar
Apinizer kurulumuna başlamadan önce, sunucularınızda Kubernetes Cluster, Replicaset MongoDB, isteğe bağlı olarak API Trafik ve Analitik verileri Apinizer üzerinden yönetilecekse Elasticsearch’ün kurulu olması gerekmektedir.Kubernetes Kurulumu
Kubernetes cluster kurulumunu öğrenin
MongoDB Kurulumu
MongoDB kurulumunu öğrenin
Elasticsearch Kurulumu
Elasticsearch kurulumunu öğrenin
Bulut Ortamlarına Kurulum
Bulut ortamlarına kurulum yapın
Çevrimdışı Kurulum
Çevrimdışı kurulum yapın
Kurulum ve Ayarlamalar
Kubernetes Yetkilerinin Tanımlanması ve Namespace’lerin Oluşturulması
Apinizer’ın oluşturulan Namespace’deki pod’lara erişim için Kubernetes API’sinin izinlerin tanımlanması gerekmektedir. Kubernetes’de ClusterRole ve ClusterRoleBinding, Kubernetes küme düzeyinde rol ve rol atama mekanizmalarını sağlar. Bu iki kaynak, küme yöneticilerinin ve uygulama geliştiricilerinin Kubernetes kaynaklarına erişim ve izinlerini yönetmelerini sağlar. Ortam (Environment) yönetimleri API Manager üzerinden yapılacaksa, Apinizer’ın Kubernetes API’lerine erişip, Namespace, Deployment, Pod, Service oluşturma, silme, güncelleme ve izleme işlemlerini yapabilmesi için yetkilerin tanımlanması gerekir.Kubernetes yönetimi Apinizer ile yapılıyor ise
Aşağıdaki adımda, Kubernetes üzerinde Role ve RoleBinding oluşturup yetkiler tanımlanır. Bu adımda oluşturulacak tüm environment’lar için yetki verilir.Kubernetes yönetimi Apinizer ile yapılmıyor ise
Burada sadece Apinizer namespace’indeki manager uygulaması için yetkiler ayarlanır.API Manager (Yönetim Konsolu) Kurulumu
API Manager, API’lerin, Politikaların, Kullanıcı, Credential’ların ve konfigürasyonların tanımladığı ve API Trafik ve Analitik verilerinin görüntülenip analiz edildiği web tabanlı bir yönetim arayüzüdür. API Manager’ın Kubernetes’e deployment’ı öncesi aşağıdaki değişkenleri kendi ortamınıza uygun şekilde konfigüre edin.- APINIZER_VERSION - Hangi Apinizer versiyonunu kuracağınızı belirten parametredir. Mevcut sürümleri görmek için lütfen tıklayınız. Yeni kurulumlarda her zaman en son sürümü kullanmanız önerilir. Sürüm notlarını incelemek için lütfen tıklayınız.
- MONGO_DBNAME - Apinizer konfigürasyonları için kullanılacak veritabanı URL bilgisi. Varsayılan olarak “apinizerdb” ismi kullanılması önerilir.
- MONGOX_IP ve MONGOX_PORT - MongoDB sunucularına ait IP ve port bilgileri. MongoDB varsayılan portu 27017’dir. Apinizer varsayılan olarak 25080 portunu kullanır.
- MONGO_USERNAME ve MONGO_PASSWORD - MongoDB uygulamanıza ait Apinizer için tanımlanmış, ilgili veritabanı üzerinde yetkili ya da o veritabanı oluşturma yetkisine sahip olan kullanıcıya ait olan bilgiler.
- YOUR_LICENSE_KEY - Apinizer tarafından tarafınıza gönderilen lisans anahtarı.
- K8S_ANY_WORKER_IP - Apinizer kurulumu tamamlandığında herhangi bir web tarayıcıdan Apinizer Yönetim Konsolu arayüzüne erişebilmeniz için Kubernetes Cluster’ınızdan bir IP gerekmektedir. Bu genelde Kubernetes Worker sunucularından biri olarak tercih edilir ve daha sonra bir Yük Dağıtıcı (Load Balancer) ve DNS arkasına konulması önerilir.
Mongodb bilgileriyle secret oluşturulması
MongoDB veritabanı bağlantı bilgilerinizi kubernetes deployment’larda Encoded bir şekilde kayıtlı olması tavsiye edilmektedir. Bunun için Linux tabanlı bir işletim sisteminin terminalinde aşağıdaki adımları uygulayın.API Manager’in Kubernetes deployment’ı
Aşağıdaki örnek yaml dosyasını sistemlerinize uygun olacak şekilde değiştirerek Kubernetes Cluster’ınıza yükleyin.Eğer Ortamlar Apinizer Üzerinden Yönetilmeyecekse Manager’ın Deployment’ı DeğiştirilirDeployment objelerinin gerekli ServiceAccount’a bind olabilmesi için spec alanına aşağıdaki gibi serviceAccountName alanı eklenir:
Ortam DeğişkenleriApinizer API Manager, Spring Boot alt yapısından çalışır. Spring Boot’da Ortam değişkenlerini genellikle alt çizgi (
_) kullanarak ve büyük harfle ifade eder. Bu nedenle örneğin, spring.servlet.multipart.max-file-size ve spring.servlet.multipart.max-request-size özelliklerini ortam değişkenleri olarak ayarlarken alt çizgi kullanmanız gerekebilir.Örnek: SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE ve SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE ortam değişkenlerini olarak tanımlayabilirsiniz.Eğer NGINX gibi bir proxy sunucu kullanıyorsanız ve dosya yükleme limitini artırmak istiyorsanız, NGINX yapılandırma dosyasına aşağıdaki ayarı eklemeniz gerekmektedir:Ortam DeğişkenleriDeployment işlemleri veri bütünlüğünün sağlanması amacıyla senkron olarak yapılmaktadır. WORKER_DEPLOYMENT_TIMEOUT parametresi, API Manager üzerinden veya Management API ile yapılan deploy işleminin kaç saniye sonra zaman aşımına uğrayacağını ifade eder.
API Manager Kubernetes üzerinde deploy olurken manager isminde ve NodePort tipinde bir Kubernetes servisi oluşturur. Bu servis kubernetes dışından API Manager’a erişim için gereklidir. Ancak sizi bu servisi silip Ingress veya kurumunuzda bağlantı yöntemi için hangi yapıyı kullanıyorsanız ona göre uyarlayabilirsiniz.
API Manager lisans anahtarının girilmesi
Apinizer tarafından size verilen Lisans Anahtarını aşağıdaki gibi bir.js dosyasında güncelleyip veri tabanındaki lisans bilgisi güncellenebilir.

Apinizer Manager’ı SSL ile Başlatmak
SSL/TLS ile Apinizer Modüllerini Başlatma adresindeki kılavuzdan gerçekleştirebilirsiniz.Bağlantı Yönetimi (Connection Management) Sayfalarında Yapılacak Ayarlar
Apinizer üzerinden akacak trafik loglarının nereye gönderileceği bilgisinin Apinizer’a tanımlanması gerekmektedir. Bu tanımlama Bağlantı Konfigürasyonları sayfasındaki Konnektörler aracılığıyla yapılmaktadır. Eğer özel bir seçiminiz yoksa Apinizer’ın Analitik ve İzleme kabiliyetlerinden tam manada yararlanabilmeniz için veri yönetimi de Apinizer’dan ayarlanacak şekilde bir Elasticsearch konnektörü kullanabilirsiniz. Bu işlemler için kullanacağınız uygulamalara ait bağlantı tanımlarını Sistem Ayarları → Bağlantı Yönetimi sekmesindeki altındaki konnektörlere ayrılmış sayfalardan yapabilirsiniz. API Trafik ve API Analitik verilerinizi kendi Log sistemleriniz ile yönetecekseniz size uygun entegrasyon ayarlarından uygun gördükleriniz tanımlanabilir.Genel Ayarlar (System Settings) Sayfasında Yapılacak Ayarlar
Sistem Ayarları → Genel Ayarlar sayfasına giderek burada;- Sistem üzerinden sunacağınız servisleri sunarken ilgili Worker ortamlarına tanımladığınız adreslerin sonuna bir değer eklenip eklenmeyeceği,
- Apinizer’ın üzerinde bulunduğu kubernetes ortamını Apinizer üzerinden yönetip yönetmeyeceğinizi,
- Log ayarları kapalı durumda olsa bile hatalı mesajlara ait logların bağlı konnektörlere gönderilip gönderilmeyeceği,
- Yönetim Konsolu arayüzüne giriş ve oturumda kalma süreleri ile ilgili ayarları,
- Her bir proxy’de tutulacak olan geri alma noktalarının sayıları,
- Uygulama log ve token log’larının tutulacağı/gönderileceği uygulamalar
Gateway Ortamları (Gateway Environment) Sayfasında Yapılacak Ayarlar
Sistem Ayarları → Ağ Geçitleri sayfasında en az bir ortam (environment) oluşturularak yayınlanmalıdır. Uygun bir ortam ismi verilerek konteynırlara lisansınıza ve sunucu miktarınıza uygun kaynaklar ile ayarlar girilir. Bu ortam ismi aynı zamanda ilgili ortamdaki uygulamaların çalışacağı kubernetes namespace’i olacaktır. Ardından Log yazmak istediğiniz ortamlara, Konnektör tanımları yapılarak ortamların log yazması sağlanır.Kubernetes yönetimi Apinizer ile yapılıyor ise
Gateway Runtime’ları sayfası hakkında detaylı bilgi için tıklayınız. Burada yeni bir ortam seçeneği ile açılan sayfada ortamı hangi namespace’te oluşturacağınız, hangi adres üzerinden açacağınız, hangi konnektörleri bağlayacağınız gibi genel ayarlar ile worker ve cache uygulamalarının kaynakları ve JVM parametreleri ayarlanır ve ortam yayınlanır.Kubernetes yönetimi Apinizer ile yapılmıyor ise
Gateway Runtime oluştururken Uzak Gateway (Remote Gateway) seçeneğini seçerek mevcut Kubernetes tanımlarını Apinizer platformuna tanımlayabilirsiniz. Detaylı bilgi için Gateway Runtime’ları sayfasına bakabilirsiniz. Gerekli rol atamalarında worker ve cache’in çalışacağı namespace oluşturularak bu namespace içerisine yetkiler ayarlanır, worker ve cache adında iki tane deployment dosyası ve bu deploymentlardan sonra oluşacak pod’lara erişim için kubernetes servisleri oluşturulmalıdır.Worker ve Cache için role ve rolebinding’leri oluşturma
Oluşturulacak ortamların isimleri önden belirlenmeli ve<WORKER_CACHE_NAMESPACE> değişkenleri bu şekilde ayarlanarak, oluşturulacak her ortam için aşağıdaki adımlar uygulanmalıdır.
Worker ve Cache deployment’larını oluşturma
Worker uygulaması HTTPS ile sunulmak istenilirse yukarıdaki yaml’da livenessProbe, readinessProbe ve startupProbe’ların altındaki port değeri 8443, scheme değeri HTTPS olarak verilmelidir.
Ortam DeğişkenleriBu environment değişkenleri, YAML dosyasına eklenerek Tomcat’in iş parçacığı ve bağlantı yönetimi ile Hazelcast’in veri yükleme, yedekleme ve write-behind davranışları yapılandırılır.Tomcat Ayarları:
SERVER_TOMCAT_MAX_THREADS: Tomcat’in işleyebileceği maksimum eşzamanlı iş parçacığı (thread) sayısıSERVER_TOMCAT_MIN_SPARE_THREADS: Tomcat’in hazırda beklettiği minimum boş thread sayısıSERVER_TOMCAT_ACCEPT_COUNT: Tüm thread’ler meşgulken sıraya alınabilecek maksimum bağlantı sayısıSERVER_TOMCAT_MAX_CONNECTIONS: Tomcat’in aynı anda kabul edebileceği maksimum bağlantı sayısıSERVER_TOMCAT_CONNECTION_TIMEOUT: Bağlantı zaman aşımı süresi (milisaniye)SERVER_TOMCAT_KEEPALIVE_TIMEOUT: Keep-alive bağlantılarının zaman aşımı süresi (milisaniye)SERVER_TOMCAT_MAX_KEEPALIVE_REQUESTS: Bir keep-alive bağlantısı üzerinden işlenebilecek maksimum istek sayısıSERVER_TOMCAT_PROCESSOR_CACHE: İşlemci önbelleğindeki maksimum processor sayısı
HAZELCAST_IO_WRITE_THROUGH: Hazelcast write-through modunun açık olup olmadığıHAZELCAST_MAP_LOAD_CHUNK_SIZE: Map yüklemesinde kullanılacak yığın (chunk) boyutuHAZELCAST_MAP_LOAD_BATCH_SIZE: Map yüklemesinde kullanılacak batch boyutuHAZELCAST_CLIENT_SMART: Hazelcast client’ın akıllı yönlendirme (smart routing) kullanıp kullanmayacağıHAZELCAST_MAPCONFIG_BACKUPCOUNT: Hazelcast map verisinin kaç yedek kopyasının tutulacağıHAZELCAST_MAPCONFIG_READBACKUPDATA: Yedek kopyalardan okuma yapılacak mı?HAZELCAST_MAPCONFIG_ASYNCBACKUPCOUNT: Asenkron yedekleme kopya sayısıHAZELCAST_OPERATION_RESPONSEQUEUE_IDLESTRATEGY: Hazelcast yanıt kuyruğu boşta stratejisi (örneğin: block, busyspin, backoff)HAZELCAST_MAP_WRITE_DELAY_SECONDS: Map write-behind özelliği için gecikme süresi (saniye)HAZELCAST_MAP_WRITE_BATCH_SIZE: Map write-behind özelliği için batch boyutuHAZELCAST_MAP_WRITE_COALESCING: Write-behind işlemlerinde birleştirme (coalescing) yapılacak mı?HAZELCAST_MAP_WRITE_BEHIND_QUEUE_CAPACITY: Write-behind kuyruğunun maksimum kapasitesi
Worker ve Cache için servis oluşturma
Worker HTTPS ile sunulmak istenilirse yukarıdaki yaml’da port ve targetPort değerleri 8443 olarak verilmelidir.
Mongodb secret’ını Apinizer namespace’lerinden yeni oluşturulan namespace’lere kopyalama
Gateway ve Cache Server uygulamaları da MongoDB’ye bağlanacağı için, Manager uygulaması için oluşturulan secret diğer namespace’lere kopyalanır. Aşağıdaki örnek apinizer namespace’inde olan bir secret’i ilgili namespace’ine kopyalar.Oluşturulan ortamlara Log Konnektörü eklenmesi
Oluşturulan ortamlara en az bir Log konnektörü bağlanmalıdır. Ortamlara Log Konnektörü eklenmesi ile ilgili detaylı bilgi için tıklayınız. Yukarıdaki adımları tamamladıktan sonra, tekrar API Manager üzerinde Sunucu Yönetimi bölümüne giderek tanımlamış olduğunuz Environment’ı published olarak güncelleyin.Yedekleme Yönetimi/Yedek Ayarları (Backup Management/Configuration) Sayfasında Yapılacak Ayarlar
Apinizer konfigürasyonel verilerinin ve Genel Ayarlar sayfasında ayarladıysanız log ve token kayıtlarının tutulduğu veritabanının yedeklemesi, ilgili (birden fazla varsa buradaki ayarda belirtilecek olan) sunucuda dump dosyası çıkartılarak yapılabilir. Bu dosyanın her halükarda kurumunuzun sistem ekibi çalışanları tarafından güvenli bir sunucuya da yedeklenmesi önerilmektedir. Bu sayfayla ilgili detaylı bilgi için tıklayınız.Diğer Ayarlar
Apinizer Yönetim Konsoluna giriş yaptığınız “admin” isimli kullanıcı hesabının şifresini lütfen ilk girişte sağ üstteki hızlı menü altındaki Parola Değiştir sayfasından değiştirin ve güvenli bir şekilde not alın. Kullanıcı yönetiminin yapıldığı Kullanıcılar sayfası hakkında detaylı bilgi için tıklayınız. Yönetim konsoluna girişte kullanıcıların LDAP/Active Directory’de bulunan şifrelerini kullanmasını istiyorsanız detaylı bilgi için tıklayınız. Apinizer’da kullanacağınız bir çok özellik loglarını konfigürasyon verilerinin tutulduğu veritabanına yazar. Bu bilgiler kurumunuz politakalarına göre gerekli olmayan loglardansa bu verilerin neler olduğu ve bu büyümenin nasıl kontrol altında tutulacağı ile ilgili detaylı bilgi için tıklayınız. Apinizer trafik logları için Apinizer yönetimindeki Elasticsearch’ü kullanıyorsanız ve yedeklemesinin belirli sürelerde snapshot’lar alınarak yapılmasını tercih ediyorsanız, bu işlemleri detaylı şekilde yapabilmek için tıklayınız. Apinizer kurulumunda Worker ortamlarının açıldığı port’lar ve üzerinde çalıştığı sunuculara DNS yönlendirmesi yapılması önemle tavsiye edilmektedir. Bunun için kurumunuz çalışanlarına Apinizer’ın hangi sunucu ve portlardan açıldığını ve bu adreslere hangi DNS’ler ile erişilmesi gerektiği iletilmelidir. Eğer kurumunuz kamunet ağına dahilse ve Apinizer kamunet ağına direk erişecekse Apinizer sunucularının çıkışları kamunet IP’nizmiş gibi çıkabilmelidir. NAT’lama denen bu işlemi kurumunuz güvenlik duvarı yöneticilerinin ayarlaması gerekmektedir. Eğer kurumunuz Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü’nün sunduğu KPS (Kimlik Paylaşım Sistemi) servislerini Apinizer üzerinden kullanmak istiyorsa kurumunuza ait kps bilgileri KPS Ayarı sayfasından yönetim konsoluna girilmelidir.Tebrikler! Buraya kadar başarıyla geldiyseniz Apinizer kurulumu ve ayarları tamamlanmış demektir.

