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
Secretobjeleri 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