DEV Community

Kashaf Abdullah
Kashaf Abdullah

Posted on

Internal vs External Load Balancer: Key Differences Explained

The Core Difference in One Sentence

External (Internet facing) Load Balancer: Balances traffic coming from the public internet to resources inside your private network.

Internal (Private) Load Balancer: Balances traffic coming from inside your private network to other resources also inside your private network.


External (Internet Facing) Load Balancer

How it works

It has a public IP address and is accessible from the internet. Clients (users, mobile apps, external APIs) send requests to this public IP, and the load balancer distributes those requests to backend servers (like web servers or application servers) inside your Virtual Private Cloud (VPC).

Common Use Cases

  • Hosting a public website or e-commerce site
  • Exposing a public REST API to external developers
  • Serving a mobile app's backend

Example

Users in different countries typing https://yourapp.com → DNS resolves to a public load balancer IP → Load balancer forwards requests to healthy web servers in your VPC.

Security Note

External load balancers often sit at the "edge" and are paired with security groups, Web Application Firewalls (WAF), and SSL/TLS termination.


Internal (Private) Load Balancer

How it works

It has only a private IP address (no public internet access). It routes traffic within your VPC or data center. Clients are typically other internal services, databases, or application components.

Common Use Cases

  • Microservices communication: Service A calls Service B internally
  • Database load balancing: Distributing read queries across database replicas
  • Internal API gateways: Exposing APIs only to other internal apps
  • Tiered architectures: Web tier (external LB) → App tier (internal LB) → Database tier

Example

Your internal order processing service needs to call the inventory service. An internal load balancer sits in front of three inventory service instances, distributing requests and hiding failures — all without ever being reachable from the internet.


Side by Side Comparison

Feature External Load Balancer Internal Load Balancer
IP Address Public IP Private IP only
Internet Access Yes, accessible from internet No, not accessible from internet
Traffic Source External users, mobile apps, third-party APIs Internal services, microservices, databases
Typical Use Public websites, external APIs Internal microservices, database clustering
Security Requires WAF, SSL/TLS, DDoS protection Only internal security groups needed
DNS Public DNS name Private DNS name
Subnet Public subnet Private subnet

Real World Architecture Example

        Internet user
              │
              ▼
    ┌─────────────────────┐
    │ External Load       │  (public IP, in public subnet)
    │ Balancer            │
    └─────────────────────┘
              │
              ▼
    ┌─────────────────────┐
    │ Web servers         │  (in private subnet)
    └─────────────────────┘
              │
              ▼
    ┌─────────────────────┐
    │ Internal Load       │  (private IP only, in private subnet)
    │ Balancer            │
    └─────────────────────┘
              │
              ▼
    ┌─────────────────────┐
    │ Application servers │  (in private subnet)
    │ + Database replicas │
    └─────────────────────┘
Enter fullscreen mode Exit fullscreen mode
  • The External LB handles raw HTTPS from users
  • The Internal LB distributes API calls from web servers to app servers — never exposed to the internet

Code Example: AWS Load Balancers

External Load Balancer (Public)

// AWS CDK - External Application Load Balancer
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';

const externalLB = new elbv2.ApplicationLoadBalancer(this, 'ExternalLB', {
  vpc: vpc,
  internetFacing: true,  // External - public IP
  loadBalancerName: 'public-web-lb'
});

// Add listener for HTTPS traffic
externalLB.addListener('HTTPS', {
  port: 443,
  certificates: [certificate],
  defaultAction: elbv2.ListenerAction.forward([webTargetGroup])
});
Enter fullscreen mode Exit fullscreen mode

Internal Load Balancer (Private)

// AWS CDK - Internal Application Load Balancer
const internalLB = new elbv2.ApplicationLoadBalancer(this, 'InternalLB', {
  vpc: vpc,
  internetFacing: false,  // Internal - private IP only
  loadBalancerName: 'internal-api-lb'
});

// Add listener for internal traffic
internalLB.addListener('HTTP', {
  port: 8080,
  defaultAction: elbv2.ListenerAction.forward([appTargetGroup])
});
Enter fullscreen mode Exit fullscreen mode

When to Use Which?

Choose External Load Balancer when:

  • Your users are on the public internet
  • You're hosting a public website or API
  • Mobile apps need to connect to your backend
  • You need SSL/TLS termination for external traffic

Choose Internal Load Balancer when:

  • Services within your network need to communicate
  • You're implementing microservices architecture
  • You need database read replica distribution
  • You want to keep internal traffic private and secure

Common Cloud Provider Names

Provider External LB Name Internal LB Name
AWS Internet-facing ALB/NLB Internal ALB/NLB
Azure Public Load Balancer Internal Load Balancer
GCP External HTTP(S) LB Internal TCP/UDP LB

Key Takeaway

Type Traffic Source Accessibility
External Public traffic from outside your network Internet accessible
Internal Private traffic from inside your network Only within VPC

Choose External when your users are on the internet.

Choose Internal when services within your network need to talk to each other reliably at scale.


Written by Kashaf Abdullah

Software Engineer | MERN Stack | Web Development

Top comments (0)