AWS – Application Load Balancer

Şimdi bu yazıda basitçe bir VPC ağ oluşturup bu ağ içerisinde EC2 sunucularımı ALB(Application Load Balancer) arkasına almayı göstereceğim.

Kuracağımız network mimarisi bu şekilde olacak.

  • 10.10.0.0/16 networkünde VPC ağımız olacak.
  • VPC’e bir adet Internet Gateway ekleyeceğiz ki VPC içerisindeki public subnetler internete çıkabilsin.
  • 2 Public Subnet ve 2 Private Subnet olarak böleceğiz.
  • Public Subnetler üzerinde Applicaton Load Balancer bulunacak. Bu load balancer’ın internete çıkması için IGW ihtiyacı olduğundan VPC’e IGW ekledik.
  • Private subnetlerde ise EC2 sunucularımız olacak.

Şimdi mimarideki kavramları detaylıca açıklayalım.

VPC (Virtual Private Cloud)

CIDR: 10.10.0.0/16

  • AWS üzerinde sana ait izole bir ağ ortamı
  • Tüm subnet’ler, EC2’ler ve gateway’ler bu VPC’nin içinde

• /16 blok → ileride subnet genişletmeye uygun

Internet Gateway (IGW)

Amaç: VPC’yi internete bağlamak

  • VPC’ye attach edilir
  • Public subnet içindeki kaynakların internete erişmesini sağlar

• ALB’nin dış dünyadan erişilebilir olmasının temel nedeni

Public Subnet’ler

  • 10.10.1.0/24
  • 10.10.2.0/24

Ne barındırır?

  • Application Load Balancer (ALB)

Özellikleri

  • Route Table → 0.0.0.0/0 → Internet Gateway
  • Public IP alabilen kaynaklar burada bulunur

• Multi-AZ (yüksek erişilebilirlik)

Application Load Balancer (ALB)

Görev:
Gelen HTTP/HTTPS trafiğini arka taraftaki uygulama sunucularına dağıtmak

Neden Public?

  • Kullanıcılar internette olduğu için

Yaptıkları

  • Health check
  • Load balancing
  • Path-based / host-based routing

Target Group

ALB → EC2 bağlantı noktası

  • ALB direkt EC2’ye değil Target Group’a trafik gönderir
  • Target Group:
    • Protokol (HTTP/HTTPS)
    • Port (80, 443, 8080 vb.)

• Health check ayarlarını içerir

Private Subnet’ler

  • 10.10.3.0/24
  • 10.10.4.0/24

Ne var?

  • EC2 Application Server’lar

Neden Private?

  • Güvenlik
  • EC2’ler doğrudan internetten erişilemez

• Sadece ALB’den trafik alırlar

EC2 Instance’lar

Rol:
Uygulamayı çalıştıran backend sunucular

  • Web API
  • Backend servis
  • Mikroservis

Erişim

  • Sadece ALB üzerinden
  • Security Group ile kısıtlı

Kısacası birden fazla AZ ile yüksek erişilebilirlik sağlayacağız ki AWS’de bunu önerir o yüzden her bir subnetimiz farklı AZ’lerde çalışır. EC2’ler yani backend servislerimizi barındıran sunucular doğrudan internete açık değildir. Trafik önce ALB’e gelir ALB ise target group mantığına göre trafiği ilgili private subnetlerdeki EC2’lere yönlendirir.

Şimdi VPC ve subnetlerimizi oluşturalım.

2 farklı Available Zone, 2 Public Subnet, 2 private subnet oluşturduk. Burada VPC and more seçeneğini seçerek VPC’nin yanında ihtiyacımız olan diğer yapıları da oluşturmasını sağlıyoruz. Route table, IGW, Subnetler hepsini bizim için oluşturuyor. AZ, Subnet sayılarını ve CIDR aralıklarını da belirleyerek görseldeki yapıyı birebir oluşturmuş olduk.

Şimdi bu VPC içerisine EC2 instance ekleyelim 2 adet.

Şimdi durum şu benim EC2 sunucularım private subnette olacağından internete erişimleri olamayacak. Yani ben bu sunuculara mevcutta paket indiremeyeceğim. Bu sorunu aşmak için daha önceki konularımda NAT gatewayden bahsetmiştim internetten trafik alamasalarda NAT aracılığı ile internete erişebilirlerdi. Ancak ben bu senaryoda farklı bir yaklaşım izleyeceğim NAT gateway kullanmayacağım. Sunucularıma paket indirmek için custom amazon machine image oluşturup kullanacağım. Bunun için test amaçlı bir EC2 instance kuracağım.

#!/bin/bash

# Update all packages to the latest version
yum update -y

# Install Apache HTTP server package
yum install httpd -y

# Start the Apache HTTP server service immediately
systemctl start httpd.service

# Enable the Apache service to start automatically on boot
systemctl enable httpd.service

# Create a basic web page and write it to the default website directory
echo "<h1>This is Webserver 1</h1>" > /var/www/html/index.html

# Create a subdirectory called 'server1' under the web server root
mkdir /var/www/html/server1

# Create another web page inside the 'server1' directory
echo "<h1>Hi from Server 1</h1>" > /var/www/html/server1/index.html

Burada user data script şunu yapar sunucuyu kurduktan sonra verdiğimiz komutları çalıştırır yani bizim sunucuya bağlanıp bu adımları yapmamıza gerek kalmaz. Burada basitçe httpd server oluşturup ilgili www dizininde server1 olarak dizin oluşturacak.

Şimdi bu örneklerden şablon olışturacağız.

Instance settings – image and templates – create image

Imagelar oluştuktan sonra artık ec2 instancelerarını silebiliriz.

Peki amacım nedir? neden 2 adet farklı içerik sunan EC2 oluşturdum?

Burada amacım tamamen load balancerın gelen trafiği 2 farklı sunucu arasında paylaştırdığını görebilmek o yüzden bunu yaptım. Yoksa gerçek hayatta 2 sunucuda birebir birbirlerinin kopyası olmalılar içerikleri farklı olmamalı. Yani istekler 2 sunucu arasında paylaşılıyor mu bunu anlayacağım.

AMI almanın amacı:

  • Aynı konfigürasyonu tekrar tekrar kullanmak
  • Auto Scaling için hazır olmak
  • Manual kurulumdan kurtulmak
  • Demo / lab ortamını tek tıkla ayağa kaldırmak

Ne yaptım?

Custom AMI’dan (Server 1) oluşturdum. Private subnet 1 içerisine yerleştirdim. Bu şekilde bir EC2 instance oluşturdum. Aynı mantıkla diğer bir private subnet üzerinde de server 2 AMI’dan kopyalayacağım server2 ec2 makinasını oluşturacağım.

Örnek olarak bir tane server’ı incelersek public ip adresleri yok çünkü atamadık bunlar private da çalışacak.

Şimdi target group ve ardından load balancer oluşturalım.

Burası kritik! 2 instance’ım seçip include ediyorum.

Target Group, Load Balancer’ın trafiği gönderdiği mantıksal backend grubudur.

ALB EC2’ye değil, Target Group’a trafik gönderir.

Target Group:

  • EC2’leri sürekli health check eder
  • Sağlıklı olanlara trafik gönderir
  • Sağlıksız olanları otomatik çıkarır

Şimdi Application Load Balancer oluşturalım.

VPC’min public subnetlerine ekliyorum 2 farklı AZ’de çalışacak.

Oluşturmuş olduğumuz target group’u seçiyorum.

Bir tane de security group oluşturdum outbound rules’da http 80 tanımladım ve bunu da load balancer’ın security group’u olarak seçtim.

Bu oluşturulan alg-sg security grup ayarını ec2 security group’a şu şekilde ekleyelim. Yani 80 portu ALG-SG’e yönlenecek bu da load balancer’ı gösteriyor.

Şimdi bu DNS name’i kullanarak testimizi yapalım.

Bu şekilde round robin algoritması ile gelen istekleri sıralı biçimde sunuculara yönlendirir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir