Öncelikle Cert-manager ‘i kubernetes’te dağıtıyoruz.
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml
Let’s encrypt bir sandbox ortamına sahip. İlk olarak, API kullanım sınırlaması nedeniyle bir sandbox düzenleyicisi oluşturuyoruz.
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
namespace: jenkins
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: nginx
Email kısmındaki [email protected] kısmını kendi e-posta adresiniz ile değiştirin. Let’s encrypt sertifika bitiş süreleri yaklaştığında veya tamamen bittiğinde size bir e-posta gönderir.
Namespace kısmında ingress ve servisiniz hangi namespace üzerinde çalışıyorsa onu yazın. Ben Jenkins namespace için SSL kuracağım.
Yukarıdaki komutları bir dosyaya kaydettikten sonra Kubernetes üzerinde ayağa kaldırıyoruz.
kubectl apply -f dosyaadi.yaml
issuer.cert-manager.io "letsencrypt-staging" created
Şimdi production issuer kaldırıyoruz
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-prod
namespace: jenkins
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Email kısmındaki [email protected] kısmını kendi e-posta adresiniz ile değiştirin. Let’s encrypt sertifika bitiş süreleri yaklaştığında veya tamamen bittiğinde size bir e-posta gönderir.
Yukarıdaki komutları bir dosyaya kaydettikten sonra Kubernetes üzerinde ayağa kaldırıyoruz.
kubectl apply -f dosyaadi.yaml
Şimdi SSL kuracağımız ingress’in annotations kısmına aşağıdaki ifadeleri ekliyoruz.
annotations:
cert-manager.io/issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
- sezer.test
secretName: quickstart-example-tls
sezer.test alan adını kendi alan adınız ile değiştirmeyi unutmayın!
Ardından aşağıdaki komutla app namespace üzerindeki sertifikaları kontrol ediyoruz. Ready true olunca prod kısmına geçeceğiz.
kubectl get certificate -n jenkins
NAME READY SECRET AGE
quickstart-example-tls True quickstart-example-tls 3m
Harika! Şimdi tekrardan SSL kuracağımız ingress’e gidip annotations kısmına eklediğimiz ifadeyi değiştirip kaydedelim.
annotations:
#cert-manager.io/issuer: "letsencrypt-staging"
cert-manager.io/issuer: "letsencrypt-prod"
Ingress’i tekrar kaydettikten sonra sertifikanın oluşması bir kaç dakikayı bulabilir.
Aşağıdaki komutla detayları görebiliriz.
kubectl describe certificate quickstart-example-tls -n jenkins
Reason: CertIssued
Status: True
Type: Ready
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreateOrder 9m cert-manager Created new ACME order, attempting validation...
Normal DomainVerified 8m cert-manager Domain "sezer.test" verified with "http-01" validation
Normal IssueCert 8m cert-manager Issuing certificate...
Normal CertObtained 7m cert-manager Obtained certificate from ACME server
Normal CertIssued 7m cert-manager Certificate issued Successfully
Artık tüm Kubernetes projelerinizde SSL kullanmamak için hiçbir mazeretiniz yok!