Lets Encrypt ile ücretsiz SSL sertifikası nasıl oluşturulur
Cert-Manager + Lets Encrypt + Nginx Ingress + Kubernetes Cluster
bu yazımda kubernetes clusterınıda kullanacağınız bir web application için free şekilde nasıl sertifika temin edeceğinizi anlatacağım. genelde development ve preprod(stage) ortamlarda kullanılan bu yapıyı open source toollarla ücretsiz bir şekilde nasıl kuracağız onu anlatacağım.
aşağıdaki adımları sırasıyla uygulayacağız. ve topolojideki yapıyı ortaya çıkaracağız.
* nginx ingress controller kurulum
* sample application configuration
* cert-manager kurulum
* cluster issuer configuration
* ingress configuration
* tls certificate secret configuration
* dns update
let’s encrypt
peki nedir bu lets encrypt?
normalde bildiğiniz gibi bir SSL sertifikası almanın yolu sertifika firmalarına (globalsign, verisign vs) yıllık ücret ödemek.
Lets Encrypt SSL/TLS sertifikalarını üretebilmenin yolu basitçe, sertifika isteyen sunucunun sertifika istediği domain'e gerçekten sahip olup olmadığını teyit etmesiyle yapılıyor. (lets encrypted organization validation yapmaz)
Lets’ Ecnrypt bu teyit işini 2 türlü yapıyor. HTTP challange ve DNS chalange
ben burada DNS challange adı verilen yöntemle doğrulama yapmaya çalışacağım. bu doğrulamanın adımlarını aşağıda basit bir şekilde çizdim.
lets encrypted sertifikaları geçerlilik süresi 90 gündür, ancak certbot gibi açık kaynak bir bot implementasyonu sayesinde certifika yenilemeyi de otomatize hale getirebiliyorsunuz
KURULUM
kubernetes olarak google cloud kullanacağım. ve kurulumları helm ile yapacağım.
ingress controller
öncelikle ingress controller kuracağız nginx kullanacağım bunun için.
helm upgrade --install ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx --create-namespace
helm ile kurulum yapıyoruz.
kontrol ettiğimizde controllerin ayağa kalktığını ve loadbalancer için IP aldığını görebiliriz.
bu ingress external-ip önemli istekler buna gelecek çünkü.
sample-application
basit bir hello-world kuracağım dışardan da ingress sayesinde erişeceğiz.
bunun için google in kendi hello-world app ini kullanacağım.
service:
cert-manager
öncelikle repo ekliyoruz. ve update ettikten sonra helm install la yüklüyoruz.
helm repo add jetstack https://charts.jetstack.io
helm repo update
ardından kuracağımız chart a bakabiliriz.
şuan versiyon 1.7.1 mevcut.
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.7.1 --set installCRDs=true
cluster-issuer
lets encrypted için bir cluster issuer yapacağız bunu da sonradan ekleyeceğimiz ingressde kullanacağız.
burada verdiğiniz isim önemli çünkü daha önce berlittiğim ingressde kullanacağımız kısım isim oluyor.
gerisi default olarak kullanılmaktadır.
tls-certificate
burada benim domain olarak size bedava domain sunan bir site kullanabilirsiniz. 1 free domain hakkınız var A kaydı girebiliyorsunuz DNS işlerinde kullanabilirsiniz.
issuerRef kısmı daha önce belirttiğim issuer de kullandığımız isim olmalı.
ingress configuration
ingressde servis adını gösteriyoruz. gerisi üstte yaptıgımız ayarlar.
sırasıyla issuer, cert ve ingressi apply edelim.
hepsini yarattıktan sonra certificate e baktığınızda validate olduğunu anlamanız için READY state true olmalı. yarattığınız sertifikaya bakalım.
ve True oldugunu görüyoruz. domaine https üzerinden erişmeyi deneyelim.
ve taaa daaa sertifikamız valid durumda. artık https ile sorunsuz çalışabiliriz. umarım faydalı bir yazı olmuştur. bir sonraki yazımda certbot ile sertifika yenileme süresicini anlatacağım.
görüşmek üzere
h.a.s.