H. Alperen Selcuk
4 min readMar 2, 2022

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 encrypt dns challange

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.