Skip to content

Latest commit

 

History

History
executable file
·
280 lines (219 loc) · 9.14 KB

7.External-LB.md

File metadata and controls

executable file
·
280 lines (219 loc) · 9.14 KB

Harici Yük Dengeleyici Kurulumu

Burada kurduğumuz load balancer (yük dengeleyici) kurma amacımız contoller olan sunuculara tek bir noktadan erişebilmek ve çalışmayan conroller sunucularına istek göndermemek. Ancak burada da load balancer'ımızı high available yapmamız gerekiyor. Bu nedenle keepalived'ı kuruyoruz.

Load balancer'lar için VIP adresimiz : 10.240.10.10

lxc kullanalar için ssh kullanmadan giriş yapmak isterseniz aşağıdaki komutu kullanabilirsiniz.

lxc exec lb-01 bash # lb-01 makinasına giriş yapmış oluruz.

İki load balancer makinamıza da (lb-01, lb-02) Haproxy ve Keepalived'ı kuruyoruz.

apt install keepalived
apt install haproxy

Daha sonra iki load balancer makinamızda da Haproxy konfigürasyon dosyasının yedeğini alıyoruz.

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy_backup.cfg

vim /etc/haproxy/haproxy.cfg

Aşağıdaki konfigürasyonun tamamını haproxy.cfg dosyasına kopyalıyoruz.

global
    log /dev/log  local0 warning
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

   stats socket /var/lib/haproxy/stats

defaults
  log global
  option  httplog
  option  dontlognull
        timeout connect 5000
        timeout client 50000
        timeout server 50000

frontend kube-apiserver
  bind *:6443
  mode tcp
  option tcplog
  default_backend kube-apiserver

backend kube-apiserver
    mode tcp
    option tcplog
    option tcp-check
    balance roundrobin
    default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
    server kube-apiserver-1 10.240.10.4:6443 check 
    server kube-apiserver-2 10.240.10.5:6443 check 
    server kube-apiserver-3 10.240.10.6:6443 check 

Dosyayı kaydediyoruz ardından servisi restart ediyoruz ve enable yapıyoruz.

systemctl restart haproxy
systemctl enable haproxy

UYARI: Eğer restart ederken hata alırsanız, büyük ihtimalle syntax hatası vardır. config dosyanızı doğrulama ve hataları görmek için aşağıdaki kodu çalıştırınız.

haproxy -c -V -f /etc/haproxy/haproxy.cfg

Daha sonra lb-01 keepalived konfigürasyon dosyasını aşağdaki gibi oluşturuyoruz.

vim /etc/keepalived/keepalived.conf

conf dosyası içeriğini kopyalıyoruz ve kaydediyoruz.

global_defs {
  notification_email {
  }
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
   
vrrp_script chk_haproxy {
  script "kill -0 haproxy"
  interval 2
  weight 2
}
   
vrrp_instance haproxy-vip {
  state MASTER  # lb-01 in master olduğunu belirtiyoruz
  priority 101  # bu makinadaki konfigürasyonun ağırlığını belirtir. 
  #lb-02 de bu değer 100 olacak. Yani büyük rakan daha ağır basıyor. 
  
  interface eth0    # makina üzerindeki network kartımız
  virtual_router_id 60
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  unicast_src_ip 10.240.10.2 # lb-01 ın ip adresi.
  unicast_peer {
    10.240.10.3   # peer yapılan lb-02 makinasının ip adresi
  }
   
  virtual_ipaddress {
    10.240.10.10/24 dev eth0  # ortak kullanılacak virtual ip (floating ip)
  }
   
  track_script {
    chk_haproxy
  }
}

lb-02 deki keepalived konfigürasyon dosyamız da aşağıdaki gibi olacak. Dikkat edilirse 4 yerde lb-01 ile farklılık gösterdiği görülecektir.

  • unicast_src_ip
  • unicast_peer
  • state
  • priority

Özellikle priority değeri çok önemli. lb-01 makinasının ağırlığı haproxy servisi çalıştığı sürece weight+priority=102 olacak hesaplanacaktır. Eğer haproxy servisi cevap vermezse 100 olarak hesaplanacaktır. Bu durumda lb-02 makinasının toplam ağırlığı lb-01 deki haproxy servisi çalıştığında lb-01'İn toplam ağırlığından küçük, çalışmadığında ise büyük olmalıdır. Bu nedenle aşağıda görüleceği üzere lb-02'de priority değerini 100 olarak girdik.

lb-02 keepalived konfigürasyon dosyasını da lb-01 de olduğu gibi kopyalıyoruz.

global_defs {
  notification_email {
  }
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
   
vrrp_script chk_haproxy {
  script "kill -0 haproxy"
  interval 2
  weight 2
}
   
vrrp_instance haproxy-vip {
  state BACKUP  # lb-02 in backup olduğunu belirtiyoruz
  priority 100  # bu makinadaki konfigürasyonun ağırlığını belirtir. 
  #lb-01 de bu değer 200 dü olacak. Yani büyük rakam daha ağır basıyor. 
  
  interface eth0    # makina üzerindeki network kartımız
  virtual_router_id 60
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  unicast_src_ip 10.240.10.3 # lb-02 ın ip adresi.
  unicast_peer {
    10.240.10.2   # peer yapılan lb-01 makinasının ip adresi
  }
   
  virtual_ipaddress {
    10.240.10.10/24 dev eth0  # ortak kullanılacak virtual ip (floating ip)
  }
   
  track_script {
    chk_haproxy
  }
}

Daha sonra her iki sunucuda da (lb-01, lb-02) keepalived servisini restart ediyoruz ve ardından enabled yapıyoruz.

systemctl restart keepalived
systemctl enable haproxy

Şimdi High Availability kurgumuzu doğrulayalım.Öncelikle ip ayarlarımızı kontrol ediyoruz.

UYARI: lb-01 makinası için ip ayarlarını kontrol ettiğimizde keepalived'ın VIP ayarını doğru yaptığını eth0 üzerinde 10.240.10.10 ipsinin tanımlandığını görebiliriz. lb-02 makinasında aynı komutu çalıştırdığınızda tek ip'nin olduğunu görebilirsiniz.

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:fa:b0:11 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.240.10.2/24 brd 10.240.10.255 scope global dynamic eth0
       valid_lft 2764sec preferred_lft 2764sec
    inet 10.240.10.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fefa:b011/64 scope link 
       valid_lft forever preferred_lft forever

lb-01 makinasında Haproxy servisini stop ettiğimizde 10.240.10.10 ipsinin lb-02 makinasına geçtiğini görmemiz gerekiyor.

lb-01 üzerinde haproxy yi stop ediyoruz.

systemctl stop haproxy

lb-02 makinasında kontrol ediyoruz.

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
21: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:c3:f2:6d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.240.10.3/24 brd 10.240.10.255 scope global dynamic eth0
       valid_lft 2854sec preferred_lft 2854sec
    inet 10.240.10.10/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fec3:f26d/64 scope link 
       valid_lft forever preferred_lft forever

Birde Haproxy'nin doğru çalışıp çalışmadığını doğrulayalım. Henüz Kubernetes kurulumu yapmadığımız için 6443 portunu controller sunucularında dinleyecek bir servise ihtiyacımız olacak. Bunun için netcat kullanacağız. Aşağıdaki komutu bütün controller makinalarında çalıştırmalıyız.

nohup sh -c  'while true ; do (echo -e "HTTP/1.1 200 OK\n\n" ; echo -e "\t$(date)\n") | sudo netcat -l -w 1 -p 6443; done' &

lb-01 ve lb-02 makinlarında çalıştırılacak test komutları

wget 10.240.10.10:6443

# sonuç olarak bir index.html dosyasının indiğini ve içinde de tarih bilginin olduğunu görmemiz grekiyor.

Bu bölümü de bitirdik. Bir sonraki bölümde amacımız CA ve TLS sertifikalarını oluşturmak olacak.