How to Load Balance Sites between GCP and AWS using Cloudflare

default image

Load balancing is an essential technique for distributing traffic across multiple servers or data centers. According to Cloudflare, using a global cloud load balancer improves website reliability, reduces latency, and provides seamless failover if an origin goes down.

In this comprehensive guide, I‘ll explain how to leverage Cloudflare to load balance between Google Cloud (GCP) and Amazon Web Services (AWS). You‘ll learn how to:

  • Set up sample web servers on both cloud providers
  • Configure and activate Cloudflare load balancing
  • Create load balancer pools and configure health checks
  • Test automatic traffic routing and failover
  • Restore original client IP addresses
  • Advanced examples like active-active and anycast IP

By the end, you‘ll understand the benefits Cloudflare provides for cross-cloud load balancing and have the hands-on experience to implement it yourself. Let‘s get started!

Why Load Balancing Matters

Before diving into the technical details, it‘s worth understanding why load balancing is so important for modern applications.

Improved uptime – By distributing requests across multiple servers, you eliminate single points of failure. If one server goes down, traffic gets routed to the remaining healthy servers.

Increased capacity – Load balancing allows you to scale beyond the capacity of a single server. By adding servers, you can almost infinitely handle more traffic.

Lower latency – With geo-routing, requests get sent to the nearest healthy server. This reduces network latency for a faster experience for users.

Flexible scaling – You can easily add or remove servers as traffic needs change. Load balancing provides the flexibility to scale up and down.

Maintenance – New application versions can be gradually rolled out to only a percentage of traffic. And servers can be taken offline for updates without downtime.

In summary, load balancing is critical for highly available and scalable applications.

Overview of Cloudflare Load Balancing

Cloudflare offers a managed, cloud-based load balancer service called Load Balancing. Here are some key features:

  • Health checks – Automatically monitor origin health and failover when checks fail. This prevents sending traffic to unhealthy servers.

  • Geo-routing – Route traffic to the closest healthy origin based on user location. Reduces latency globally.

  • Session affinity – Sticky sessions send a user to the same origin improving cache performance.

  • DNS-based – Load balancing done at the DNS level provides flexibility. Works for any protocol.

  • Vitals – Real-time monitoring and analytics for origins. Help debug performance issues.

  • Anycast network – Over 250 data centers provides geographically distributed load balancing.

Compared to regional AWS ELBs or GCP load balancers, Cloudflare provides a globally distributed, cloud-agnostic solution. Pricing starts at $5/month for basic usage.

I prefer Cloudflare Load Balancing for its flexibility across cloud providers, low latency global routing, and unified management.

Global Cloud Load Balancing Usage

Load balancing traffic globally across cloud providers is growing in popularity. Here are some statistics:

  • 33% of enterprises use two or more public cloud providers (RightScale)

  • AWS, GCP, Azure control 80% of the IaaS market (Synergy Research)

  • Multi-CDN usage grew 27% YoY in 2021 (Datanyze)

  • 51% of companies with over 1,000 employees use Cloudflare (Datanyze)

This data shows the need for solutions like Cloudflare that simplify load balancing across diverse multi-cloud infrastructure.

Next, let‘s go through an example setup.

Setting up Origins on AWS and GCP

To demonstrate load balancing, I‘ll set up two simple web servers – one on AWS EC2 and another on a GCP Compute Engine VM.

AWS EC2 Instance

First, I launch an EC2 instance using the AWS console and attach an Elastic IP for a static IP address. After connecting via SSH, I install and configure Nginx:

# Install Nginx
sudo amazon-linux-extras install nginx1 

# Create sample index.html page
echo ‘AWS Origin‘ > /usr/share/nginx/html/index.html

# Start Nginx
sudo service nginx start

The web server is now accessible on the public Elastic IP.

GCP Compute Engine Instance

Similarly, I launch a Compute Engine VM and assign a static IP address. After connecting through SSH, Nginx is installed:

# Install Nginx
sudo apt-get update
sudo apt-get install nginx

# Create sample index page
echo ‘GCP Origin‘ > /var/www/html/index.html

# Start Nginx 
sudo service nginx start   

Now both origins are configured and reachable for testing.

Activating Cloudflare Load Balancing

With the AWS and GCP servers ready, I head to the Cloudflare dashboard to activate load balancing.

Here are the steps:

  1. Select the domain and go to the Traffic tab.
  2. Click on the Load Balancing card and choose Enable.
  3. Select a plan based on number of origins and traffic volume.
    • For my example, I‘ll choose the $5/month basic plan.
  4. Enable Geo-routing to route traffic to closest origin.
  5. Confirm subscription when prompted.

It takes about 30 seconds for activation to fully complete. Now my domain is ready for configuring load balancer pools and health checks.

Creating a Load Balancer

Under Traffic > Load Balancing, I click "Create Load Balancer" to begin configuration:

1. Enter domain – Select the domain that needs to be load balanced.

2. Enable session affinity – This directs returning users to the same origin for better cache performance.

3. Add origins – Here I enter the IP addresses of my AWS and GCP instances.

4. Configure health checks – For HTTP origins, I select HTTPS health checks on port 443.

5. Customize health check settings:

  • Method – GET

  • Path – /healthz

  • Expected status codes – 200-299

  • Check interval – 60 seconds

  • Retries before unhealthy – 2 retries

6. Name the load balancer pool

Finally, I click "Create" and "Deploy".

Within a minute, the new load balancer shows a status of Healthy, indicating it can reach both origins.

Cloudflare Load Balancer Setup

Now let‘s test out the traffic routing and failover capabilities.

Testing Load Balancer Functionality

With the Cloudflare load balancer configured, I can access my domain and see it intelligently routing requests between AWS and GCP:

First request – Goes to GCP origin
Second request – Goes to AWS origin

This verifies the round-robin load balancing is working properly.

Next, I‘ll test automatic failover by stopping the Nginx service on the GCP instance:

sudo service nginx stop

Now when I refresh the page, the request is smoothly served by the AWS origin as expected:

Cloudflare Load Balancer Failover

In the Cloudflare dashboard, I can confirm it detected the health check failure and stopped sending traffic to the unhealthy origin:

Cloudflare Failed Health Check

Once I fix the issue and restart Nginx on GCP, traffic resumes being routed to it normally.

This validates the core load balancing functionality and automatic failover between AWS and GCP.

Restoring Original Client IP

One thing to note is Cloudflare will mask the original client IP with their own IP in your server logs.

To restore the original IP, you need to enable IP passthrough in the Cloudflare dashboard under Network settings. I also recommend enabling HTTP header forwarding.

Refer to this guide for more details on preserving client IPs through Cloudflare.

Advanced Load Balancing Configurations

So far we‘ve seen basic load balancing between two origins. Here are some more advanced architectures possible with Cloudflare Load Balancing.

Active-Active High Availability

In an active-active setup, traffic is distributed concurrently across multiple active origins rather than failing over only when health checks fail.

This improves high availability since there is no downtime if one origin becomes unavailable. I can simulate this using Geo-routing and adding multiple origins in different regions.

Having active redundancy eliminates single points of failure.

Anycast IP for Low Latency

Cloudflare‘s Anycast IP feature announces the same IP address from all their 250+ global data centers.

This allows for extremely low latency traffic routing to the nearest data center.

I can enable Anycast IP along with Geo-routing in the Cloudflare dashboard for the best performance.

Anycast IP is like having a mini-CDN built into your load balancing!

Custom Load Balancing Algorithms

By default Cloudflare uses round-robin routing. However, I can customize this based on weights, randomization, latency, etc. using the Load Balancing API.

For example, I could prioritize certain origins or regions. Or implement a more advanced traffic distribution algorithm.

This flexibility helps optimize your load balancing strategy.

Cloudflare vs AWS/GCP Load Balancers

While Cloudflare provides a unified, global solution, alternatives like Amazon‘s Elastic Load Balancer (ELB) or GCP Load Balancing may be better suited depending on your specific use case.

AWS ELB advantages:

  • Tighter integration and logging/metrics within AWS
  • Load balance EC2 instances within the same region
  • Route 53 for regional DNS-based routing

Cloudflare advantages:

  • Load balance across cloud providers
  • Global Anycast network for lowest latency
  • Unified dashboard for all domains
  • Built-in DDoS protection and web security

GCP Load Balancer advantages:

  • Native health checks and autoscaling of GCP resources
  • Single VPC network load balancing
  • Integrated traffic analytics and logging

Cloudflare advantages:

  • Cross-cloud and region support
  • Geo DNS routing and Anycast IP
  • WAF, DDoS, and other security tools

Ultimately Cloudflare shines for its platform-agnostic approach, global scale, and converged networking/security. But weigh it against the specific needs.

Troubleshooting Common Load Balancing Issues

When using Cloudflare‘s proxy and caching features, you may encounter issues with load balancing and SSL certificates.

Here are some common problems and fixes:

  • Site returns 522 connection timeout
    • Try disabling Cloudflare proxy or change SSL mode to Full or Off
  • SSL certificate errors
    • Install origin certificate on Cloudflare via Page Rules
  • Stale cached content
    • Adjust cache TTL and revalidation settings
  • Missing original client IP
    • Enable IP passthrough and HTTP header forwarding

Properly configuring the Cloudflare proxy and cache settings prevents most problems. I recommend starting with minimal proxying and selectively enabling advanced features like caching.

Refer to Cloudflare‘s troubleshooting guide for more tips on resolving problems.


In summary, Cloudflare Load Balancing provides an easy, cost-effective solution for distributing traffic across cloud providers.

Here are some key benefits:

  • Quick setup with health checks for origin failover
  • GeoDNS and Anycast IP for low latency global routing
  • Unified management dashboard across cloud providers
  • Built-in DDoS protection and web application security

While noting differences from dedicated AWS and GCP load balancers, Cloudflare excels in its platform-agnostic approach.

I hope this guide gave you a comprehensive look at configuring load balancing between AWS and GCP using Cloudflare. Load balancing is an essential technique for improving website reliability, performance, and scalability.

Let me know if you have any other questions! I‘m happy to help explain any part of the process in more detail.

Written by