İçeriğin ilk bölümlerimde, en baştan başlayarak adım adım; AKS kurulumu, kaynaklarının oluşturulması, kullanılması ve harici MongoDb ile ElasticSearch sunucusu adımları anlatılmaktadır.

Eğer AKS üzerinde hazır bir küme (cluster) varsa doğrudan 5. adım olan AKS'ye Apinizer'ın Kurulumu bölümünden başlanılabilir.

1. Giriş

Microsoft AKS (Azure Kubernetes Service) Nedir?

Azure, mevcut uygulamaları barındırarak yeni uygulama geliştirme süreçlerini kolaylaştıran eksiksiz bir bulut platformudur.

Azure Kubernetes Service (AKS), kapsayıcılı uygulamaları çalıştırmak için önceden yapılandırılmış bir sanal makine kümesi oluşturma, yapılandırmayı ve yönetmeyi sağlar.

Bir AKS kümesini dağıttığınızda Master node'lar ve diğer tüm kubernetes node'ları sizin yerinize dağıtılır ve yapılandırılır. 

2. AKS, AKS CLI ve kubectl Kurma ve Yapılandırma

AKS Cluster Kurulumu

Azure kullanım kolaylığını hedef alan bir yapı içerdiğinden, eğer özel bir ayar istenmiyorsa varsayılan ayarlarla ilerleyerek rahatlıkla kurulum yapılabilir.


Kubernetes cluster oluşturmak için aşağı görselde seçili olan linkler sırasıyla tıklanır.


Oluşturalan kümeye (cluster) verilecek isim mevcut bir seçim yoksa yeni bir kaynak grubu (Resource group) oluşturulabilir.

Kubernetes versiyonu olarak 1.18 veya 1.20 ana (major) tipi seçilebilir.


Node Havuzu Ekleme

Node Havuzu (Node Pool), küme içindeki node'larla ilgili ayarları içerir.

Mevcut bir node tanımı seçebilir ya da yeni bir tanım oluşturulabilir.


Node havuzuna verilecek isim ile birlikte seçilebilecek ayarları içeren ekran görüntüsü aşağıdadır:


Kimlik Doğrulama Ayarları

Kimlik Doğrulama (Authentication) kısmında, kümenizi nasıl kısıtlamak istediğinizi ayarlayabilirsiniz.


Ağ Oluşturma Ayarları

Ağ Oluşturma (Networking) sekmesi, ağ ayarlarını Kubenet'e mi Azure CNI'ya mı bırakacağınız, DNS isminizi hangi taslakta istediğiniz ve erişimle ilgili güvenlik ve ağ ayarlarını içerir.


Entegrasyon Ayarları

Entegrasyon (Integrations) sekmesinde, Azure'un sağladığı bazı faydalı entegresyonlarla ilgili kararlarınız ayarlanır.


Son adımda, yaptığınız ayarlar bir denetim mekanizmasından geçer ve onayınıza sunulur.


İşlemi tamamladığınızda, aşağıdaki gibi bir ekranla karşılaşılır.


Kümenizi oluşturduktan sonra bilgisayarınıza kurulacak AKS CLI ve kubernetes ile ilgili sistem kontrol edilebilir.

3. AKS CLI Kurulumu

Azure CLI, Windows, MacOS ve Linux ortamlarında yüklenebilir. Ayrıca bir Docker kapsayıcısında çalıştırılabilir.

Azure CLI'nin işletim sistemine uygun versiyonu şu adresten indirilerek kurulabilir: https://docs.microsoft.com/tr-tr/cli/azure/install-azure-cli

Sonrasında aşağıdaki komut ve sonrasındaki işlemle birlikte bilgisayarınızdaki istemci hesabınıza bağlanır.


az login
CODE


Adım 1: CLI varsayılan tarayıcınızı açabilir ve bir Azure oturum açma sayfası yükler.

Aksi takdirde, bir tarayıcı sayfası açın ve şu linke gidin: https://aka.ms/devicelogin. Terminalinizde görünen yetkilendirme kodunu girin.

Web tarayıcısı yoksa veya Web tarayıcısı açılamazsa, az Login--Use-Device-Code komutuyla cihaz kod akışını kullanın.

Adım 2: Tarayıcıda hesabınızın kimlik bilgileriyle oturum açın.

Sonrasında Kubernetes komut satırı aracı kubectl'i indirmeli ve yüklenmelidir.


az aks install-cli
CODE


Yönetilen bir Kubernetes kümesi için erişim kimlik bilgileri alınmalıdır.

Varsayılan olarak, kimlik bilgileri .kube/config dosyasında birleştirilir, bu nedenle kubectl bunları kullanabilir.

Yönetilen kümenin adı ve kaynak grubunun adını kullanarak varsayılan grubu yapılandırabilirsiniz


az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
CODE


Erişimin doğru şekilde sağlanıp sağlanmadığı aşağıdaki komutla kontrol edilir.


kubectl get nodes
CODE

4. Cloud MongoDb ve ElasticSearch Kurma ve Ayarlama


Kurulum ve Konfigürasyon dokümanında belirtildiği gibi Replicaset MongoDB ve Elasticsearch'e ihtiyaç vardır. Bunlar herhangi bir sanal sunucuya kurabileceğini gibi cloud olarak da kullanabilir ya da mevcut olarak zaten var ise bir sonraki adıma geçilebilir.


Bu bölümde uygulamaların kendi ortamlarındaki cloud sistemler kullanılmıştır.

  • MongoDB için https://account.mongodb.com/account/register adresine giderek bir hesap oluşturun ve kısıtlı bir DB boyutuna kadar ücretsiz olarak kullanılabilir. Apinizer MongoDB'de sadece konfigürasyon tanımlarını tuttuğu için büyük boyutlu bir veritabanına ihtiyacı yoktur.
  • Elasticsearch için https://cloud.elastic.co/registration adresi üzerinden cloud ortamında bir elastic servisi kullanarak Apinizer tanımlanabilir.

Mongo Cloud Ayarları

MongoDB'nin kendi sitesinden bir hesap oluşturduktan sonra istenilen isimde bir veritabanı oluşturup, bununla ilgili ayarların düzenlenmesi gerekiyor.

Erişim izni için Ağ Erişimi (Network Access) menüsünden Add IP Address butonuna tıklanır.


Ardından istenilen ip'ler ya da aşağı görselde seçili olan Allow Access From Anywhere seçeneği gibi her yerden erişimi açık olacak şekilde alanlar doldurulur.


Mongo connection string alma:

Oluşturulan veri tabanına olan bağlantıyı sağlayacak bağlantı ifadesini (Connection String) almak için Veritabanları (Databases) sayfasında dönüp ve Bağlan (Connect) linkine basılır.

Buradan kendiniz herhangi bir MongoDb veritabanı düzenleyicisine bağlanmak için gerekli bilgiyi alabilir ya da Apinizer uygulamasını bağlamak için Uygulamanızı Bağlayın (Connect your application) tuşuna basılabilir.


Açılan ekranda Sürücü (Driver) olarak Java'yı, Versiyon (Version) olarak da 3.4 veya daha üstü bir seçim yapıldığında ekranın alttında bir yazı belirir.

Bu yazı, daha sonraki bölümlerde apinizer-deployment.yaml dosyasına yazarak Apinizer'ı Mongo'ya bağlayacağınız bağlantı tanımıdır.


5. AKS'ye Apinizer'ın Kurulumu

Bu başlık altında anlatılanlar Apinizer kurulum dokümanlarından farklı olarak Apinizer'ı servis olarak açmanın tanımını anlatmaktadır. 

Apinizer Yönetim Konsolu kurulumu

Apinizer için .yaml dosyası oluşturulup AKS cluster'ına yüklenmelidir.

Örnek bir apinizer-deployment.yaml dosyası ayarları aşağıdadır. 

apiVersion: v1
kind: Namespace
metadata:
  name: apinizer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: manager
  namespace: apinizer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: manager
      version: 'v1'
  template:
    metadata:
      labels:
        app: manager
        version: 'v1'
    spec:
      containers:
        - name: manager
          image: apinizercloud/manager:2023.01.1
          imagePullPolicy: IfNotPresent
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: prod
            - name: SPRING_DATA_MONGODB_DATABASE
              value: apinizerdb-aws
            - name: SPRING_DATA_MONGODB_URI
              value: 'mongodb://apinizer:<PASSWORD>@apinizercluster-shard-00-00.wp2bb.mongodb.net:27017,apinizercluster-shard-00-01.wp2bb.mongodb.net:27017,apinizercluster-shard-00-02.wp2bb.mongodb.net:27017/ApinizerDb?ssl=true&replicaSet=atlas-dvz21z-shard-0&authSource=admin&retryWrites=true&w=majority'
            - name: JAVA_OPTS
              value: ' -Xmx1400m -Xms1400m'
          resources:
            requests:
              memory: '2Gi'
              cpu: '1'
            limits:
              memory: '2Gi'
              cpu: '1'
          ports:
            - name: http
              containerPort: 8080
CODE


kubectl apply -f D:\apinizer\AKS\apinizer-deployment.yaml
 namespace/apinizer created
 deployment.apps/manager created


kubectl get pods -n apinizer
 NAME                       READY   STATUS    RESTARTS   AGE
 manager-646fcdd894-ktt97   1/1     Running   1          42s
POWERSHELL

Apinizer Yönetim Konsolu AKS ortamına yüklendikten sonra, MongoDB veritabanına apinizerdb isminde bir veritabanı oluşacaktır. general_settings tablosuna Apinizer tarafından size verilen lisans anahtarı girilmelidir.

Apinizer Yönetim Konsolu üzerinden Kubernetes kaynaklarına erişim ve yönetim için aşağıdaki izinlerin tanımlanması yapılmalıdır.


Örnek bir service.yaml dosyası ayarları aşağıdadır. 

apiVersion: v1
kind: Namespace
metadata:
  name: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
YML


Örnek bir adminuser.yaml dosyası ayarları aşağıdadır. 

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
YML
kubectl apply -f D:\apinizer\AKS\service.yaml

kubectl apply -f D:\apinizer\AKS\adminuser.yaml

kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts

kubectl create clusterrolebinding apinizer -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:apinizer
POWERSHELL

Apinizer Yönetim Konsolu için Erişim Servisi Oluşturma

Kurulum tamamlandıktan sonra Apinizer Yönetim Konsolu'na erişim için bir servis gerekmektedir.

Aşağıdaki adımlar takip edilerek bir servis oluşturulur.

Dış IP alımında bazen bir iki dakika geçmesi gerekebilir.


kubectl expose -n apinizer deployment.apps/manager --port=80 --target-port=8080 --name=apinizer-console-service --type=LoadBalancer
 service/apinizer-console-service exposed

kubectl get svc -n apinizer
 NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
 apinizer-console-service   LoadBalancer   10.100.98.34    20.10.30.40   80:31234/TCP   47s
POWERSHELL


6. Apinizer Yönetim Konsolu Giriş

Adım 2'deki servis erişim adresini, tarayıcının adres çubuğuna yazarak giriş yapılır.

Default kullanıcı adı şifre için Apinizer destek ekibine ulaşabilirsiniz.

Bu ayarlara göre oluşan Apinizer Yönetim Konsolu Adresi: http://20.10.30.40/


7. Apinizer Konfigurasyonları

Log Sunucularının Tanımlanması

Apinizer, API trafiğini ve metrik bilgilerini, Elasticsearch veri tabanında tutar. Kurulum işlemine devam edebilmek için Elasticsearch cluster tanımlarının yapılması gerekmektedir.

Apinizer Yönetim Konsolu uygulamasında menüden Administration → Server Management → Elasticsearch Kümeleri sayfasına gidilir.

Elasticsearch cluster tanımlama ayarlarını içeren görsele aşağıda yer verilmiştir:


Elasticsearch sunucu bağlantısını, Apinizer ile test etmek için Test Connection butonu kullanılabilir.


Ortam (Environment) Tanımlama

Bir API Proxy'nin erişilebilir olması için en az bir ortamın yüklenmesi (deploy) gerekmektedir. Apinizer, bir API Proxy'nin birden fazla ortama yüklenmesine de izin verir.

Apinizer Yönetim Konsolu uygulamasında menüden Administration → Server Management → Gateway Environment sayfasına gidilir.

Ortam tanımlama ayarlarını içeren görsele aşağıda yer verilmiştir:


Aşağıdaki değerler sunucuların varsayılan değerleridir. Cluster kaynaklarınıza uygun olarak değiştirebilir.


Create Environment butonuna tıklanarak ortam tanımlama işlemi tamamlanır.


Ortamların listelendiğinde ekranda ilgili ortamın durumunu gösteren Unpublished butonuna tıklanarak Prod tipindeki ortam AKS'ye deploy edilmektedir.


Ortamı yükleme işlemi tahminen 3 dakika içinde AKS'ya yüklenmiş olacaktır. 


Ortam tanımlama ve yayın işlemleri ile ilgili detaylı bilgi almak için tıklayınız.

Ortamı (Environment) Servis Olarak Açma

Son olarak yayınladığımız ortamda çalışacak API'lere erişmek için bir servis oluşturulması gerekiyor.

kubectl expose -n prod deployment.apps/worker --port=80 --target-port=8091 --name=apinizer-worker-service --type=LoadBalancer
 service/apinizer-worker-service exposed

kubectl get svc -n prod
 NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP		PORT(S)          AGE
 apinizer-worker-service   LoadBalancer   10.100.210.107   20.10.30.50		80:31544/TCP     54s
POWERSHELL


AKS tarafından üretilen LoadBalancer (EXTERNAL-IP) değerini, tanımlanan Prod ortamının Access URL değeri olarak atanmalıdır.

İlk olarak, ortamın düzenlendiği sayfanın Environment Info tablosundaki düzenleme butonuna tıklanır.  

 


Sonrasında edit tuşuna tıklanarak ortamın Access URL bilgisi değiştirilir.


8. Apinizer'da İlk API'yi Yayınlama ve Test Etme

En son adımda örnek bir API tanım dosyası üzerinden Apinizer'a bir API'yi API Proxy olarak açılması anlatılmaktadır. 

API Proxy'nin kayıt edileceği proje, navbar menüsünden seçilir.


API Proxy'nin kayıt edileceği proje, navbar menüsünden seçilir.

Apinizer Yönetim Konsolu uygulamasındaki proje menüsündenden Development → API Proxies sayfasına gidilir.

Yeni API Proxy tanımlamak için Proxy butonuna tıklanır. 


Aşağıdaki görselde seçili link ile API Proxy'nin nereden oluşturulacağı kaynağı seçilir.


API Tanım dosyasının linki girilerek Parse edilir.


API Proxy bilgileri girilerek Save butonuna tıklanır.


API Proxy'yi yüklemek (deploy) için aşağıdaki görselde seçili olan Deploy butonu kullanılır.


Yükleme işlemi onaylanır.


API Proxy'nin Develop tabından test edilmek istenen uç noktaya (endpoint) gelip, Test Endpoint butonuna tıklanır.


Test etme dialogunu içeren görsele aşağıda verilmiştir.


API Proxy ile ilgili detaylı bilgi için Geliştirici Kılavuzuna (Developer Guide) bakınız.

Test Konsoluyla ilgili detaylı bilgi almak için tıklayınız.