Ana içeriğe atla
Bu dokümanda, Amazon EKS (Elastic Kubernetes Service) üzerinde Apinizer kurulumu için gerekli adımlar anlatılmaktadır. İlk 6 bölümde, en baştan başlayarak adım adım AWS EKS kurulumu, kaynaklarının oluşturulması ve kullanılması adımları anlatılmaktadır. Eğer AWS üzerinde hazır bir EKS cluster’ı varsa doğrudan 7. bölümden başlanılabilir.

1. Giriş

Minimum Sistem Gereksinimi

AWS EKS Cluster’a Apinizer kurulumu için, Node Group içinde tanımlanacak Compute Node’ların toplam CPU Core’ları en az 6 core olmalıdır.

t3.medium Örneği

t3.medium tipinde sunucu seçildiyse 3 tane olması gerekir.

t3.xlarge Örneği

t3.xlarge tipinde sunucu eklerseniz 2 tane yeterli olacaktır.

AWS EKS (Elastic Kubernetes Service) Nedir?

Amazon Elastic Kubernetes Service (Amazon EKS), kendi Kubernetes Control Plane (Master) veya node’larınızı (Worker Nodes) kurmanıza, çalıştırmanıza ve bakımını yapmanıza gerek kalmadan Kubernetes’i AWS’de çalıştırmak için kullanabileceğiniz yönetilen bir hizmettir. Kubernetes, kapsayıcılı uygulamaların dağıtımını, ölçeklenmesini ve yönetimini otomatikleştirmek için açık kaynaklı bir sistemdir.
Amazon EKS Overview

2. EKS VPC ve Subnetleri Yapılandırın

AWS VPC ve Subnet Nedir?

Amazon AWS VPC (Virtual Private Cloud), AWS içinde yer alan bir özel bir sanal ağdır. Başka bir ifade ile, AWS’in network alt yapı bileşeni denilebilir. AWS üzerinde oluşturulacak tüm bileşenlerin birbirleri ile iletişim sağlamaları için Amazon AWS tarafından geliştirilmiş gelişmiş bir sanal ağ altyapısıdır. VPC içinde kendi kullanımımıza özel network’ler, subnetler, gateway’ler oluşturabilir. Bunlara ait Route tabloları ile kullanım farklı network’ler ve subnet aralarındaki bağlantılar sağlanabilir.
VPC Topology
VPC Subnet: AWS üzerinde belirli bir network oluşturduktan sonra bu network’e ait alt ağlar oluşturulabilir. Aşağıdaki adımları takip ederek AWS VPC üzerinde subnet oluşturulabilir.
VPC Subnets
EKS için VPC ve Subnet’lerin doğru ayarlanması ve AWS dokümanında belirtildiği gibi subnetlerin tanımlanması gerekmektedir. Eğer, VPC ve subnet tanımlanmasını bilmiyorsanız AWS’nin hazır template’ini kullanabilirsiniz. Detaylar için: AWS EKS VPC Dokümantasyonu

AWS VPC Oluşturma ve Yapılandırma

Aşağıdaki adımları takip ettiğinizde EKS için uygun olan network yapısı otomatik olarak kurulacaktır. Detaylar için: AWS CloudFormation Console
AWS CloudFormation Console

3. EKS IAM Rolleri Yapılandırma

AWS Identity and Access Management (IAM) Role Nedir?

AWS Identity and Access Management’ı (IAM) kullanarak, AWS hizmetlerine ve kaynaklarına kimlerin hangi koşullarda erişebileceğini belirleyebilirsiniz. IAM, AWS hesabınızın bir özelliğidir ve ek ücret olmadan sunulur. IAM yapısı itibariyle bir instance, bir veri tabanı gibi çalışan bir şey değil tamamıyla yetkileri bizler için yöneten kimin hangi servise ne tür bir şekilde erişebileceğinden, kullanılan AWS hesabına erişimi olan bütün kullanıcıları yönetebilmektedir. IAM ana konsept itibariyle 6 ana başlığı kendi içerisinde yönetmektedir:
  • Kullanıcılar
  • Gruplar
  • Roller
  • IAM Access Policies
  • API Keys
  • Password policy, MFA
IAM Overview
Detaylı bilgi için: AWS IAM Nedir?

AWS IAM Oluşturma ve Yapılandırma

Sol menüden Roles sayfasına giderek yeni Role oluşturulur.
IAM Roles Sayfası
Bu bölümde iki adet Role oluşturmamız gerekiyor. Birincisi, EKS cluster için kullanılacak olan Role, ikincisi ise EKS içindeki Worker Node Group’ların kullanacağı Role bilgisidir.

1. EKS Cluster’ın Kullanacağı Rolü Oluşturma

Rol oluşturmak için sırasıyla verilen görsellerdeki işlemler gerçekleştirilmelidir.
IAM Roles
Create Role
EKS Service
Permissions
Gelen sayfada herhangi bir key-value bilgisi girmeden devam edilir.
Review
EKS Cluster’ın kullanacağı IAM rolü oluşturulmalıdır. Bu rol, EKS cluster’ının AWS servislerine erişmesi için gerekli izinleri içermelidir.

2. EKS Cluster Worker Node Group’ların Kullanacağı Rolü Oluşturma

Worker Node Role
Worker Policies
Bu Role için aşağıdaki Policy’ler seçilmelidir.
Worker Policies Alt
Worker Node Group’ların kullanacağı IAM rolü oluşturulmalıdır. Bu rol, worker node’ların AWS servislerine (EC2, EBS, ELB vb.) erişmesi için gerekli izinleri içermelidir.

4. EKS Master Node Kurulumu

AWS EKS (Elastic Kubernetes Service) Oluşturma ve Yapılandırma

Yukarıdaki adımları tamamladıktan sonra, AWS EKS kurulumuna başlanılabilir. Arama bölümüne EKS yazarak sürece devam edilir.
EKS Search
EKS Create
Cluster adını, kullanmak istediğimiz kubernetes versiyonunu ve daha önce oluşturmuş olduğumuz IAM rolü seçilir.
1

Kümeyi yapılandırma

Cluster adı, Kubernetes versiyonu ve IAM rolü seçilir.
Cluster Config
2

Ağ iletişimini belirtme

VPC ve subnet’ler seçilir. EKS için en az 2 subnet seçilmesi önerilir.
Subnet
Network
Security Group
3

Günlüğe kaydetmeyi yapılandırma

CloudWatch Log Group seçilir veya yeni bir log group oluşturulur. Bu bölüm, isteğe uygun şekilde yapılandırılabilir.
Logging
4

İncele ve oluştur

Son olarak tanımlanan bilgilerin görülmektedir. Bu aşamada bir yanlışlık görülmemektedir. Create diyerek cluster oluşturmaya başlanır.
Creating
Review
EKS Cluster’ı oluşturmaktadır. Bu işlem tahmini 5 dakika sürüyor. Bu işlem devam ederken, Client bilgisayarımızdan EKS’ya erişip yönetebilmemiz gerekli araçlarını indirerek yapılandırabilinir.

5. AWS CLI ve kubectl’i Kurma ve Yapılandırma

Aşağıdaki adreslerden gerekli olan araçları indirin. Bu dökümanda Client bilgisayar olarak Windows kullanılacağı için Windows’a uygun olan versiyonlar indirilmektedir.

AWS CLI Kurulumu

İndirilen .msi uzantılı aracı kurduktan sonra, aşağıdaki gibi Cluster bilgilerinize uygun olarak yapılandırılır. Detaylar için: AWS CLI Getting Started Guide
1

IAM service'e giderek Credential bilgilerini alma

IAM Console’dan Access Key ve Secret Key bilgileri alınır.
IAM User
Gelen ekrandan Manage access keys butonuna tıklayarak Access bilgilerine gidilir.
Manage Access Keys
Access Key Dialog
Aşağıdaki gelen pencerede Access Key ve Secret bilgileri görülür. Pencereyi kapatmadan önce bu bilgiler bir yere kayıt edilmelidir.
Access Key Secret
2

Windows CLI'da AWS konfigürasyonu yapma

aws configure
Burada daha önce kayıt edilen Access Key ve Secret bilgilerini girerek yapılandırma işlemi başlatılır.
AWS CLI Access Key

KUBECTL Kurulumu

Kubectl, cluster versiyonu ile aynı olacak şekilde indirilmelidir. Detaylar için: AWS EKS kubectl Installation Guide
1

KUBECTL'i indirme

Kubectl Windows için indirilir ve PATH’e eklenir.
2

Windows client makinesinde EKS Cluster'a bağlanmak için gerekli bilgileri tanımlama

# Örnek Yapılandırma Komutu
aws eks update-kubeconfig --region [EKS_Region] --name [EKS_Cluster_Name]
Burada region bilgisi, aşağıdaki resimde görüldüğü gibi üst menüden alınabilir. Aynı şekilde cluster ismi EKS sayfasına giderek alınabilir.
Bize gerekli olan eu-central-1 olan bölümdür.
AWS Region
EKS Cluster Name
Cluster durumunu kontrol etmek için:
aws eks --region eu-central-1 describe-cluster --name apinizer-eks-cluster1 --query cluster.status
Eğer birden fazla cluster yönetiliyorsa aşağıdaki gibi kubeconfig bilgisini güncellenmelidir:
aws eks --region eu-central-1 update-kubeconfig --name apinizer-eks-cluster2

6. EKS Worker Node’ları Oluşturma

Bu bölümde, EKS için Worker Node’ların oluşturulması anlatılmaktadır. Tekrardan AWS Console’a giderek aşağıdaki adımlar uygulanmalıdır.
1

Node Group Oluşturma

EKS Console’dan “Add Node Group” seçeneği ile yeni bir node group oluşturulur.
Node Group Create
2

Node Group Yapılandırma

Node group için:
  • Node group adı
  • IAM rolü (daha önce oluşturulan worker node rolü)
  • Instance type (örn: t3.medium, t3.xlarge)
  • Disk boyutu
seçilir.
Node Group Config
Node Group Config Alt
3

Hesaplama ve Ölçeklendirme Yapılandırmasını Ayarlama

Node group için minimum, maksimum ve desired node sayıları belirlenir.
Node Group Scaling
Node Group Scaling Alt
4

Ağ İletişimini Belirtme

Subnet’ler seçilir ve SSH key pair belirlenir.
Node Group Network
5

İncele ve Oluştur

Son olarak tanımlanan bilgilerin görülmektedir. Bu aşamada bir yanlışlık görülmüyorsa Create diyerek cluster oluşturmaya başlanır.
Node Group Review
Node Group Creating
Bu işlem tahmini olarak 5 dakika sürmektedir. Kurulum tamamlanıp aktifleştirildikten sonra daha önce yapılandırılan kubectl ile deployment vs. işleri yapabilir. Node Group kurulumu tamamlandığını gösteren görsel aşağıdadır:
Node Group Ready Alt
Node Group Ready

7. EKS Kurulumu Test ve Örnek Deployment

Bu aşamadan, daha önce kurulumunu ve tanımlamalarını yapılan kubectl ile kubernetes cluster’ı kontrol edip ve örnek bir nginx uygulaması ile test edilmesi anlatılmaktadır.

AWS EKS Ortam Test

Aşağıdaki komutları takip ederek kubernetes cluster kaynakları kontrol edilmelidir.
aws eks --region eu-central-1 describe-cluster --name apinizer-eks-cluster --query cluster.status
aws eks --region eu-central-1 update-kubeconfig --name apinizer-eks-cluster
kubectl get nodes
AWS CLI Configure

Örnek Uygulama Yükleme ve Test Etme

Bu bölümde, örnek olarak aşağıdaki .yaml dosyasında tanımlanmış olan Nginx uygulaması, kubernetes cluster’ına yüklenmesi anlatılmaktadır ve expose edildikten sonra test edilmektedir.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 4
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
kubectl apply -f nginx.yaml
kubectl get pods
Uygulama, kubernetes cluster’a başarılı olarak yüklendiği görülmektedir. Aşağıdaki komut ile uygulamayı servis olarak açın:
kubectl expose deployment/my-nginx --port=80 --target-port=80 --name=my-nginx-service --type=LoadBalancer
kubectl get svc
Test için:
curl -k <EXTERNAL-IP>

8. EKS’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 AWS EKS cluster’ına yüklenmelidir. Kurulum ve Konfigürasyon dokümanına belirtildiği gibi Replicaset MongoDB ve Elasticsearch’e ihtiyaç vardır.
  • MongoDB için MongoDB Atlas 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.
  • Benzer şekilde Elasticsearch içinde Elastic Cloud adresine giderek cloud ortamında bir elastic servisi kullanarak Apinizer tanımlanabilir.
Ya da AWS’de bir EC2 sunucusuna Replicaset MongoDB ve Elasticsearch kurulumu yaparak tanımlanabilir. Ö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: 'YOUR_MONGODB_URL'
        - name: JAVA_OPTS
          value: ' -Xmx1400m -Xms1400m'
        resources:
          requests:
            memory: '2Gi'
            cpu: '1'
          limits:
            memory: '2Gi'
            cpu: '1'
        ports:
        - name: http
          containerPort: 8080
kubectl apply -f apinizer-deployment.yaml
kubectl get pods -n apinizer
Apinizer Yönetim Konsolu EKS 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
Ö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
kubectl apply -f service.yaml
kubectl apply -f 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

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 ederek 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
kubectl get svc -n apinizer
Service oluşturulduktan sonra, EXTERNAL-IP adresinden Apinizer Yönetim Konsolu’na erişilebilir.

Apinizer Yönetim Konsolu Giriş

Adım 2’deki servis erişim adresi, tarayıcının adres çubuğuna yazılarak giriş yapılır. Default kullanıcı adı şifre için Apinizer destek ekibine ulaşabilirsiniz.
Apinizer Console Login

9. 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 Cluster
Elasticsearch sunucu bağlantısını, Apinizer ile test etmek için Test Connection butonu kullanılabilir.
Elasticsearch Test

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:
Gateway Environment
Aşağıdaki değerler sunucuların varsayılan değerleridir. Cluster kaynaklarınıza uygun olarak değiştirilebilir.
Environment Config
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 ve sonrasında Publish butonuna tıklanarak Prod tipindeki ortam EKS’ye deploy edilmektedir.
Environment Publish
Ortamı yükleme işlemi tahminen 3 dakika içinde EKS’ya yüklenmiş olacaktır.
Gateway Runtime ortamı tanımlama ve yayın işlemleri ile ilgili detaylı bilgi almak için Gateway Runtime’ları sayfasına bakı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
kubectl get svc -n prod
AWS 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.
Environment Edit
Sonrasında edit tuşuna tıklanarak ortamın Access URL bilgisi değiştirilir.
Environment Access URL

10. 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 Project
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.
Add Proxy
Aşağıdaki görselde seçili link ile API Proxy’nin nereden oluşturulacağı kaynağı seçilir.
API Source
API Tanım dosyasının linki girilerek Parse edilir.
API Parse
API Proxy bilgileri girilerek Save butonuna tıklanır.
API Save
API Proxy’yi yüklemek (deploy) için aşağıdaki görselde seçili olan Deploy butonu kullanılır.
API Deploy
Yükleme işlemi onaylanır.
API Deploy Confirm
API Proxy’nin Develop tabından test edilmek istenen uç noktaya (endpoint) gelip, Test Endpoint butonuna tıklanır.
API Test Endpoint
Test etme diyaloğunu içeren görsele aşağıda verilmiştir.
API Test Dialog
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 Test Console sayfasına bakınız.