Giriş

Cert-Manager, Kubernetes üzerinde sertifika yönetimi için kullanılan bir araçtır. Sertifikalar, güvenli iletişim için kullanılan SSL/TLS şifrelemesini sağlar. Cert-Manager, sertifikaların otomatik olarak oluşturulması, yönetilmesi ve yenilenmesi gibi sertifika yaşam döngüsü süreçlerini kolaylaştırır.
Cert-Manager, Kubernetes kümelerinde çalışan iş yüklerine SSL/TLS sertifikalarının eklenmesini ve yönetilmesini sağlar. Bu, uygulamalarınızı güvenli bir şekilde çalıştırırken, sertifikaların sürekli olarak yenilenmesini ve güncel tutulmasını sağlar.
Cert-Manager, Kubernetes'te iki temel kaynağı kullanır: Issuer ve Certificate.
-
Issuer: Bir Issuer, bir sertifika sağlayıcısını temsil eder. Issuer kaynağı, sertifika sağlayıcısına bağlantı bilgilerini ve kimlik doğrulama bilgilerini içerir. Birden çok namespace'de kullanılabilen ClusterIssuer ve tek bir namespace'de kullanılabilen NamespaceIssuer olmak üzere iki tür Issuer vardır.
-
Certificate: Bir Certificate kaynağı, bir sertifika talebini ve sertifikayı temsil eder. Certificate kaynağı, sertifikaların oluşturulması ve yönetilmesi için gereken bilgileri içerir. Bu kaynak üzerinde tanımlanan Issuer veya ClusterIssuer kullanılarak sertifika talepleri yapılır ve sertifikalar oluşturulur.
Cert-Manager, bir Issuer kaynağına sertifika sağlayıcısına bağlanacak kimlik doğrulama bilgilerini ekleyerek, sertifikaları otomatik olarak oluşturur ve yönetir. Sertifikaların süresi dolduğunda otomatik olarak yenilenmesini sağlar.
Cert-Manager, temel olarak ACME (Otomatik Sertifika Yönetimi Ortamı) protokolünü destekler. ACME protokolü, Let's Encrypt gibi sertifika sağlayıcılarıyla iletişim kurarak otomatik olarak sertifikaları oluşturur ve yeniler. Bunun yanı sıra, Cert-Manager, diğer sertifika sağlayıcıları ile de entegrasyon sağlar.
Cert-Manager, güvenli iletişimi sağlamak için çeşitli özellikler sunar:
-
Otomatik Sertifika Yenileme: Cert-Manager, sertifikaların süresi dolduğunda otomatik olarak yenilenmesini sağlar. Sertifika yenileme sürecini izler ve sertifikaların güncel kalmasını sağlar.
-
Esnek Sertifika Konfigürasyonu: Cert-Manager, sertifikaların çeşitli özelliklerini yapılandırmanıza izin verir. Sertifika taleplerinde DNS adlarını, IP adreslerini ve diğer gereksinimleri belirtebilirsiniz.
-
Entegrasyon: Cert-Manager, popüler Ingress Controller'lar ve diğer Kubernetes kaynakları ile entegrasyon sağlar. NGINX Ingress Controller, Traefik, Voyager ve diğerleriyle sorunsuz bir şekilde çalışabilir.
Cert-Manager, Kubernetes üzerinde güvenli iletişim için sertifika yönetimini kolaylaştıran güçlü bir araçtır. Uygulamalarınızın güvenliğini sağlamak ve sertifikaları otomatik olarak yönetmek için Cert-Manager'ı kullanabilirsiniz.
KURULUM
Helm paket yöneticisi kullanıyorsanız:
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.12.0 \
--set installCRDs=true
kubectl ile yüklemek istiyorsanız:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
ÖRNEKLER
Aşağıda NGINX Ingress Controller ile Cert-Manager'ı kullanarak Kubernetes üzerinde sertifika yönetimi için bir örnek gösterilmiştir:
- ClusterIssuer Oluşturma: İlk adım olarak, Cert-Manager ile bir ClusterIssuer oluşturmalısınız. Bu, sertifikaların nasıl alınacağını belirtir. Aşağıdaki YAML örneğinde, Let's Encrypt tarafından sağlanan bir sertifika kullanmak için bir ClusterIssuer oluşturuyoruz:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: your-email@example.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod-private-key
solvers:
- http01:
ingress:
class: nginx
Bu YAML dosyasında, "letsencrypt-prod" adında bir ClusterIssuer oluşturuyoruz. Let's Encrypt'in sağladığı bir sertifika kullanacağımızı belirtiyoruz. Ayrıca, sertifika oluşturulurken kullanılacak özel anahtarın saklanacağı gizli anahtar referansını belirtiyoruz. HTTP-01 belirteci kullanarak NGINX Ingress Controller'ı sertifikaların doğrulanması için kullanıyoruz.
- Sertifika İsteği ve Sertifika Oluşturma: ClusterIssuer'ı oluşturduktan sonra, sertifikaları istemek ve oluşturmak için bir Certificate kaynağı oluşturmanız gerekmektedir. Aşağıdaki YAML örneğinde, bir sertifika talebi oluşturuyoruz:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-certificate
spec:
secretName: example-tls
dnsNames:
- example.com
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
Bu YAML dosyasında, "example-certificate" adında bir sertifika talebi oluşturuyoruz. Sertifikayı saklamak için "example-tls" adında bir gizli anahtar nesnesi kullanıyoruz. Sertifika için "example.com" DNS adını belirtiyoruz. İssuerRef, önceki adımda oluşturduğumuz ClusterIssuer'ı belirtir.
- Ingress Oluşturma: Son adım olarak, NGINX Ingress Controller ile sertifikayı kullanacak bir Ingress kaynağı oluşturmanız gerekmektedir. Aşağıdaki YAML örneğinde, sertifikayı kullanmak için bir Ingress kaynağı oluşturuyoruz:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- example.com
secretName: example-tls
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
Bu YAML dosyasında, "example-ingress" adında bir Ingress kaynağı oluşturuyoruz. Ingress kaynağına, sertifikayı kullanmak için gerekli olan kubernetes.io/ingress.class ve cert-manager.io/cluster-issuer gibi uygun işaretlemeleri ekliyoruz. TLS bölümünde, sertifikanın kullanılacağı DNS adını ve gizli anahtar nesnesini belirtiyoruz. Ardından, kural ve yol ayarlarını yapılandırıyoruz.
Yukarıdaki örneklerde, NGINX Ingress Controller ile Cert-Manager'ı kullanarak sertifika yönetimi için adımları görebilirsiniz. Bu şekilde, Kubernetes üzerinde SSL/TLS sertifikalarını kolaylıkla yönetebilirsiniz.
Sağlıcakla..