Bu blogda, AWS EC2’ların anlık görüntülerini almanıza, bunları birkaç gün boyunca saklamanıza ve ayrıca güncel olmayan yedekleri silmenize yardımcı olan AWS service Data Lifecycle Manager, hakkında konuşacağız .
Bu hizmeti kullanmanın avantajları şunlardır:
Otomatik.
Düzenli veri yedeklemelerini zorunlu kılarak değerli verilerin korunması.
Güncel olmayan yedekleri otomatik olarak silerek maliyet tasarrufu.
Bu hizmeti EC2 panosunda Elastic Block Store menüsü altında bulabilirsiniz.
Şekil 1: EC2 dashboard > EBS > Lifecycle Manager
Manuel yöntemle giderseniz, sizden bazı bilgileri doldurmanız istenecek ve bu sizin için policy oluşturacaktır. Ancak burada, tüm bu politikayı Terraform kullanarak oluşturacağız . Altyapınızı verimli bir şekilde dağıtmak için kullanılabilecek harika bir açık kaynaklı ‘kod olarak altyapı’ (IaC) aracıdır. Bunun anlamı, yerel bilgisayarınızdan bir Terraform kodu çalıştırırsınız ve kod, örnekleri ve diğer kaynakları sizin için otomatik olarak dağıtır.
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.
İşte Nginx ingress controller kullanan Kubernetes ingress örnek mimarisi
Ön şartlar:
Bir Kuberntes cluster.
kubectl yardımcı programı.
Kubernetes cluster’a yönetici erişimi.
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.
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.
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.
1
$kubectl apply-fmandatory.yaml
sonrasında bu şekilde bir output görmeniz gerekiyor.
1
2
3
4
5
6
7
8
9
10
11
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.apps/nginx-ingress-controller created
limitrange/ingress-nginx created
Ingress Controller pod’larının doğru ayarlandığından emin olmak için kontrol edelim.
1
$kubectl get pods-ningress-nginx
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.
1
2
$mkdir ingress-deployment
$cd ingress-deployment
Adım 3: nginx-ingress.yaml adlı bir dosya oluşturun
1
$vim nginx-ingress.yaml
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
kind:Service
apiVersion:v1
metadata:
name:ingress-nginx
namespace:ingress-nginx
labels:
app.kubernetes.io/name:ingress-nginx
app.kubernetes.io/part-of:ingress-nginx
spec:
type:LoadBalancer
selector:
app.kubernetes.io/name:ingress-nginx
app.kubernetes.io/part-of:ingress-nginx
ports:
-name:http
port:80
targetPort:http
-name:https
port:443
targetPort:https
Adım 5: Ingress Controller service’ini oluşturun.
1
$kubectl apply-fnginx-ingress.yaml
Adım 5: Oluşturulan service’i kontrol edin.
1
$kubectl get svc-ningress-nginx
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.
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.
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
1
$kubectl create namespacedev
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion:apps/v1
kind:Deployment
metadata:
name:hello-app
namespace:dev
spec:
selector:
matchLabels:
app:hello
replicas:3
template:
metadata:
labels:
app:hello
spec:
containers:
-name:hello
image:"gcr.io/google-samples/hello-app:2.0"
Adım 4: Kubectl kullanarak deployment oluşturma.
1
$kubectl create-fhello-app.yaml
Dağıtım durumunu kontrol edin.
1
kubectl get deployments-ndev
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion:v1
kind:Service
metadata:
name:hello-service
namespace:dev
labels:
app:hello
spec:
type:ClusterIP
selector:
app:hello
ports:
-port:80
targetPort:8080
protocol:TCP
Adım 7: Kubectl kullanarak service’i oluşturun.
1
$kubectl create-fhello-app-service.yaml
Servis durumunu kontrol edin
1
$kubectl get svc-ndev
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion:extensions/v1beta1
kind:Ingress
metadata:
name:test-ingress
namespace:dev
spec:
rules:
-host:test.omeroner.com
http:
paths:
-backend:
serviceName:hello-service
servicePort:80
Adım 3: Yapılandırmaları kontrol etmek için oluşturulan oluşturulan giriş nesnesini açıklayın.
1
$kubectl describe ingress-ndev
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.
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.
Kubernetes Ingress
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion:extensions/v1beta1
kind:Ingress
metadata:
name:test-ingress
namespace:development
spec:
rules:
-host:test.omeroner.com
http:
paths:
-backend:
serviceName:hello-service
servicePort:80
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;
1
$kubectl get pods-ningress-nginx
yukardaki komutun sonucunda gelen pod ismi ile aşağıdaki gibi ilgili config dosyası görünebilir.
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.
Ç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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
###edit the following
service=service_name
email=user@domain.com
###stop editing
host=`hostname-f`
if(($(ps-ef|grep-vgrep|grep$service|wc-l)>0))
then
echo"$service is running"
else
/etc/init.d/$service start
if(($(ps-ef|grep-vgrep|grep$service|wc-l)>0))
then
subject="$service at $host has been started"
echo"$service at $host wasn't running and has been started"|mail-s"$subject"$email
else
subject="$service at $host is not running"
echo"$service at $host is stopped and cannot be started!!!"|mail-s"$subject"$email
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 .
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