Home » Genel » Kubernetes Üzerinde Cloudflare Tunnel Kullanımı

Kubernetes Üzerinde Cloudflare Tunnel Kullanımı

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:

  1. Zero Trust menüsüne gidin.
  2. Ağlar → Tüneller sekmesine tıklayın.
  3. Tünel Oluştur butonuna basın.
  4. Tünel türünü cloudflared olarak seçin.
  5. Tünelinize bir isim verin.
  6. Kurulum için Docker seçeneğini işaretleyin.
  7. 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.

Yorum yapın