For the complete documentation index, see llms.txt. This page is also available as Markdown.

Cert Manager and Lets Encrypt Overview

Bir Kubernetes cluster ortamında uygulamalarınızı dış dünyaya güvenli (HTTPS) bir şekilde açmak kritik bir gereksinimdir. Ancak SSL/TLS sertifikalarını manuel olarak talep etmek, Secret objeleri olarak sisteme yüklemek ve süresi dolmadan yenilemek, production ortamlarında sürdürülebilir bir yöntem değildir.

Bu rehberde, manuel süreçleri tamamen ortadan kaldıran ve sertifika yaşam döngüsünü baştan sona otomatize eden iki harika aracın (cert-manager ve Let's Encrypt) birlikte nasıl çalıştığını, mimarisini ve kurulumunu sıfırdan, adım adım inceleyeceğiz.


1. cert-manager Nedir ve Nasıl Çalışır?

cert-manager, Kubernetes için geliştirilmiş açık kaynaklı bir eklentidir (add-on). Temel görevi, TLS sertifikalarının alınmasını, yenilenmesini ve yönetilmesini otomatize etmektir. Sadece Let's Encrypt ile değil; HashiCorp Vault veya self-signed sertifika otoriteleriyle de entegre çalışabilir.

Öne Çıkan Özellikleri:

  • Sertifika taleplerini ve yenilemelerini otomatik yapar.

  • Standart tekil alan adlarını ve Wildcard (örn: *.example.com) sertifikaları destekler.

  • Kubernetes mimarisine tam uyum sağlayarak kendi CRD'lerini (Issuer, ClusterIssuer, Certificate) sisteme ekler.

  • Alınan sertifikaları ve private keyleri doğrudan Kubernetes Secret objeleri olarak güvenle depolar.

Mimari ve CRD (Custom Resource Definition) Yapısı

cert-manager, arka planda çalışan ve Kubernetes API'sini sürekli izleyen controller'lardan oluşur. Siz bir sertifika talep ettiğinizde, bu controller'lar istenen durum (desired state) ile mevcut durumu eşitler.

Aşağıdaki tablo, cert-manager'ın temel yapıtaşlarını gösterir:

CRD Objesi

Kapsam (Scope)

Ne İşe Yarar?

Issuer

Namespaced

Sadece bulunduğu namespace içindeki sertifika taleplerini karşılayabilen yetki tanımlamasıdır.

ClusterIssuer

Cluster

Tüm cluster genelinde (herhangi bir namespace'ten) gelen taleplere yanıt verebilen, global yetki tanımlamasıdır.

Certificate

Namespaced

Alınmasını istediğiniz sertifikanın detaylarını (alan adı, hangi Secret içinde saklanacağı ve hangi Issuer'ın kullanılacağı) belirten manifestodur.

2. cert-manager Kurulumu

Sistemin bu yeni objeleri (CRD'leri) tanıyabilmesi için kurulumu eksiksiz yapmalıyız. Kurulum için en yaygın ve güvenli yöntem Helm kullanmaktır.

Yöntem 1: Helm ile Kurulum (Önerilen)

Yöntem 2: kubectl ile Kurulum (Alternatif)

Eğer Helm kullanmıyorsanız, doğrudan YAML dosyasını apply edebilirsiniz:

🛠️ Hayat Kurtaran CLI Aracı: cmctl

cert-manager'ı yönetmek ve hataları ayıklamak (troubleshooting) için resmi cmctl aracını kullanabilirsiniz. Bu araç, uzun kubectl komutları yerine süreci çok basitleştirir:


3. Let's Encrypt ve ACME İş Akışı

Let's Encrypt, herkesin kullanımına açık, ücretsiz ve otomatik bir Sertifika Otoritesi'dir (CA). Sistemlerle konuşmak için ACME (Automated Certificate Management Environment) protokolünü kullanır.

  • Sertifikaların geçerlilik süresi 90 gündür. Bu kısa süre, otomasyonu (cert-manager kullanımını) zorunlu kılar.

  • İki farklı ortam (endpoint) sunar: Staging (Test) ve Production (Canlı).

Ortam

ACME Endpoint URL

Kullanım Senaryosu

Staging

https://acme-staging-v02.api.letsencrypt.org/directory

Testler içindir. Sertifika verir ama tarayıcılar güvenmez. Çok sık talep yapabilirsiniz (rate limit esnektir).

Production

https://acme-v02.api.letsencrypt.org/directory

Gerçek, güvenilir sertifikalar verir. Kurulumları Staging'de test ettikten sonra buraya geçilmelidir.

🗺️ ACME Doğrulama Topolojisi

cert-manager ve Let's Encrypt arasındaki diyalog (HTTP-01 Challenge) şu şekilde gerçekleşir:


4. Pratik Entegrasyon ve Konfigürasyon Senaryosu

Şimdi öğrendiklerimizi birleştirelim. Önce bir Issuer tanımlayacağız, ardından bir Ingress objesinde bu Issuer'ı çağıracağız.

Adım 1: Staging Issuer Oluşturmak

Aşağıdaki YAML, namespace içerisinde Let's Encrypt'in test sunucusuna bağlanacak bir kimlik tanımlar.

Adım 2: Kubernetes Ingress'i Yapılandırmak

Uygulamamızı dışarı açarken, Ingress manifestomuza ufak bir annotation (not) ekleyerek süreci başlatıyoruz.

Siz bu Ingress dosyasını deploy ettiğiniz anda; cert-manager annotations kısmını fark eder, Let's Encrypt ile iletişime geçer, doğrulama (challenge) işlemlerini arka planda halleder ve başarılı olursa sertifikayı web-tls isimli Secret içine yerleştirir. Artık uygulamanız güvenli bir şekilde dış dünyaya hizmet vermeye hazırdır.

Last updated