Takip et

Kubernetes’te cert-manager, Traefik ve Let’s Encrypt ile Sitenizi Güvenli Hale Getirme

Kubernetes’te cert-manager, Traefik ve Let’s Encrypt ile Sitenizi Güvenli Hale Getirme Giriş Günümüzde internet sitelerinin güvenliği, kulla

Kubernetes’te cert-manager, Traefik ve Let’s Encrypt ile Sitenizi Güvenli Hale Getirme

Giriş

Günümüzde internet sitelerinin güvenliği, kullanıcı deneyimi ve veri gizliliği açısından hayati bir öneme sahiptir. HTTPS (Hypertext Transfer Protocol Secure) kullanımı, tarayıcılar ve sunucular arasındaki iletişimi şifreleyerek verilerin yetkisiz erişime karşı korunmasını sağlar. Google gibi arama motorları da HTTPS kullanan siteleri tercih etmekte ve hatta bazı yeni web teknolojileri için HTTPS’i zorunlu kılmaktadır.

Kubernetes, konteynerize edilmiş uygulamaları dağıtmak, ölçeklendirmek ve yönetmek için güçlü bir platform sunarken, bu uygulamaların güvenli bir şekilde internete açılması ayrı bir uzmanlık gerektirir. Bu makalede, Kubernetes ortamında Traefik bir Ingress Controller olarak, cert-manager otomatik sertifika yönetimi için ve Let’s Encrypt ücretsiz sertifika sağlayıcısı olarak kullanılarak sitelerin nasıl güvenli hale getirileceğini adım adım inceleyeceğiz. Bu üçlü kombinasyon, sertifika yaşam döngüsünü tamamen otomatikleştirerek modern, güvenli ve bakımı kolay bir altyapı oluşturmanıza olanak tanır.

Neden HTTPS?

HTTPS, sadece bir “güvenlik özelliği” olmanın ötesinde, modern web’in temel bir gereksinimidir. İşte neden HTTPS kullanmanız gerektiğine dair başlıca nedenler:

* Veri Bütünlüğü ve Gizliliği: HTTPS, kullanıcıların tarayıcıları ile sunucunuz arasındaki tüm iletişimi şifreler. Bu, hassas verilerin (kullanıcı adları, şifreler, kredi kartı bilgileri vb.) üçüncü taraflarca ele geçirilmesini veya değiştirilmesini engeller.
* Kullanıcı Güveni: Tarayıcılar, HTTPS ile korunan siteleri yeşil bir kilit simgesiyle işaretlerken, HTTPS olmayan siteleri “Güvenli Değil” olarak etiketler. Bu, kullanıcıların sitenize olan güvenini doğrudan etkiler. Güvenli olmayan siteler, ziyaretçilerin siteyi terk etmesine neden olabilir.
* SEO Faydaları: Google, 2014’ten beri HTTPS’i bir sıralama faktörü olarak kullanmaktadır. HTTPS kullanan siteler, arama motoru sonuçlarında daha üst sıralarda yer alma potansiyeline sahiptir.
* Yeni Web Teknolojileri İçin Gereklilik: Service Workers, Geolocation API, Web Push Notifications gibi birçok modern web özelliği ve API, sadece güvenli (HTTPS) bağlamlarda çalışır.
* Yasal ve Düzenleyici Uyum: Özellikle e-ticaret siteleri ve kişisel veri işleyen platformlar için GDPR, KVKK gibi veri koruma düzenlemeleri ve PCI DSS gibi endüstri standartları, hassas verilerin şifrelenmesini zorunlu kılar.

Kullanılacak Bileşenlere Genel Bakış

Sitemizi Kubernetes’te güvenli hale getirmek için kullanacağımız temel bileşenleri tanıyalım:

Kubernetes

Kubernetes, konteynerize edilmiş iş yüklerini ve hizmetleri yönetmek için açık kaynaklı bir platformdur. Uygulamaların dağıtımını, ölçeklendirilmesini, güncelleştirilmesini ve izlenmesini otomatikleştirir. Bu makalede, uygulamalarımızı ve ilgili hizmetleri Kubernetes cluster’ımızda çalıştıracağız.

Traefik

Traefik, modern bulut tabanlı uygulamalar için tasarlanmış bir Edge Router ve Ingress Controller’dır. Kubernetes ile mükemmel bir entegrasyona sahiptir ve dinamik olarak yapılandırılabilir. Temel özellikleri şunlardır:

* Dinamik Konfigürasyon: Uygulamanızın servislerini otomatik olarak keşfeder ve yönlendirme kurallarını anında günceller. Kubernetes servisleri, Ingress kaynakları ve Traefik’in kendi CRD’leri (Custom Resource Definitions) ile entegre çalışır.
* Otomatik HTTPS: Let’s Encrypt gibi sertifika sağlayıcıları ile doğrudan entegre olarak otomatik olarak SSL/TLS sertifikaları alabilir ve yenileyebilir. Ancak biz bu makalede cert-manager ile daha esnek bir yönetim sağlayacağız.
* Yük Dengeleme: Gelen trafiği birden fazla uygulama örneğine dağıtabilir.
* Middleware Desteği: HTTP başlıklarını değiştirmek, kimlik doğrulama eklemek, sıkıştırma yapmak gibi ek işlevler için middleware’ler kullanabilir.
* Kolay Kurulum ve Yönetim: Hafif yapısı ve basit konfigürasyonu sayesinde hızla devreye alınabilir.

Traefik, Kubernetes Ingress Controller olarak görev yaparak dışarıdan gelen trafiği cluster içindeki servislere yönlendirir.

cert-manager

cert-manager, Kubernetes cluster’larında sertifikaları otomatik olarak sağlamak ve yönetmek için tasarlanmış güçlü bir eklentidir. Sertifika yaşam döngüsünü (oluşturma, yenileme, iptal etme) otomatize eder ve çeşitli sertifika yetkilileri (CA’lar) ile entegre olabilir.

* Otomatik Sertifika Yönetimi: Let’s Encrypt, HashiCorp Vault, Venafi gibi CA’lardan sertifika alabilir veya kendi PKI’nızı kullanarak sertifika oluşturabilir.
* Kubernetes-Native: Kubernetes API’sini ve CRD’lerini kullanarak çalışır. Certificate ve Issuer veya ClusterIssuer gibi kaynaklar tanımlarsınız.
* Yenileme Otomasyonu: Sertifikaların süresi dolmadan önce otomatik olarak yenilenmesini sağlar.
* Secret Yönetimi: Alınan sertifikaları Kubernetes Secret’ları olarak depolar, böylece Ingress Controller’lar veya diğer uygulamalar bunları kolayca kullanabilir.

Let’s Encrypt

Let’s Encrypt, İnternet Güvenlik Araştırma Grubu (ISRG) tarafından işletilen, ücretsiz, otomatik ve açık bir Sertifika Yetkilisidir (CA). Milyonlarca web sitesi tarafından kullanılmaktadır ve HTTPS’i herkes için erişilebilir hale getirme misyonuyla yola çıkmıştır.

* Ücretsiz: Herkesin ücretsiz olarak güvenilir SSL/TLS sertifikaları almasını sağlar.
* Otomatik: ACME (Automated Certificate Management Environment) protokolünü kullanarak sertifika alımını ve yenilemesini otomatize eder.
* Güvenilir: Tüm büyük tarayıcılar tarafından güvenilen kök sertifikalara sahiptir.

Let’s Encrypt, bir alan adının kontrolünü doğrulamak için çeşitli “challenge” yöntemleri kullanır. En yaygın olanları HTTP-01 ve DNS-01’dir. Biz bu makalede Traefik’in HTTP-01 challenge’ını kullanarak cert-manager aracılığıyla sertifika alacağız.

Ön Gereksinimler

Bu rehberi takip etmek için aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:

1. Çalışan Bir Kubernetes Cluster’ı: Minikube, Kind gibi yerel bir cluster veya GKE, AKS, EKS gibi bulut tabanlı bir cluster olabilir.
2. kubectl Aracı: Cluster’ınızla etkileşim kurmak için kubectl‘in kurulu ve yapılandırılmış olması.
3. Bir Alan Adı (Domain Name): Uygulamanıza erişmek için kullanacağınız, kayıtlı bir alan adına ihtiyacınız var. Örneğin, example.com.
4. Alan Adı Yönlendirmesi: Alan adınızın veya bir alt alan adının (örneğin, www.example.com veya app.example.com) Kubernetes cluster’ınızın Ingress Controller’ına (Traefik) işaret etmesi gerekmektedir. Bu genellikle alan adınızın DNS kayıtlarında bir A kaydı (IP adresi için) veya CNAME kaydı (başka bir host adına yönlendirme için) oluşturularak yapılır. Bulut sağlayıcılarında Traefik LoadBalancer servisi otomatik olarak bir dış IP veya host adı atayacaktır, bu değeri DNS kayıtlarınıza eklemeniz gerekecektir.

Adım Adım Uygulama

Şimdi, bileşenlerimizi Kubernetes cluster’ımıza kurup yapılandırmaya geçelim.

1. Traefik Kurulumu

Traefik’i Kubernetes’e dağıtmak için Helm kullanmak en kolay yoldur.

Öncelikle Traefik Helm deposunu ekleyin ve güncelleyin:

helm repo add traefik https://traefik.github.io/charts
helm repo update

Şimdi Traefik’i kendi namespace’ine kuralım. Burada Traefik’in bir LoadBalancer servisi olarak dışarıya açılmasını sağlayacağız. Eğer bulut ortamında değilseniz (minikube gibi), service.type değerini NodePort olarak ayarlamanız ve minikube service traefik --url komutuyla IP adresini almanız gerekebilir.

Aşağıdaki values.yaml dosyasını oluşturarak Traefik’in temel yapılandırmasını yapalım. Bu yapılandırma, Traefik’in IngressRoute CRD’lerini kullanmasını, HTTP’den HTTPS’e yönlendirme yapmasını ve bir dashboard sağlamasını içerir.

# traefik-values.yaml
ports:
  web:
    redirectTo: websecure
  websecure:
    tls:
      enabled: true

Enable the dashboard

dashboard: enabled: true domain: traefik.example.com # Dashboard için kullanacağınız domaini buraya yazın ## IngressRoute for the dashboard ingressRoute: enabled: true entryPoints: - websecure rule: Host(traefik.example.com) # Dashboard için kullanacağınız domaini buraya yazın tls: certResolver: letsencrypt # cert-manager tarafından yönetilecek options: {}

Kubernetes IngressRoute CRD'lerini etkinleştir

kubernetes: ingressRoute: enabled: true

LoadBalancer servisini etkinleştir

service: type: LoadBalancer annotations: {} # Cloud provider'a özel anotasyonlar buraya eklenebilir

Otomatik HTTPS için Let's Encrypt yapılandırması (cert-manager ile entegre)

Traefik'in kendi ACME client'ını değil, cert-manager tarafından oluşturulan Secret'ı kullanacağız.

Bu yüzden Traefik'in ACME yapılandırmasını burada devre dışı bırakıyoruz.

Ancak dashboard için IngressRoute'da certResolver'ı kullanmak cert-manager ile çalışmayacaktır.

Bunun yerine dashboard için de manuel olarak Certificate kaynağı tanımlayacağız.

Bu kısım daha sonra cert-manager ile yönetileceği için burada özel bir ACME yapılandırması yapmıyoruz.

Traefik'in kendisi sadece bir Ingress Controller ve HTTP/HTTPS router olarak görev yapacak.

Yukarıdaki traefik-values.yaml dosyasında, Traefik dashboard’ı için traefik.example.com gibi bir alan adı belirttik. Kendi alan adınıza göre bu değeri güncellemeyi unutmayın.

Şimdi Traefik’i Helm ile kuralım:

helm install traefik traefik/traefik \
  --namespace traefik \
  --create-namespace \
  -f traefik-values.yaml

Traefik podlarının çalışıp çalışmadığını kontrol edin:

kubectl get pods -n traefik
kubectl get svc -n traefik

kubectl get svc -n traefik komutu, Traefik LoadBalancer servisine atanmış harici IP adresini veya host adını gösterecektir. Bu adresi, alan adınızın (örneğin *.example.com veya traefik.example.com) DNS kayıtlarına A veya CNAME olarak eklemeyi unutmayın.

2. cert-manager Kurulumu

cert-manager’ı da Helm ile kuracağız.

Öncelikle cert-manager Helm deposunu ekleyin ve güncelleyin:

helm repo add jetstack https://charts.jetstack.io
helm repo update

cert-manager’ı kuralım. Kurulum sırasında CRD’lerinin de oluşturulması gerektiğini belirtmeliyiz:

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.13.1 \
  --set installCRDs=true

--version argümanını, cert-manager’ın en son kararlı sürümüyle güncellemeyi düşünebilirsiniz.

cert-manager podlarının çalıştığını doğrulayın:

kubectl get pods -n cert-manager

Üç pod görmelisiniz: cert-manager, cert-manager-cainjector ve cert-manager-webhook.

3. ClusterIssuer Yapılandırması

cert-manager’ın sertifika alabilmesi için bir Issuer veya ClusterIssuer tanımlamamız gerekiyor. ClusterIssuer, tüm cluster genelinde kullanılabilen bir sertifika sağlayıcısıdır. Let’s Encrypt ile sertifika almak için HTTP-01 challenge yöntemini kullanacağız ve bu challenge’ı Traefik Ingress Controller üzerinden çözeceğiz.

Öncelikle Let’s Encrypt’in “staging” (test) ortamını kullanarak sertifika almayı deneyeceğiz. Bu, Let’s Encrypt’in üretim ortamının limitlerine takılmadan test yapmamızı sağlar. Her şey yolunda gittiğinde “production” ortamına geçeceğiz.

clusterissuer-staging.yaml dosyasını oluşturun:

# clusterissuer-staging.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # Let's Encrypt'in staging sunucusu. Testler için kullanılır.
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: your-email@example.com # Kendi e-posta adresinizi buraya yazın
    privateKeySecretRef:
      # ACME hesabının özel anahtarını depolamak için bir Kubernetes Secret adı
      name: letsencrypt-staging-private-key
    solvers:
    - http01:
        ingress:
          class: traefik # Traefik Ingress Controller'ı kullanacağımızı belirtiyoruz

your-email@example.com kısmını kendi e-posta adresinizle güncellemeyi unutmayın. Let’s Encrypt, sertifika süresinin dolmak üzere olduğunu veya başka bir sorun olduğunda bu e-posta adresini kullanır.

Bu ClusterIssuer kaynağını uygulayın:

kubectl apply -f clusterissuer-staging.yaml

ClusterIssuer‘ın durumunu kontrol edin:

kubectl get clusterissuer letsencrypt-staging -o yaml

status.conditions altında Ready durumunun True olduğunu görmelisiniz.

Her şey yolunda giderse, şimdi clusterissuer-production.yaml dosyasını oluşturup Let’s Encrypt’in üretim ortamını yapılandıralım:

# clusterissuer-production.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-production
spec:
  acme:
    # Let's Encrypt'in üretim sunucusu. Gerçek sertifikalar için kullanılır.
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com # Kendi e-posta adresinizi buraya yazın
    privateKeySecretRef:
      name: letsencrypt-production-private-key
    solvers:
    - http01:
        ingress:
          class: traefik # Traefik Ingress Controller'ı kullanacağımızı belirtiyoruz

Bu ClusterIssuer kaynağını uygulayın:

kubectl apply -f clusterissuer-production.yaml

kubectl get clusterissuer letsencrypt-production -o yaml ile durumunu kontrol edin.

4. Uygulama Dağıtımı ve IngressRoute Oluşturma

Şimdi basit bir Nginx uygulaması dağıtalım ve bu uygulamaya Traefik IngressRoute aracılığıyla erişim sağlayalım.

nginx-app.yaml dosyasını oluşturun:

# nginx-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

Uygulamayı dağıtın:

kubectl apply -f nginx-app.yaml

Şimdi bu Nginx uygulamasına HTTPS üzerinden erişim sağlamak için bir Traefik IngressRoute ve bir Certificate kaynağı tanımlayacağız. Certificate kaynağı, cert-manager’a bir sertifika almasını ve bu sertifikayı belirli bir Kubernetes Secret’ında saklamasını söyleyecektir. IngressRoute ise bu Secret’ı kullanarak HTTPS trafiğini yönetecek.

ingressroute-app.yaml dosyasını oluşturun. host değerini ve tls.secretName değerini kendi alan adınıza göre güncellemeyi unutmayın.

# ingressroute-app.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-ingressroute
spec:
  entryPoints:
    - web
    - websecure
  routes:
    - match: Host(app.example.com) # Uygulamanız için kullanacağınız domaini buraya yazın
      kind: Rule
      services:
        - name: nginx-service
          port: 80
  tls:
    secretName: app-example-com-tls # cert-manager'ın oluşturacağı Secret'ın adı
    # options:
    #   name: my-tls-options@kubernetescrd # İsteğe bağlı, Traefik TLS seçenekleri

Uygulamanız için kullanacağınız app.example.com gibi bir alt alan adını veya ana alan adınızı Host() içinde belirtin. secretName değeri, cert-manager’ın oluşturacağı TLS Secret’ının adı olacaktır.

Bu IngressRoute kaynağını uygulayın:

kubectl apply -f ingressroute-app.yaml

5. Certificate Kaynağı Oluşturma

Şimdi cert-manager’a app.example.com için bir sertifika almasını söyleyen Certificate kaynağını oluşturalım. İlk başta letsencrypt-staging ClusterIssuer’ı kullanarak test edeceğiz.

certificate-staging.yaml dosyasını oluşturun:

# certificate-staging.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: app-example-com-certificate-staging
spec:
  secretName: app-example-com-tls # IngressRoute'da belirtilen Secret adı ile eşleşmeli
  dnsNames:
    - app.example.com # Sertifika almak istediğiniz domaini buraya yazın
  issuerRef:
    name: letsencrypt-staging # Staging ClusterIssuer'ımızı kullanıyoruz
    kind: ClusterIssuer

Bu Certificate kaynağını uygulayın:

kubectl apply -f certificate-staging.yaml

Sertifika talebinin durumunu izleyin:

kubectl get certificaterequest -w
kubectl describe certificate app-example-com-certificate-staging

Certificate kaynağının Ready durumunun True olduğunu ve Secret‘ın oluşturulduğunu görmelisiniz. Bu işlem birkaç dakika sürebilir. Eğer bir sorun olursa, kubectl describe certificate ve kubectl logs -n cert-manager deploy/cert-manager komutları hata ayıklama için faydalıdır.

Staging sertifikası başarıyla alındıktan sonra, aynı işlemi üretim sertifikası için yapacağız. Önce staging Certificate‘i silin:

kubectl delete certificate app-example-com-certificate-staging

Şimdi certificate-production.yaml dosyasını oluşturun:

# certificate-production.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: app-example-com-certificate-production
spec:
  secretName: app-example-com-tls # IngressRoute'da belirtilen Secret adı ile eşleşmeli
  dnsNames:
    - app.example.com # Sertifika almak istediğiniz domaini buraya yazın
  issuerRef:
    name: letsencrypt-production # Üretim ClusterIssuer'ımızı kullanıyoruz
    kind: ClusterIssuer

Bu Certificate kaynağını uygulayın:

kubectl apply -f certificate-production.yaml

Tekrar sertifika talebinin durumunu izleyin:

kubectl get certificaterequest -w
kubectl describe certificate app-example-com-certificate-production

Üretim sertifikası da başarıyla alındığında, app-example-com-tls adlı bir Secret’ın oluştuğunu göreceksiniz. Traefik IngressRoute’unuz bu Secret’ı otomatik olarak kullanmaya başlayacaktır.

Dashboard için Sertifika (İsteğe Bağlı):
Eğer Traefik dashboard’ı için de HTTPS erişimi istiyorsanız, dashboard için belirlediğiniz domain (traefik.example.com) için de bir Certificate kaynağı oluşturmanız gerekecektir.

# certificate-traefik-dashboard.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: traefik-dashboard-certificate
  namespace: traefik # Dashboard Traefik namespace'inde olduğu için
spec:
  secretName: traefik-dashboard-tls
  dnsNames:
    - traefik.example.com # Dashboard domaini
  issuerRef:
    name: letsencrypt-production
    kind: ClusterIssuer

Bu sertifikayı Traefik namespace’ine uygulayın ve Traefik values.yaml dosyasında dashboard ingressRoute‘unda tls.secretName: traefik-dashboard-tls olarak güncelleyin. Helm upgrade ile Traefik’i güncellemeyi unutmayın.

6. Erişimi Test Etme

Artık her şeyin çalıştığını doğrulamak için alan adınızı (örneğin https://app.example.com) bir web tarayıcısından ziyaret edin.

* Tarayıcınızın adres çubuğunda yeşil bir kilit simgesi veya “Güvenli” ibaresi görmelisiniz.
* Kilit simgesine tıklayarak sertifika detaylarını inceleyin. Sertifikanın Let’s Encrypt tarafından verildiğini ve alan adınız için geçerli olduğunu doğrulayın.
* HTTP’den HTTPS’e otomatik yönlendirmenin çalışıp çalışmadığını kontrol etmek için http://app.example.com adresini ziyaret edin. Otomatik olarak https://app.example.com adresine yönlendirilmelisiniz.

İleri Seviye Konular / En İyi Uygulamalar

DNS-01 Challenge

HTTP-01 challenge, genellikle Ingress Controller’lar için yeterli olsa da, bazı durumlarda DNS-01 challenge daha uygun olabilir:

Wildcard Sertifikalar: .example.com gibi wildcard sertifikalar almak için DNS-01 challenge zorunludur.
* İç Ağ Uygulamaları: Uygulamanızın internete açık olmadığı ancak yine de güvenliğe ihtiyacı olduğu durumlarda.
* Ağ Yapılandırması Kısıtlamaları: HTTP-01 challenge için port 80’in Traefik’e ulaşılabilir olması gerekir. Eğer bu mümkün değilse DNS-01 bir alternatiftir.

cert-manager, çeşitli DNS sağlayıcıları (Cloudflare, AWS Route 53, Google Cloud DNS vb.) ile entegre olabilir. DNS-01 challenge için ClusterIssuer yapılandırmasında http01 yerine dns01 solver’ı kullanmanız ve DNS sağlayıcınıza özel API kimlik bilgilerini bir Secret olarak sağlamanız gerekir.

Sertifika Yenileme

cert-manager, sertifikaların süresi dolmadan önce otomatik olarak yenilenmesini sağlar. Varsayılan olarak, sertifikalar son kullanma tarihlerinden 30 gün önce yenilenmeye başlar. Bu, sizin manuel olarak müdahale etmenize gerek kalmadan sitenizin sürekli olarak güvenli kalmasını sağlar.

cert-manager’ı İzleme

cert-manager’ın düzgün çalıştığından emin olmak için Prometheus ve Grafana gibi araçlarla izleyebilirsiniz. cert-manager, Prometheus uyumlu metrikler yayınlar. Ayrıca, kubectl get certificate ve kubectl describe certificate komutlarını düzenli olarak kontrol etmek, herhangi bir sorun olup olmadığını anlamanıza yardımcı olur.

Güvenlik En İyi Uygulamaları (Traefik Middleware)

Traefik Middleware’ler, HTTP isteklerini işlerken ek güvenlik önlemleri uygulamanıza olanak tanır.

* HSTS (HTTP Strict Transport Security): Tarayıcılara sitenize her zaman HTTPS üzerinden bağlanmalarını söyleyen bir başlık ekler. Bu, MitM (Man-in-the-Middle) saldırılarına karşı koruma sağlar.
* Güvenlik Başlıkları: X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy, Content-Security-Policy gibi başlıkları ekleyerek çeşitli web zafiyetlerine karşı koruma sağlayabilirsiniz.

Örnek bir HSTS Middleware tanımı:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: security-headers
  namespace: default
spec:
  headers:
    stsSeconds: 31536000 # 1 yıl
    stsIncludeSubdomains: true
    stsPreload: true
    contentTypeNosniff: true
    frameDeny: true
    browserXssFilter: true

Bu middleware’ı bir IngressRoute‘a eklemek için:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-ingressroute
spec:
  entryPoints:
    - web
    - websecure
  routes:
    - match: Host(app.example.com)
      kind: Rule
      services:
        - name: nginx-service
          port: 80
      middlewares:
        - name: security-headers@kubernetescrd # Middleware'i IngressRoute'a ekle
  tls:
    secretName: app-example-com-tls

Sorun Giderme

Kurulum sırasında veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* Sertifika Alınamıyor (Pending/Failed):
* kubectl describe certificate ve kubectl describe certificaterequest komutlarını çalıştırın. Olaylar (Events) bölümü genellikle sorunun nedenini açıkça belirtir.
* kubectl logs -n cert-manager deploy/cert-manager komutuyla cert-manager podunun günlüklerini kontrol edin.
* E-posta adresinizin doğru olduğundan ve Let’s Encrypt’e ulaşılabilir olduğundan emin olun.
* Alan adınızın Traefik LoadBalancer IP adresine doğru şekilde işaret ettiğinden emin olun. DNS yayılımı zaman alabilir. dig app.example.com komutuyla kontrol edin.
* Firewall kurallarınızın Let’s Encrypt’in ACME sunucularından gelen HTTP (port 80) isteklerine izin verdiğinden emin olun.
* ClusterIssuer‘daki solvers.http01.ingress.class değerinin Traefik’in doğru Ingress sınıfına işaret ettiğinden emin olun (genellikle traefik).

* HTTPS Yönlendirmesi Çalışmıyor:
* Traefik values.yaml dosyasındaki ports.web.redirectTo: websecure ayarının doğru olduğundan emin olun.
* IngressRoute tanımınızda entryPoints altında hem web hem de websecure‘ın listelendiğinden emin olun.

* Traefik Dashboard’a Erişilemiyor:
* Traefik LoadBalancer servisinin bir dış IP veya host adı aldığından emin olun (kubectl get svc -n traefik).
* Dashboard için kullandığınız alan adının bu IP adresine doğru şekilde yönlendirildiğinden emin olun.
* Traefik pod günlüklerini kontrol edin (kubectl logs -n traefik deploy/traefik).

* secretName Eşleşmiyor:
* Certificate kaynağındaki spec.secretName ile IngressRoute kaynağındaki tls.secretName değerlerinin tam olarak aynı olduğundan emin olun.

Sonuç

Kubernetes’te cert-manager, Traefik ve Let’s Encrypt üçlüsü, modern web uygulamalarınız için güçlü, esnek ve tamamen otomatik bir HTTPS çözümü sunar. Bu entegrasyon sayesinde, sertifika yönetimiyle ilgili manuel süreçleri ortadan kaldırarak geliştiricilerin ve operasyon ekiplerinin iş yükünü önemli ölçüde azaltırsınız.

Bu rehberde adım adım Traefik’i Ingress Controller olarak kurduk, cert-manager’ı otomatik sertifika yönetimi için yapılandırdık ve Let’s Encrypt ile ücretsiz, güvenilir SSL/TLS sertifikaları aldık. Ayrıca, güvenlik başlıkları gibi ek iyileştirmelerle sitenizin güvenliğini daha da artırmanın yollarını keşfettik.

HTTPS’in sadece bir seçenek değil, bir zorunluluk haline geldiği günümüz internet dünyasında, bu tür otomatize edilmiş çözümler, uygulamalarınızın güvenliğini ve kullanıcılarınızın gizliliğini sağlamanın en etkili yollarından biridir. Bu kurulumla, Kubernetes üzerinde güvenli ve yüksek performanslı uygulamalar çalıştırmak için sağlam bir temele sahip olursunuz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.