You can configure the frontend ports used to expose and access the service for Edge-LB load balancing. You can choose to specify the frontend port for each service manually, or have Edge-LB automatically assign a port by setting a configuration option.
Before you begin
You must have:
- Edge-LB installed as described in the Edge-LB installation instructions.
- The core DC/OS command-line interface (CLI) installed and configured to communicate with the DC/OS cluster.
- The
edgelb
command-line interface (CLI) installed. - An active and properly-configured DC/OS Enterprise cluster, with at least one DC/OS private agent node to run the load-balanced service and at least one DC/OS public agent node for exposing the load-balanced service.
Configuring dynamic selection of frontend ports
With Edge-LB, you can dynamically assign the port used to access load balancing statistics by modifying the Edge-LB pool configuration file. Using the settings in the pool configuration file, you can control whether Edge-LB should use a predefined port, or automatically assign a port for accessing load balancing statistics.
Create the sample pool configuration file
-
Open a text editor, then copy and paste the following sample
nginx-lb.json
pool configuration file that automatically sets the frontend port assignment:{ "apiVersion": "V2", "name": "nginx-lb", "count": 1, "haproxy": { "stats": { "bindPort": 15001 }, "frontends": [{ "name": "nginx-frontend", "bindPort": 0, "protocol": "HTTP", "linkBackend": { "defaultBackend": "nginx-backend" } }], "backends": [{ "name": "nginx-backend", "protocol": "HTTP", "services": [{ "marathon": { "serviceID": "/nginx" }, "endpoint": { "portName": "nginx-80" } }] }] } }
In this sample configuration file, the
haproxy.frontends.bindPort
setting is0
. This setting indicates that you want Edge-LB to automatically select the port to use for thefrontend
endpoint. -
Deploy the Edge-LB pool:
dcos edgelb create nginx-lb.json
-
Verify that Edge-LB frontend port is chosen dynamically for the pool:
dcos edgelb endpoints nginx-lb
This command displays endpoint information including the frontend port that was dynamically selected:
NAME PORT INTERNAL IP frontend_port0 1025 10.0.5.119, 10.0.6.5 stats_port 9090 10.0.5.119, 10.0.6.5
In this example, the
nginx-lb
is pool automatically assigned the frontend port 1025. -
Navigate to the URL to see the frontend for the nginx service routed through the Edge-LB
nginx-lb
pool configuration using the public IP address of the public agent.For example:
http://<public_agent_public_IP>:1025
Changing a previously-configured port
If you manually configured an Edge-LB pool to use a specific frontend port for a service, updating the pool configuration file to use auto-assignment for the frontend port does not update the port used. For example, if you previously configured port 15000 as the frontend port and updated the Edge-LB pool configuration haproxy.frontends.bindPort
setting to 0
for dynamic allocation, Edge-LB will continue to use port 15000 as the frontend port.
To use dynamic port selection, delete the previous pool configuration, then create and deploy a new pool configuration file with the haproxy.frontends.bindPort: 0
setting.
Enabling dynamic port allocation for multiple pools
Assigning a frontend port dynamically enables you to deploy more than one pool on an agent node without manually setting different values for each pool.
By leveraging dynamic port allocation, you can:
- Deploy multiple pools on the same agent without worrying about port conflicts.
- Avoid the limitations imposed by using the default stats port 9090 which restricted you to deploying only one Edge-LB pool per agent.
- Eliminate the need to identify and specify manual port assignments for Edge-LB pools running on the same agent.
When a public cloud load balancer like Amazon® Web Services (AWS®) Elastic Load Balancer® (ELB®) is positioned as an access point in front of an Edge-LB pool, the Elastic Load Balancer manages the proxy and load-balancing responsibilities between the client and the Edge-LB pool. In this scenario, assigning the frontend port dynamically enables you to use multiple frontend ports for multiple Edge-LB pools on the same agent, which results in more efficient resource consumption and utilization.