Skip to content

Load Balancer Examples

Examples for configuring HTTP and TCP load balancers with xcsh.

FieldRequiredDescription
metadata.nameYesUnique name for the load balancer
metadata.namespaceYesTarget namespace
spec.domainsYesList of domain names to serve
spec.http OR spec.https OR spec.https_auto_certYesListener type (choose one)
spec.advertise_on_public_default_vipYesRequired for public internet access
metadata:
name: my-http-lb
namespace: shared
spec:
domains:
- myapp.example.com
http:
port: 80
advertise_on_public_default_vip: \{}

Create command:

Terminal window
xcsh virtual create http_loadbalancer -ns shared -f http-lb.yaml
Terminal window
xcsh virtual create http_loadbalancer -ns <namespace> -f <file.yaml>
Terminal window
xcsh virtual list http_loadbalancer -ns <namespace> -o json
Terminal window
xcsh virtual get http_loadbalancer <name> -ns <namespace> -o yaml
Terminal window
xcsh virtual replace http_loadbalancer <name> -ns <namespace> -f <file.yaml>
Terminal window
xcsh virtual delete http_loadbalancer <name> -ns <namespace>

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:

Terminal window
# 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

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

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-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:

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

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-healthcheck.yaml:

metadata:
name: example-tcp-healthcheck
namespace: example-namespace
spec:
tcp_health_check: \{}
interval: 15
timeout: 5
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
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: \{}
Terminal window
# 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
Terminal window
# 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
Terminal window
# 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
Terminal window
xcsh virtual delete http_loadbalancer example-lb -ns example-namespace