🏗️ Infrastructure🔐 SecurityCloudflare Zero TrustOverview

Cloudflare Zero Trust: Securing Infrastructure & Private Services

📅May 23, 2026
🏷️Infrastructure Security
⏱️8 min

Cloudflare Zero Trust Overview

Why I Needed Cloudflare Zero Trust

When I first deployed the Goalixa platform on my Kubernetes cluster, I had a critical security problem: all my private infrastructure tools were accessible via the internet to everyone.

The Wake-Up Call

I had ArgoCD, Harbor (my container registry), and Grafana (monitoring) all running with their own authentication systems. While they were password-protected, anyone on the internet could reach the login pages. This meant:

  • ArgoCD (my GitOps deployment tool) accessible at internal1.example.com
  • Harbor (container registry with all my Docker images) accessible at internal2.example.com
  • Grafana (all my metrics and dashboards) accessible at internal3.example.com

Every day, I’d see thousands of failed login attempts in the logs. It was clear I needed a better solution.

What I Wanted

I needed a private network for these internal tools - something like OpenFortiVPN or OpenVPN where only authenticated users on specific devices could even reach these services.

But I didn’t want to:

  • Manage another piece of infrastructure (VPN server)
  • Deal with VPN client installations and certificate management
  • Maintain firewall rules across 4 nodes
  • Lose the convenience of accessing tools from anywhere

Discovering Cloudflare Zero Trust

That’s when I found Cloudflare Zero Trust. It offered everything I wanted:

  • Identity-based access - services only accessible after email verification
  • No VPN server to maintain - Cloudflare handles it all
  • Device verification - WARP client ensures trusted devices only
  • Audit logs - complete trail of who accessed what and when
  • Free tier - perfect for my 4-node cluster

The Decision

I decided to implement Cloudflare Zero Trust on my own cluster. The goal was simple:

  • Public services (example.com, app.example.com) remain open to everyone
  • Private services (ArgoCD, Harbor, Grafana) require authentication
  • Infrastructure access (SSH, kubectl) only via secure WARP tunnel

What I Implemented

WARP Client Connected

I completed the full Cloudflare Zero Trust implementation across four phases:

Phase One: Cloudflare Tunnel

Installed cloudflared on my master node and created an outbound-only tunnel. All 5 domains now route through Cloudflare with 4 high-availability connections to EU-Central data centers.

Result: Zero open inbound ports for HTTP/HTTPS traffic


Phase Two: Public Services

Configured example.com and app.example.com to route through the tunnel while remaining publicly accessible.

Result: Public services benefit from Cloudflare’s global CDN and DDoS protection


Phase Three: Private Services

Added Cloudflare Access authentication to ArgoCD, Harbor, and Grafana. Now anyone trying to access these services sees a Cloudflare Access login page requiring email verification.

Access Application Report

Result: Management tools now require email OTP before access


Phase Four: Infrastructure Access

Configured WARP client for secure access to SSH (port 22) and kubectl (port 6443). Set up Gateway firewall policies to control access at the network level.

Gateway Network Logs

Result: kubectl API server (port 6443) only accessible via WARP, SSH (port 22) routing through WARP


Current Security Posture

Tunnel Connector Status

What’s Protected:

  • Private HTTP services - ArgoCD, Harbor, Grafana all require email authentication
  • Kubernetes API - kubectl only works when WARP is connected
  • Centralized access control - all policies managed in one dashboard
  • Complete audit trail - every access logged with timestamp and user

What Changed:

  • Before: Anyone could reach login pages of internal tools
  • After: Internal tools require Cloudflare Access email verification first

The Setup

The implementation took about 6 hours spread across one day. Here’s what’s running now:

  • Tunnel: 4 HA connections, 17MB memory, less than 1% CPU
  • Domains: 5 total (2 public, 3 private)
  • Access Policies: Email OTP with 24-hour sessions
  • WARP: Split tunnel mode with 4 cluster IPs
  • Cost: $0/month (Cloudflare Zero Trust free tier)

What’s in This Guide

This complete guide walks you through my implementation:

How It Works & Architecture

Read the architecture guide →

Understand the Cloudflare Zero Trust architecture, how traffic flows through the system, and how each component (Tunnel, Access, WARP, Gateway) works together.

Topics covered:

  • Architecture diagrams and traffic flows
  • Cloudflare Tunnel mechanics
  • Access authentication flow
  • WARP and Gateway integration
  • Security model explained

Complete Setup Guide

Read the setup guide →

Step-by-step configuration guide with actual commands, config files, and screenshots from my implementation.

What you’ll learn:

  • How to install and configure cloudflared
  • Creating tunnels and routing domains
  • Setting up Cloudflare Access for private services
  • Configuring WARP client and Gateway policies
  • DNS configuration and verification

Troubleshooting

Read the troubleshooting guide →

Common issues I encountered, root causes, and solutions.

Issues covered:

  • 500 Internal Server Errors (localhost vs external IP)
  • DNS resolution problems (A records vs CNAME)
  • WARP routing issues
  • Access authentication failures
  • Emergency recovery procedures

Performance & Metrics

Read the performance guide →

Real-world performance data, metrics, and audit logs from my production implementation.

Metrics included:

  • Tunnel connection health and uptime
  • Access authentication logs
  • Gateway network traffic logs
  • Device information and posture
  • Cost savings and ROI

Quick Navigation

Want to implement this yourself? Start here: How It Works & Architecture

Just want to see the config? Jump to: Complete Setup Guide

Facing issues? Check: Troubleshooting

Curious about results? See: Performance & Metrics


My Infrastructure

For context, here’s what I’m securing:

Cluster: 4-node Kubernetes (kubeadm)

  • Master node at EU-Central
  • Worker nodes at EU-Central and EU-North

Public Services:

  • example.com (landing page)
  • app.example.com (PWA application)

Private Services:

  • internal1.example.com (GitOps)
  • internal2.example.com (Container registry)
  • internal3.example.com (Grafana)

Stack:

  • CNI: Cilium
  • Ingress: nginx-ingress
  • Storage: Longhorn
  • GitOps: ArgoCD
  • Monitoring: Prometheus + Grafana