Traefik, modern altyapılarda yaygın kullanılan reverse proxy ve load balancer çözümlerinden biri. v3 sürümüyle birlikte Kubernetes entegrasyonu, otomatik TLS yönetimi ve gelişmiş middleware desteği gibi önemli özellikler sunuyor.
Docker Ortamında Kurulum
Docker kullanarak Traefik v3 kurulumu en pratik yöntemlerden biri. Aşağıdaki docker-compose dosyası temel yapılandırmayı içeriyor:
services:
traefik:
image: traefik:v3.0
container_name: traefik
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/etc/traefik/traefik.yml:ro
- ./certs:/certs
restart: unless-stopped
networks:
- web Bu yapılandırmada Docker socket'i okunabilir olarak bağlanıyor. Traefik bu sayede Docker daemon'a erişerek container değişikliklerini dinamik olarak takip edebiliyor. Sertifika dosyaları için ayrı bir dizin oluşturulması öneriliyor.
Temel Yapılandırma Dosyası
Traefik v3, YAML tabanlı yapılandırma kullanıyor. Aşağıdaki örnek temel ayarları içeriyor:
api:
dashboard: true
insecure: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
tls:
certResolver: letsencrypt
certificatesResolvers:
letsencrypt:
acme:
email: admin@domain.com
storage: /certs/acme.json
httpChallenge:
entryPoint: web Bu yapılandırma HTTP trafiğini otomatik olarak HTTPS'e yönlendiriyor. Let's Encrypt sertifika yenileme için gerekli dizin ve dosya izinlerinin doğru ayarlanması gerekiyor. acme.json dosyasının izinleri 600 olarak ayarlanmalı.
Kubernetes Üzerinde Kurulum
Kubernetes ortamında Helm ile kurulum tercih ediliyor. Öncelikle Helm repository eklenmeli:
helm repo add traefik https://traefik.github.io/charts
helm repo update
helm install traefik traefik/traefik -n traefik --create-namespace values.yaml dosyası ile özelleştirme yapılabiliyor. Aşağıdaki örnek dashboard, HTTPS yönlendirme ve sertifika resolver ayarlarını içeriyor:
ingressRoute:
dashboard:
enabled: true
ports:
web:
redirectTo: websecure
websecure:
tls:
enabled: true
additionalArguments:
- "--certificatesresolvers.letsencrypt.acme.email=admin@domain.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
persistence:
enabled: true Sertifikaların pod restart sonrası kaybolmaması için persistence ile kalıcı volume bağlanması gerekiyor. Traefik v3'ün Kubernetes entegrasyonu IngressClass mekanizmasını kullanıyor. Varsayılan olarak traefik ismiyle oluşturuluyor.
Ingress Tanımlama
Kubernetes üzerinde Ingress kullanımı şu şekilde:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
rules:
- host: myapp.domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80 Annotations bölümünde entrypoint ve TLS ayarları belirtiliyor. Router seviyesindeki bu ayarlar Ingress nesnesinin kendisinde değil annotation katmanında taşınıyor.
Otomatik TLS Yönetimi
Let's Encrypt entegrasyonu ile Traefik otomatik olarak sertifika alıp yenileyebiliyor. HTTP-01 challenge yöntemi en yaygın kullanılan tercih. Yukarıdaki yapılandırmada httpChallenge bölümü bu işlevi görüyor.
Sertifikaların saklandığı acme.json dosyası JSON formatında. İlk çalıştırmada boş olarak oluşturulmalı:
touch acme.json
chmod 600 acme.json Traefik başlatıldığında Let's Encrypt sunucularıyla iletişime geçerek ilk sertifikayı alıyor. Yenileme işlemi arka planda otomatik yapılıyor.
Middleware Yapılandırma
Traefik v3'te middleware'ler istek işleme zincirini oluşturuyor. Sık kullanılan örnekler:
- BasicAuth: Temel kimlik doğrulama için
- RateLimit: İstek sınırlama için
- StripPrefix: Path prefix kaldırma için
- RedirectRegex: URL yönlendirme için
Kubernetes ortamında Middleware CRD'si kullanılıyor. v3 ile birlikte CRD'lerde traefik.io API grubu geçerli; eski traefik.containo.us grubu v3'te çalışmıyor:
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: strip-prefix
spec:
stripPrefix:
prefixes:
- /api
- /v1 Ingress annotation'ında bu middleware referans veriliyor.
Service Yapılandırma
Traefik v3, Docker labels veya Kubernetes service annotation'ları ile otomatik keşif yapıyor. Docker Compose'ta label kullanımı:
services:
webapp:
image: nginx:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.webapp.rule=Host(`app.domain.com`)"
- "traefik.http.routers.webapp.tls=true"
- "traefik.http.services.webapp.loadbalancer.server.port=80" Bu yaklaşım ile her yeni container otomatik olarak Traefik tarafından keşfedilip load balancer havuzuna ekleniyor.
Traefik v3, reverse proxy ihtiyaçları için güçlü bir çözüm sunuyor. Otomatik TLS, dinamik yapılandırma ve Kubernetes entegrasyonu öne çıkan özellikler. Kurulum süreci oldukça basit, label veya annotation tabanlı yapılandırma ile hızlıca devreye alınabiliyor. Let's Encrypt entegrasyonu sayesinde manuel sertifika işlemleri tarih oluyor. Hem Docker hem Kubernetes ortamlarında sorunsuz çalışması, altyapı bağımsızlığı açısından avantaj sağlıyor.