Skip to content

Load Balancer Examples

Examples for configuring HTTP and TCP load balancers with xcsh.

Minimum Configuration Requirements

HTTP Load Balancer - Required Fields

Field Required Description
metadata.name Unique name for the load balancer
metadata.namespace Target namespace
spec.domains List of domain names to serve
spec.http OR spec.https OR spec.https_auto_cert Listener type (choose one)
spec.advertise_on_public_default_vip Required for public internet access

Minimal HTTP Load Balancer Example

metadata:
  name: my-http-lb
  namespace: shared
spec:
  domains:
    - myapp.example.com
  http:
    port: 80
  advertise_on_public_default_vip: {}

Create command:

xcsh virtual create http_loadbalancer -ns shared -f http-lb.yaml

CRUD Quick Reference

Create

xcsh virtual create http_loadbalancer -ns <namespace> -f <file.yaml>

Read (List)

xcsh virtual list http_loadbalancer -ns <namespace> -o json

Read (Get)

xcsh virtual get http_loadbalancer <name> -ns <namespace> -o yaml

Update (Replace)

xcsh virtual replace http_loadbalancer <name> -ns <namespace> -f <file.yaml>

Delete

xcsh virtual delete http_loadbalancer <name> -ns <namespace>

HTTP Load Balancer

Basic HTTP Load Balancer

Create a simple HTTP load balancer with a single origin pool.

origin-pool.yaml:

metadata:
  name: example-origin-pool
  namespace: example-namespace
spec:
  origin_servers:
    - public_ip:
        ip: 192.168.1.100
  port: 8080
  loadbalancer_algorithm: ROUND_ROBIN

http-lb.yaml:

metadata:
  name: example-http-lb
  namespace: example-namespace
spec:
  domains:
    - example.com
  http:
    port: 80
  advertise_on_public_default_vip: {}
  default_route_pools:
    - pool:
        name: example-origin-pool
        namespace: example-namespace

Deploy:

# Create origin pool
xcsh virtual create origin_pool -ns example-namespace -f origin-pool.yaml

# Create load balancer
xcsh virtual create http_loadbalancer -ns example-namespace -f http-lb.yaml

# Verify
xcsh virtual get http_loadbalancer example-http-lb -ns example-namespace

HTTPS Load Balancer

Add TLS termination to your load balancer with automatic certificate management.

https-lb.yaml:

metadata:
  name: example-https-lb
  namespace: example-namespace
spec:
  domains:
    - example.com
  https_auto_cert:
    http_redirect: true
    add_hsts: true
  advertise_on_public_default_vip: {}
  default_route_pools:
    - pool:
        name: example-origin-pool
        namespace: example-namespace

Load Balancer with WAF

Add Web Application Firewall protection.

waf-lb.yaml:

metadata:
  name: example-waf-lb
  namespace: example-namespace
spec:
  domains:
    - example.com
  https_auto_cert:
    http_redirect: true
  advertise_on_public_default_vip: {}
  default_route_pools:
    - pool:
        name: example-origin-pool
        namespace: example-namespace
  app_firewall:
    name: example-waf-policy
    namespace: example-namespace

TCP Load Balancer

Basic TCP Load Balancer

tcp-lb.yaml:

metadata:
  name: example-tcp-lb
  namespace: example-namespace
spec:
  listen_port: 3306
  origin_pools:
    - pool:
        name: example-db-pool
        namespace: example-namespace

Deploy:

xcsh virtual create tcp_loadbalancer -ns example-namespace -f tcp-lb.yaml

Health Checks

HTTP Health Check

healthcheck.yaml:

metadata:
  name: example-healthcheck
  namespace: example-namespace
spec:
  http_health_check:
    path: /health
    expected_status_codes:
      - "200"
  interval: 30
  timeout: 10
  unhealthy_threshold: 3
  healthy_threshold: 2

TCP Health Check

tcp-healthcheck.yaml:

metadata:
  name: example-tcp-healthcheck
  namespace: example-namespace
spec:
  tcp_health_check: {}
  interval: 15
  timeout: 5

Origin Pool Options

Multiple Origin Servers

metadata:
  name: multi-origin-pool
  namespace: example-namespace
spec:
  origin_servers:
    - public_ip:
        ip: 192.168.1.100
    - public_ip:
        ip: 192.168.1.101
    - public_ip:
        ip: 192.168.1.102
  port: 8080
  loadbalancer_algorithm: ROUND_ROBIN
  healthcheck:
    - name: example-healthcheck
      namespace: example-namespace

Origin Pool with DNS

metadata:
  name: dns-origin-pool
  namespace: example-namespace
spec:
  origin_servers:
    - public_name:
        dns_name: backend.example.com
  port: 443
  use_tls:
    use_host_header_as_sni: {}

Management Commands

List Load Balancers

# List all HTTP load balancers
xcsh virtual list http_loadbalancer -ns example-namespace

# List all TCP load balancers
xcsh virtual list tcp_loadbalancer -ns example-namespace

# Output as JSON
xcsh virtual list http_loadbalancer -ns example-namespace -o json

Get Details

# Get as table (default)
xcsh virtual get http_loadbalancer example-lb -ns example-namespace

# Get as YAML
xcsh virtual get http_loadbalancer example-lb -ns example-namespace -o yaml

# Get as JSON
xcsh virtual get http_loadbalancer example-lb -ns example-namespace -o json

Update Load Balancer

# Export current config
xcsh virtual get http_loadbalancer example-lb -ns example-namespace -o yaml > lb.yaml

# Edit lb.yaml...

# Apply changes
xcsh virtual replace http_loadbalancer example-lb -ns example-namespace -f lb.yaml

Delete Load Balancer

xcsh virtual delete http_loadbalancer example-lb -ns example-namespace