4.5 Cloudflare Tunnel
Cloudflare Tunnel wird verwendet, um den Zugriff auf interne Services des Kubernetes-Clusters sicher und ohne direkte Öffnung von Ports für das öffentliche Internet bereitzustellen. Der Tunnel verbindet interne Dienste mit der öffentlichen Cloudflare-Infrastruktur und bietet so eine sichere Zugriffsmöglichkeit.
Vorteile von Cloudflare Tunnel
-
Kein Öffnen von Ports: Dienste können sicher ohne Öffnen von Ports erreichbar gemacht werden.
-
Sichere Verbindung: Die Verbindung wird über verschlüsselte Tunnel direkt zu Cloudflare aufgebaut.
-
Einfache DNS-Integration: Dienste können direkt mit Subdomains konfiguriert werden.
-
DDOS-Schutz: Cloudflare bietet integrierten Schutz vor DDOS-Angriffen.
Installation und Konfiguration von Cloudflare Tunnel
1. Namespace erstellen
Ein separater Namespace wird für den Cloudflare Tunnel erstellt:
kubectl create namespace eventgallery
2. API-Tokens erstellen
Ein API-Token wird im Cloudflare-Dashboard erstellt, um den Tunnel zu authentifizieren. Dieses Token wird als Kubernetes-Secret gespeichert:
kubectl create secret generic tunnel-credentials \
--from-file=credentials.json=<PATH_TO_CREDENTIALS_FILE> \
-n eventgallery
3. ConfigMap erstellen
Die Tunnelkonfiguration wird in einer ConfigMap gespeichert, um die Verbindung zu Cloudflare und die Weiterleitung zu internen Services zu definieren.
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: cloudflared
namespace: eventgallery
data:
config.yaml: |
tunnel: eventgallery-tunnel
credentials-file: /etc/cloudflared/creds/credentials.json
metrics: 0.0.0.0:2000
no-autoupdate: true
ingress:
- hostname: gallery.luchsphoto.ch
service: http://frontend-service.eventgallery.svc.cluster.local:80
- hostname: api.luchsphoto.ch
service: http://backend-service.eventgallery.svc.cluster.local:80
- service: http_status:404
EOF
Die Konfiguration basiert auf dem bereitgestellten Manifest cloudflared.yaml.
Deployment Details
Das Deployment stellt den Cloudflare Tunnel in einem skalierbaren Setup bereit und nutzt zwei Replikate, um die Ausfallsicherheit zu gewährleisten. Es werden Ressourcenanforderungen und Liveness-Probes konfiguriert, um die Stabilität des Dienstes sicherzustellen.
Beispiel: cloudflared.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloudflared
namespace: eventgallery
spec:
replicas: 2 # Scalable deployment
selector:
matchLabels:
app: cloudflared
template:
metadata:
labels:
app: cloudflared
spec:
containers:
- name: cloudflared
image: cloudflare/cloudflared:2025.1.0
args:
- tunnel
- --config
- /etc/cloudflared/config/config.yaml
- run
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
livenessProbe:
httpGet:
path: /ready
port: 2000
failureThreshold: 1
initialDelaySeconds: 10
periodSeconds: 10
volumeMounts:
- name: config
mountPath: /etc/cloudflared/config
readOnly: true
- name: creds
mountPath: /etc/cloudflared/creds
readOnly: true
volumes:
- name: creds
secret:
secretName: tunnel-credentials
- name: config
configMap:
name: cloudflared
items:
- key: config.yaml
path: config.yaml
ConfigMap Details
Die ConfigMap definiert die spezifischen Tunnel-Konfigurationen, einschließlich der Zuweisung von Subdomains zu internen Services und allgemeinen Tunnel-Optionen.
apiVersion: v1
kind: ConfigMap
metadata:
name: cloudflared
namespace: eventgallery
data:
config.yaml: |
tunnel: eventgallery-tunnel
credentials-file: /etc/cloudflared/creds/credentials.json
metrics: 0.0.0.0:2000
no-autoupdate: true
ingress:
- hostname: gallery.luchsphoto.ch
service: http://frontend-service.eventgallery.svc.cluster.local:80
- hostname: api.luchsphoto.ch
service: http://backend-service.eventgallery.svc.cluster.local:80
- service: http_status:404
Verbindungstest
Nach der Bereitstellung können die konfigurierten Subdomains getestet werden:
-
Frontend:
https://gallery.luchsphoto.ch -
Backend:
https://api.luchsphoto.ch
Eine fehlerhafte Anfrage sollte den HTTP-Status 404 zurückgeben.
Weitere Informationen
Details zur Konfiguration und Nutzung von Cloudflare Tunnel finden Sie in der offiziellen Cloudflare Tunnel Dokumentation.