Merhaba, bu yazıda Kubernetes üzerinde çalışan servisleri Cloudflare Tunnel kullanarak internet üzerinden güvenli bir şekilde yayınlamayı anlatacağım.
Örnek olarak basit bir Nginx Deployment ile başlayacağız ve sonrasında Cloudflare Tunnel üzerinden dış dünyaya açacağız.
1. Kubernetes’te Nginx Deployment Oluşturma
Öncelikle projeyi düzenli tutmak için bir klasör oluşturalım:
mkdir nginx-deployment cd nginx-deployment
Deployment Dosyası (nginx-deployment.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
ports:
- containerPort: 80
Service Dosyası (nginx-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
Kubernetes üzerinde çalıştırmak için:
kubectl apply -f .
Servislerin çalışıp çalışmadığını kontrol edelim:
kubectl get all
2. Cloudflare Tunnel Oluşturma
Cloudflare hesabınıza giriş yapın ve şu adımları izleyin:
- Zero Trust menüsüne gidin.
- Ağlar → Tüneller sekmesine tıklayın.
- Tünel Oluştur butonuna basın.
- Tünel türünü cloudflared olarak seçin.
- Tünelinize bir isim verin.
- Kurulum için Docker seçeneğini işaretleyin.
- Size verilen token’ı kopyalayın.
3. Cloudflare Tunnel Token’ını Kubernetes’e Eklemek
Token’ı Base64 formatına dönüştürelim:
echo <tunnel_token> | base64
Secret dosyası oluşturuyoruz (tunnel-token.yaml):
apiVersion: v1 data: token: <base64_tunnel_token> kind: Secret metadata: name: tunnel-token namespace: default type: Opaque
Kubernetes üzerinde uygulayalım:
kubectl apply -f tunnel-token.yaml
4. Cloudflared Deployment Oluşturma
tunnel.yaml dosyası:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloudflared-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
pod: cloudflared
template:
metadata:
labels:
pod: cloudflared
spec:
securityContext:
sysctls:
- name: net.ipv4.ping_group_range
value: "65532 65532"
containers:
- image: cloudflare/cloudflared:latest
name: cloudflared
env:
- name: TUNNEL_TOKEN
valueFrom:
secretKeyRef:
name: tunnel-token
key: token
command:
- cloudflared
- tunnel
- --no-autoupdate
- --loglevel
- debug
- --metrics
- 0.0.0.0:2000
- run
livenessProbe:
httpGet:
path: /ready
port: 2000
failureThreshold: 1
initialDelaySeconds: 10
periodSeconds: 10
Uygulamak için:
kubectl apply -f tunnel.yaml
Pod’ların çalıştığını kontrol edelim:
kubectl get all
5. Cloudflare Üzerinde Rota Tanımlama
Tünel çalışıyorsa artık Cloudflare DNS ayarlarından bir alt alan adı ekleyip yönlendirme yapabiliriz.
- Servis türünü HTTP olarak seçin.
- Kubernetes üzerinde oluşturduğumuz servis adresini şu formatta yazın:
http://nginx-service:80
Artık alan adınızı ziyaret ederek Kubernetes üzerinde çalışan servisinizi Cloudflare Tunnel ile güvenli bir şekilde yayınlamış olacaksınız.
Sonuç
Bu yöntem sayesinde Kubernetes üzerindeki servisleri IP adresi veya LoadBalancer kullanmadan, sadece Cloudflare Tunnel ile internete açabilir ve güvenli bir şekilde yönetebilirsiniz.
Ben bu yöntemi özellikle geliştirme ortamlarında tercih ediyorum çünkü hem kolay hem de güvenli.
Üstelik Cloudflare Zero Trust sayesinde ek güvenlik politikaları eklemek de mümkün.