5.7 KiB
Oefening 03b (Bonus) — Cloudflare Tunnel voor webhooks
Tijd: ~30–45 minuten Doel: Je lokale workshop-cluster vanaf internet bereikbaar maken voor inkomende webhooks (bijv. GitHub -> Tekton).
Wat je leert
- Waarom host-only networking (
192.168.56.x) niet direct bereikbaar is vanaf internet - Hoe Cloudflare Tunnel verkeer van internet veilig naar een interne Kubernetes-service brengt
- Hoe je dit later gebruikt in Oefening 04 voor echte GitHub webhooks
Leeswijzer
Voor beginners (optioneel): Zie Cloudflare Tunnel als een "uitgaande connector": een pod in jouw cluster belt zelf uit naar Cloudflare. Daarna kan Cloudflare inkomend verkeer over die bestaande verbinding terugsturen. Je hoeft dus geen poorten op je laptop/router open te zetten.
Vereisten
- Oefening 03 afgerond (Ingress-Nginx werkt)
- Een Cloudflare account
- Een domein dat je in Cloudflare beheert
- Je repo/fork op
main
Architectuur (hoog niveau)
GitHub webhook
|
v
https://tekton-webhook.<jouw-domein>
|
v
Cloudflare Edge
|
v
Cloudflare Tunnel (cloudflared pod in cluster)
|
v
el-github-push-listener.tekton-pipelines.svc:8080
Belangrijk:
- Dit werkt ook als je cluster alleen op host-only netwerk draait.
- Cloudflare bereikt je cluster via de actieve tunnelverbinding, niet via je LAN-IP.
Stappen
1. Tunnel in Cloudflare aanmaken
In Cloudflare dashboard:
- Ga naar Zero Trust (of Cloudflare One)
- Ga naar Networks -> Tunnels
- Klik Create a tunnel
- Kies Cloudflared
- Geef een naam, bijvoorbeeld
ops-demo-workshop - Cloudflare toont een Tunnel Token (lange string) — bewaar deze veilig
Voor beginners (optioneel): Die token is het wachtwoord waarmee jouw
cloudflaredpod zich aanmeldt. Iedereen met deze token kan jouw tunnel gebruiken; behandel hem als secret.
2. Public hostname in Cloudflare configureren
In dezelfde tunnel:
- Ga naar Public Hostnames
- Voeg een hostname toe, bijvoorbeeld:
- Subdomain:
tekton-webhook - Domain:
<jouw-domein>
- Subdomain:
- Service type:
HTTP - URL:
http://el-github-push-listener.tekton-pipelines.svc.cluster.local:8080 - Sla op
Voor beginners (optioneel): Deze URL is expres een interne Kubernetes-service. Alleen de cloudflared pod hoeft die te kunnen bereiken; internet ziet alleen de publieke hostname.
3. Kubernetes manifests toevoegen
Maak de volgende bestanden.
manifests/networking/cloudflared/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: cloudflare
manifests/networking/cloudflared/token.secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: cloudflared-token
namespace: cloudflare
type: Opaque
stringData:
token: "PLAK_HIER_JE_CLOUDFLARE_TUNNEL_TOKEN"
manifests/networking/cloudflared/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloudflared
namespace: cloudflare
spec:
replicas: 1
selector:
matchLabels:
app: cloudflared
template:
metadata:
labels:
app: cloudflared
spec:
containers:
- name: cloudflared
image: cloudflare/cloudflared:2025.2.1
args:
- tunnel
- --no-autoupdate
- run
- --token
- $(TUNNEL_TOKEN)
env:
- name: TUNNEL_TOKEN
valueFrom:
secretKeyRef:
name: cloudflared-token
key: token
resources:
requests:
cpu: 20m
memory: 64Mi
apps/networking/cloudflared.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cloudflared
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "4"
spec:
project: workshop
source:
repoURL: JOUW_FORK_URL
targetRevision: HEAD
path: manifests/networking/cloudflared
destination:
server: https://kubernetes.default.svc
namespace: cloudflare
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Vervang:
PLAK_HIER_JE_CLOUDFLARE_TUNNEL_TOKENJOUW_FORK_URL
4. Committen en pushen
HOST
git add apps/networking/cloudflared.yaml manifests/networking/cloudflared/ git commit -m "feat: add cloudflared tunnel connector" git push
Wacht daarna op Synced/Healthy:
VM
kubectl get application cloudflared -n argocd kubectl get pods -n cloudflare
5. Tunnel-status controleren
VM
kubectl logs -n cloudflare deploy/cloudflared --tail=100
Zoek op regels zoals "connected" of "registered tunnel connection".
6. Voorbereiden op Oefening 04 webhook
Als je in Oefening 04 Tekton Triggers hebt geïnstalleerd, gebruik in GitHub:
- Payload URL:
https://tekton-webhook.<jouw-domein>
Dus niet meer de host-only URL met 192.168.56.200.nip.io.
Probleemoplossing
| Symptoom | Oplossing |
|---|---|
| cloudflared pod blijft CrashLoopBackOff | Controleer of de tunnel token klopt en niet verlopen/ingetrokken is |
| Tunnel lijkt up, maar webhook geeft 502/504 | Controleer of el-github-push-listener service bestaat in tekton-pipelines |
| Geen verkeer in Tekton na GitHub push | Controleer GitHub webhook deliveries + event type push + secret |
Argo app cloudflared blijft Unknown |
Controleer of repoURL in apps/networking/cloudflared.yaml naar jouw fork wijst |
Security-opmerking
Gebruik in een echte omgeving liever:
- externe secret manager voor tunnel token
- aparte Cloudflare tunnel per omgeving
- least-privilege Cloudflare account/API instellingen
Voor deze workshop is één token in een Kubernetes Secret voldoende.