:::: MENU ::::

Kubernetes Nginx Controller Kurulumu ve Ingress Kullanımı

Bu yazımda, Nginx ingress controller kullanarak Kubernetes’de nasıl ingress kullancağımızı ve trafiği joker karakter’li DNS kaydı kullanarak deployment’lara nasıl yönlendireceğinizi öğreneceksiniz.

Kubernetes ingress’in nasıl çalıştığını anlamak istiyorsanız, lütfen Yeni Başlayanlar İçin Kubernetes Ingress Eğitimi’daki bu blog gönderisini okuyun.

İşte Nginx ingress controller kullanan Kubernetes ingress örnek mimarisi

kubernetes ingress controller

Ön şartlar:

  1. Bir Kuberntes cluster.
  2. kubectl yardımcı programı.
  3. Kubernetes cluster’a yönetici erişimi.
  4. Ingress controller load balancer’ına işaret etmek için geçerli bir etki alanı.

Not: Bu eğitici, AWS üzerinde buluan bir kubernetes cluster’ında denendi. Mantıken tüm bulut ortamlarında çalışmalıdır. Eğer herhangi bir hatayla karşılaşırsanız, kurulumda bazı ayarlamalar yapmanız gerekebilir.

Nginx Ingress Controller Kurulumu

İki adet nginx ingress controller vardır.

  1. Kubernetes topluluğu tarafından sunulan Nginx ingress controller
  2. Nginx Inc tarafından üretilen Nginx ingress controller

Ben Kubernetes topluluğu tarafından sunulan Nginx ingress controller‘ı kullanacağım.

Ingress controller’ın belirli bir namespace, service account, cluster role vb. bağlarına, yapılandırmalara İhtiyacı vardır. Resmi ingress deposundan yaml dosyasını kullanarak belirtilen tüm kubernetes nesnelerini oluşturabilirsiniz .

Resmi ingress deposundaki mandatory.yaml dosyasını kullanarak ingress controller’ı deploy edelim.

Kubectl kullanarak Nginx ingress deployment oluşturalım.

İpucu: Eğer 1.14 önceki bir Kubernetes sürümünü kullanıyorsanız, mandatory.yaml  dosyasının 217. satırında kubernetes.io/os satırını beta.kubernetes.io/os ile değiştirin. bkz. Etiketler.

Dosyayı indirip vim ile düzenleyelim.

217. satırda bulunan kubernetes.io/os: linux kısmı beta.kubernetes.io/os: linux ile değiştirip dosyayı kaydedip çıkalım ve bu şekilde deployment oluşturalım.

sonrasında bu şekilde bir output görmeniz gerekiyor.

Ingress Controller pod’larının doğru ayarlandığından emin olmak için kontrol edelim.

Ingress controller için LoadBalancer service’ini ayarlama

Sonraki adım, nginx ingress deployment’ını kümenin dışına erişime açmak için Type’ı Loadbalancer olan bir service oluşturmaktır.

Bu kurulumda, ELB’yi hangi katmanda (L4 veya L7) yapılandırmak istediğimizi seçmenizi gerektirir:

  • Layer 4 : 80 ve 443 numaralı bağlantı noktaları için listener protokolü olarak TCP kullanın.
  • Layer 7 : 80 numaralı bağlantı noktası için listener protokolü olarak HTTP kullanın ve ELB’de TLS’yi sonlandırın

Ben layer 7 olarak bir yapılandırma yapacağım. bkz

Adım 1: daha önceden oluşturduğumuz nginx-configiration configmap aşağıdaki şekilde güncellememiz gerekiyor.

Adım 2: Yerel olarak bir proje dizini oluşturun ve bu dizine geçin.

Adım 3: nginx-ingress.yaml adlı bir dosya oluşturun

Adım 4: Aşağıdaki içeriği dosyaya kopyalayın.

Not : Etiketlerin altındaki ek açıklamalar, nginx denetleyicisi dağıtımıyla entegrasyon için çok önemlidir.

Adım 5: Ingress Controller service’ini oluşturun.

Adım 5: Oluşturulan service’i kontrol edin.

Bir Alan Adını Loadbalancer IP’siyle Eşleme

Ingress ayarlarımızın çalışmasını sağlamak için, loadbalancer IP’siyle (veya CNAME) bir alan adı eşlememiz gerekir. Bunu iki şekilde yapabilirsiniz.

Tek DNS Eşlemesi:

Tek etki alanını doğrudan yük dengeleyici IP’sine A kaydı olarak eşleyebilirsiniz. Bunu kullanarak, giriş denetleyicisi için yalnızca bir etki alanına ve birden çok path’e dayalı trafik yönlendirmesine sahip olabilirsiniz.

Örneğin,

www.omeroner.com –> Loadbalancer IP / CNAME

Bu modeli kullanarak yola dayalı yönlendirmeye sahip olabilirsiniz.

Birkaç örnek,

http://demo2.omeroner.com/app/api
http://demo2.omeroner.com/app1/api
http://demo2.omeroner.com/app2/api

Joker Karakter DNS Eşlemesi:

Bir joker karakter DNS’sini load balancer ile eşlerseniz, giriş sırasında dinamik DNS uç noktalarınız olabilir.

Örneğin,

*.omeroner.com

Bu şekilde, tek giriş denetleyicisi aracılığıyla birden çok dinamik alt etki alanına sahip olabilirsiniz ve her DNS’nin kendi yol tabanlı yönlendirmesi olabilir.

Örneğin,

http://demo.omeroner.com/api
http://demo.omeroner.com/api/v1
http://demo.omeroner.com/api/v2

http://demo2.omeroner.com/api
http://demo2.omeroner.com/api/v1
http://demo2.omeroner.com/api/v2

http://test.omeroner.com/
http://test2.omeroner.com/
http://test3.omeroner.com/

Demo amaçlı olarak, bir joker karakter DNS’sini LoadBalancer IP/CNAME ile eşledik. DNS sağlayıcınıza bağlı olarak, bu ayarı yapabilirsiniz.

Demo Uygulama Kurulumu

Test amacıyla, bir demo uygulaması deploy edip bir ClusterIp service’i ekleyeceğiz.

1.Adım: Dev adlı bir ad alanı oluşturun

Adım 2: hello-app.yaml adlı bir dosya oluşturun.

Adım 3: Aşağıdaki içeriği kopyalayın ve dosyayı kaydedin.

Adım 4: Kubectl kullanarak deployment oluşturma.

Dağıtım durumunu kontrol edin.

Adım 5: hello-app-service.yaml adlı bir dosya oluşturun.

Adım 6: Aşağıdaki içeriği kopyalayın ve dosyayı kaydedin.

Adım 7: Kubectl kullanarak service’i oluşturun.

Servis durumunu kontrol edin

Kubernetes Ingress Oluşturma

Şimdi hello uygulamamıza bir DNS kullanarak erişmek için bir ingress nesnesi oluşturalım. Bir ingress nesnesi, yönlendirme kurallarının tanımından başka bir şey değildir.

Ingress nesnesinin Nginx controller’ına nasıl bağlandığını merak ediyorsanız ingress controller pod kuralları denetlemek için ingress API’sine bağlanır ve nginx.conf öğesini buna göre günceller.

Adım 1: ingress.yaml adlı bir dosya oluşturun

Adım 2: Aşağıdaki içeriği kopyalayın ve dosyayı kaydedin.

 Dns’de *.omeroner.com ile load balancer ip/cname ini eşleştirdiğimizden trafik nginx controller servisine gelecek.

Adım 3: Yapılandırmaları kontrol etmek için oluşturulan oluşturulan giriş nesnesini açıklayın.

Artık test.omeroner.com etki alanına erişmeye çalışırsanız (etki alanı adınızla değiştirmeniz gerekir.), deploy ettiğimiz örnek uygulamamıza erişebilmeniz gerekir.


Yeni Başlayanlar İçin Kubernetes Ingress Eğitimi

Kubernetes Ingress, dış kaynaklardan kubernetes cluster’daki service’lere kurallar ekleyerek trafik yönlendirmek için kullanılan bir kaynaktır.

Bu Kubernetes giriş eğitim serisinde, dış trafiği Kubernetes deployment’larına yönlendirmek için kullanılan ingress ve ingress controller kavramını öğreneceksiniz. 

Kubernetes Ingress Eğitimi

Başlamak için iki önemli şeyi anlamanız gerekir.

  1. Kubernetes Ingress
  2. Kubernetes Ingress Controller

Bu kavramların her birine bir göz atalım.

Kubernetes Ingress:

Kubernetes Ingress, trafiği harici bir kaynaktan cluster içinde bulunan service endpoint’lerine yönlendirmek için kurallara sahip olabileceğiniz yerel bir kubernetes kaynağıdır.Ingress’de belirtilen kuralları yönlendirmek için bir ingress controller gerektirir. Bir ingress nesnesi aşağıdakine benzer.

Yukarıdaki ingress, test.omeroner.com‘a yapılan tüm çağrıların development namespace’inde bulunan hello-service ismindeki service’e yönlendirilmesi gerektiği anlamına gelir.

Ingress hakkında anlaşılması gereken önemli noktalar.

  • Service’lerin dağıtıldığı namespace’de ingress kuralları oluşturmalısınız. Trafiği, ingress’e sahip olmadığınız farklı bir namespace’deki bir service’e yönlendiremezsiniz.
  • Bir ingress, trafiği yönlendirmek için bir ingress controller gerektirir.
  • Harici trafik, ingress API’na vurmaz, bunun yerine ingress controller service’ine vurur

Kubernetes Ingress Controller

Ingress controller, genellikle cluster’da dağıtılan bir proxy service’idir.  service ile expose edilmiş kubernetes deployment’dan başka birşey değildir. Aşağıda kubernetes için kullanılabilen ingress controller bulunmaktadır.

Genellikle, Nginx bir ingress controller olarak yaygın olarak kullanılmaktadır. Nginx ingress controller şu şekilde çalışır.

  • Nginx controller pod’unun içindeki nginx.conf dosyası, Kubernetes ingress API’siyle konuşabilen ve trafik yönlendirmesi için en son değerleri gerçek zamanlı olarak alabilen bir go template’idir.
  • Nginx controller, trafik yönlendirmesi için oluşturulmuş bir kural olup olmadığını kontrol etmek için Kubernetes ingress API’sı ile konuşur.
  • Herhangi bir ingress kuralı bulursa , go template’inde kullanan pod içindeki bir dosya olan nginx.conf nginx controller yapılandırmasına uygulanır .

Pod’a exec kullanarak bağlanır ve /etc/nginx/nginx.conf dosyasını kontrol ederseniz, conf dosyasında uygulanan ingress nesnesinde belirtilen tüm kuralları görebilirsiniz.

Örnek olarak;

yukardaki komutun sonucunda gelen pod ismi ile aşağıdaki gibi ilgili config dosyası görünebilir.

İşte kubernetes cluster’da ingress kurulumunu açıklayan mimari diyagram.


setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory Hatası ve Çözümü

setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory:

 

Böyle bir hata aldığınızda aşağıdaki çözümü uygulayabilirsiniz.

/etc/ssh/ssh_config dosyasında aşağıdaki içeriği düzenleyerek çözüm bulabilirsiniz.

SendEnv LANG LC_ * değerin 

 


Mysql Root Parolası Restleme Bash Script

Mysql root parolasını reset’lemek için kullanabileceğiniz bir script 🙂

github linki…

 


Komut Satırından Netapp Snapshot Restore

Netapp storage kullanıyorsak snapshot’ın nekadar değerli bir nimet olduğunu söylemeye gerek yok. Bazen bir volume için aldığımız ss’ı başka bir volume restore etme ihtiyacı olabilir. Bu durumda aşağıdaki adımları takip edebilrisiniz.

 


nrpe installation error(configure: error: Cannot find ssl libraries)

nrpe installation error(configure: error: Cannot find ssl libraries)
HATA:
ÇÖZÜM:

 


Servis Durum Kontrol Script

Çok gelişmiş monitoring sistemleri olmasına rağmen bazen ihtiyaç olduğunda kullanabileceğiniz,linux ortamlarda çalıştırdığınız servisleri check etmek için basit bir Servis Durum Kontrol Scripti;

Github linki;

https://github.com/omeroner/sysadmin/blob/master/scripts/bash/service_check.sh


Nginx’e Letsencrypt ile SSL Kurmak

Web sitenizin güvenliğini , ziyaretçilerinizin sitenize olan güvenini  artırabilir. Web sunucunuzda şifrelemenin(https) ayarlanması, genellikle çoğu kişiye karmaşık ve pahalı gelmiştir. Letsencrypt,  bu karmaşıklığı sadeleştirerek bunu değiştirmeyi hedefliyor. Basit, otomatikleştirilmiş komutlarla sertifikaların alınmasına ve yüklenmesine izin veren açık ve ücretsiz bir projedir.

Letsencrypt, IdentTrust tarafından çapraz imzalanan ve son sertifikalarının tüm önemli tarayıcılar tarafından kabul edilmesine izin veren sertifikaları verebilen yeni bir Sertifika Yetkilisidir. Bu kılavuz, certbot istemcisi sürüm 0.11.1’i yükleme adımlarını ve nginx çalıştıran CentOS 7 sunucunuzdaki sertifikaları yönetmek için Nginx’e Letsencrypt ile SSL Kurmak için gerekli adımları  özetlemektedir  .

certbot kurulumu

nginx kurulumu

güvenlik duvarı yapılandırması

centos üzerinde güvenlik duvarı varsa :

certbot  oluştur

nginx yapılandırmasını güncelle

nginx  servisini başlatma

SSL için otomatik yenileme oluştur

letsencryst’i oluşturduğumuz sertifikanın bir süresi var , otomatik yenilemek için yenileme komut dosyası oluştur

yenileme script’in içeriği

günde 2 kez güncellemeyi başlat

Manuel yenileme


Linux Komut Satırında Kullanıcıları Listelemek

Linux’ta iki tür kullanıcı bulunur; (useradd komutu kullanılarak yaratılan) ve sistem kullanıcıları. Sistem kullanıcılarının çoğu, çeşitli paket yüklemeleri sırasında oluşturulan ve OS’yi kurarken oluşturulan kullanıcılardır. Sistem kullanıcıları, /etc/login.defs dosyasında tanımlandığı gibi düşük UID değerlerine (genellikle 0-99) sahip olmalıdır. Continue Reading


Sysdig Nedir ? Sysdig Kullanarak Sunucu İzleme

sysdig_logo

Sysdig Nedir ?

Bazı durumlarda bir işlem tarafından yapılan ve alınan sistem çağrılarını takip etmek gerekebilir bunun için  akla gelen ilk şey nedir? Muhtemelen haklı olarak düşünceniz strace olur ve haklısın. strace hakkında bilgi sahibi değilseniz ilgili paylaşımımı inceleyebilirsiniz.

Hangi araç ile komut satırından ham ağ trafiğini izlemek için kullanırsınız? Hakkında bilgi sahibiyseniz tcpdump , kullanarak yine doğru bir seçim yapmış oluruz. (unix’de her şey bir dosyadır)

Açık dosyaları izlemek zorunda kaldığımızda ise ilk kullanacağımız lsof‘dur. lsof ile daha önce payaştığım yazıya göz atabilirsiniz.

Sysdig, açık kaynak kodlu linux (RHE,Debian,Container),OSX ve Windows sistemlerde çalışan ve strace , tcpdump ve lsof gibi (strace+tcpdump+lsof+iftop+htop) sysadmin’in sıklıkla kullandığı klasik ama gerçekten harika araçları tek çatıda toplayan ve  farklı birçok  kabiliyet ve özelliğe sahip gelişmiş bir araçtır.

Ayrıca, çok güzel de bir filtreleme sistemine sahiptir. Bu şekilde spesifik olarak system çağrıların(syscall) ve olayların(event) belirttiğiniz kriterlere göre görüntülenmesini veya istersek bir dosyaya(trace file) yazılmasını sağlayabiliriz. Bu trace file’ları MacOS X ya da Windows gibi farklı platformlar üzerinde de analiz edebiliriz.

Sysdig’in bir diğer güzel özelliği ise “chisels” adını verdikleri analiz scriptleridir. Bu scriptler toplanan verinin anlamlandırılması için kullanılan Lua dilinde yazılmış scriptlerdir ve sisteminiz hakkında detaylı bilgi edinmek için kullanabileceğiniz ve analiz ihtiyaçlarınıza göre kendi scriptlerinizi geliştirebileceğiniz bir mekanizmadır. Yazının sonunda örnekler ile bu kısmı daha iyi analayacaksınız.

Bu yazıda sysdig ile Linux sistem izleme ve sorun gidermek için kurulum ve temel kullanımını inceleyeceğiz.

Sysdig Kurulumu

Bu yazı için ben, kısalık ve kolaylık uğruna resmi internet sitesinde açıklanan otomatik yükleme işlemini kullanmayı tercih ettim.

Sysdig kurulumu gerçekleştirmek için sudo olarak aşağıdaki komutu çalıştırmanız yeterli oluyor. Herşey otomatik olarak kuruluyor. Tüm kurulum seçenekleri için sayfayı inceleyebilirsiniz.

Sysdig Kullanımı

Yükleme tamamlandıktan sonra, sysdig’in en basit (primitive) kullanımı komut satırından doğrudan sysdig komutunu çalıştırmaktır.

Bu şekilde o an çalışan sistem çağrıları ve event’ler ekrandan akacaktır. Bu çıktıda her bir olay bir satır olacak şekilde görüntülenmektedir ve her bir satırda aşağıda sıralaması verilen bilgiler ekrana basılacaktır:

İlgili bilgilerin açıklaması da şu şekildedir:

  • evt.num :  Event numarası
  • evt.time : Event tarihi
  • evt.cpu : Event’in hangi kaç numaralı CPU core üzerinde çalıştığı
  • proc.name: Süreç ismi.
  • thread.tid : Thread ID ( tek thread’li süreçler için PID)
  • evt.dir : Event yönü, giriş eventleri için > ve çıkışlar için <
  • evt.type : Event tipi, örm: ‘open’, ‘read’, ‘write’
  • evt.args : event’in aldığı argüman.

Sysdig Filtreleme (class.field) Parametreleri

Sysdig’i yukarıda verilen şekilde tüm sistem olaylarını görüntüleyecek şekilde kullanmak aynı anda binlerce olayın ekrandan akıp gitmesine ve bu bilgi akışı içerisinde kaybolup gitmenize neden olacaktır; işte strace’den alışık olduğumuz bu verimsiz durumu ortadan kaldırmak için sysdig’in çok gelişmiş bir filtreleme sistemi bulunmaktadır.

Bu sistem sayesinde binlerce sistem çağrısını en ince ayrıntısına kadar filtreleyerek spesifik aramalar yapabiliriz.

Örnek olarak vim komutuna ait aktiviteyi görüntülemek için sysdig’i aşağıdaki şekilde kullanabilirsiniz:

Yukardaki komutu verip aşağıdaki gibi bir vim komutu çalıştırırsanız.

Aşağıdaki şekle benzer bir çıktı görürsünüz.

Sysdig’in fitreleme yapısı standart karşılaştırma operatörlerini ( =, !=, <, <=, >, >= ) ve boolean operatörleri (“and”, “or” ve “not”) desteklediği için filtrelemeyi genişletmek çok kolaydır.

Örnek olarak cat ve vim komutunun aktivitelerini görüntülemek için komutu şu şekilde kullanmak mümkündür:

ya da ping haricindeki tüm diğer süreçlerin kapadığı dosyaları görüntülemek için örnek şu şekildedir:

Tüm filtreleme (class.field) seçeneklerini aşağıdaki komut ile görebiliriz:

Sysdig Kullanışlı Örnekler

Belirli bir dizin altında işlem yapan süreçleri görüntülemek için:

Bellibir süreç haricinde dosyalar üzerinde aktivite gerçekleştiren süreçler ve yaptıkları işlemler:

Java ve MySQL süreçlerine ait aktivite:

Komutların aldığı parametreler üzerinden filtreleme yapmak için proc.args filtresi yani class.filed’i kullanılmaktadır.

Örnek olarak parametre olarak www.omeroner.com alan bir uygulamanın hareketlerini izlemek için (örn: dig www.omeroner.com)

Spesifik bir ip adresi tarafından yapılan bağlantılar sonucu oluşan ve sshd süreci ile alakalı olmayan aktiviteyi incelemek için:

Mysql dışındaki süreçler tarafından karşılanan gelen network bağlantılarını incelemek için:

Belli bir  kullanıcıya ait tüm aktivitenin izlenmesi:

Belli bir gruba ait tüm aktivitenin izlenmesi:

Event tipine göre çağrıları görüntülemek için: (LINUX System Call Quick Reference için bu dosyayı inceleyebilirsiniz.)

Tüm event listesini görmek için:

Sysdig Çıktı Formatlarını Düzenleme

Sysdig ile filtreleme sonuçlarının  çıktılarını customize edebililiyoruz. Örnek olarak event tipi chdir (change dir) olan sistem çağrılarını, komutu (cd) çalıştıran kullanıcı ve ilgli dizini görüntülemek üzere formatlı bir şekilde ekrana basmak için şu komut kullanılabilir:

shell üzerinden gerçekleştirilen tüm komutları, kullanıcı, komut ve komut agrümanını içerecek şekilde ekrana basmak için:

Sysdig ile Trace Dosyaları

Yazının başında’da ifade ettiğim gibi sysdig ile elde ettiğimiz sonuçları daha sonra incelemek için bir dosyaya (trace file) yazdırabiliriz.

Örnek olarak tüm sysdig çıktısını trace.scap dosyasına yazılması için kullanılacak komut:

Sadece 50 adet event’in ilgili dosyaya yani trace.scap yazılmasını sağlamak için komut:

Trace dosyasına yazdırdığımız bir sysdig çıktılarını okumak için kullanılacak komut:

 

Sysdig ‘de Chisels Kullanımı

chisels , sysdig üzerinden elde edilen verinin anlamlandırılması üzere kullanılan scriptlere verilen addır ve öntanımlı olarak bir çok chisel bulunmaktadır.

Öncelikle bu chisel’lerin bir listesini -cl parametresi kullanarak görebiliriz:

chisel’ler hakkında daha detaylu bilgi almak üzere -i parametresi kullanılabilir. Örnek olarakbottlenecks isimli chisel’in ne iş yaptığına bakmak için aşağıdaki komut kullanılabilir:

 

Sysdig  Chisels Kullanışlı Örnekler

Ençok cpu kullanan süreçleri görmek için:

1 ms’den uzun süren I/O aktivitesi:

1 ms’den uzun süren network aktivitesi:

Syscall bazında en çok error üreten süreçler:

Süreçlere ait standart çıktıları ekrana basmak için (class.field kullanılabilir):

Yazma + Okuma anlamında en çok disk I/O’nun yapıldığı dosyalar:

En çok disk I/O üreten (Read + Write) süreçler:

Byte cinsinden toplam I/O miktarı:

Hangi süreçlerin hangi log dosyalarına ne yazdığının ekrana basılması:

Syslog’a yazılan her mesajın görüntülenmesi:

Spesific bir ip’nin ürettiği trafiğin görüntülenmesi (dikkat edeceğiniz üzere chisel’leri filtreleme seçenekleri kullanabiliyoruz):

Spesifik bir port üzerinde gerçekleşen trafiğin görüntülenmesi:

Byte cinsinden en çok trafik üreten bağlantıların listenmesi:

En çok trafik üreten portların listelenmesi: