Ö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!