Cloudflared
Cloudflared is the tunnel client used to expose selected services outside the homelab.
It is part of infrastructure because it is shared access plumbing, not a user-facing application.
Current implementation
| Property | Value |
|---|---|
| Status | Active |
| Image | cloudflare/cloudflared:2026.7.1 |
| Namespace | cloudflared |
| Tunnel | Locally managed homelab tunnel |
| Credential source | Vault through External Secrets |
| Public hostnames | linkding.hyperoot.dev, postiz.hyperoot.dev |
| Origins | Linkding and Postiz cluster Services |
What it depends on
- External Secrets, through
gitops/clusters/lab/infrastructure-controllers.yaml - A synced Kubernetes secret named
cloudflared-secret - A Vault value at
cloudflared/tunnel
What depends on it
- Public access to Linkding at
linkding.hyperoot.dev - Public access to Postiz at
postiz.hyperoot.dev
Where it is activated
gitops/clusters/lab/infrastructure-controllers.yamlgitops/clusters/lab/infrastructure-configs.yamlgitops/infrastructure/configs/lab/cloudflared/kustomization.yamlgitops/infrastructure/configs/lab/cloudflared/external-secret.yamlgitops/infrastructure/configs/base/cloudflared/
Current repository intent
The repository expects this flow:
- Vault stores the locally managed tunnel credential JSON.
- External Secrets reads that value from Vault.
- A Kubernetes secret named
cloudflared-secretis created in thecloudflarednamespace. - The Cloudflared deployment mounts that secret as
credentials.json. - A local configuration routes each public hostname to its application Service.
If any earlier step is missing, the Cloudflared connector cannot establish the tunnel.
Published services
linkding.hyperoot.devroutes tolinkding-service.linkding.svc.cluster.local:9090.postiz.hyperoot.devroutes topostiz.postiz.svc.cluster.local:5000.
The cross-service relationship is described in Secrets flow.