This section provides examples that illustrate how to set Edge-LB pool configuration options for path-based routing of inbound traffic.
Before you begin
Before you create Edge-LB pools and pool configuration files, you should have DC/OS™ Enterprise cluster nodes installed and ready to use and have previously downloaded and installed the latest Edge-LB packages.
- 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.
For information about installing Edge-LB packages, see the installation instructions.
Path-based routing
This pool configures a load balancer which sends traffic to the httpd
backend unless the path begins with /nginx
, in which case it sends traffic to the nginx
backend. The path in the request is rewritten before getting sent to nginx.
{
"apiVersion": "V2",
"name": "path-routing",
"count": 1,
"haproxy": {
"frontends": [{
"bindPort": 80,
"protocol": "HTTP",
"linkBackend": {
"defaultBackend": "httpd",
"map": [{
"pathBeg": "/nginx",
"backend": "nginx"
}]
}
}],
"backends": [{
"name": "httpd",
"protocol": "HTTP",
"services": [{
"marathon": {
"serviceID": "/host-httpd"
},
"endpoint": {
"portName": "web"
}
}]
},{
"name": "nginx",
"protocol": "HTTP",
"rewriteHttp": {
"path": {
"fromPath": "/nginx",
"toPath": "/"
}
},
"services": [{
"mesos": {
"frameworkName": "marathon",
"taskName": "bridge-nginx"
},
"endpoint": {
"portName": "web"
}
}]
}]
}
}
Modifying path values
The following examples illustrate how the path would be changed for different fromPath
and toPath
values:
fromPath: "/nginx"
,toPath: ""
, request:/nginx
-->/
fromPath: "/nginx"
,toPath: "/"
, request:/nginx
-->/
fromPath: "/nginx"
,toPath: "/"
, request:/nginx/
-->/
fromPath: "/nginx"
,toPath: "/"
, request:/nginx/index.html
-->/index.html
fromPath: "/nginx"
,toPath: "/"
, request:/nginx/subpath/index.html
-->/subpath/index.html
fromPath: "/nginx/"
,toPath: ""
, request:/nginx
-->/nginx
(The path is not rewritten in this case because the request did not match/nginx/
)fromPath: "/nginx/"
,toPath: ""
, request:/nginx/
-->/
fromPath: "/nginx"
,toPath: "/subpath"
, request:/nginx
-->/subpath
fromPath: "/nginx"
,toPath: "/subpath"
, request:/nginx/
-->/subpath/
fromPath: "/nginx"
,toPath: "/subpath"
, request:/nginx/index.html
-->/subpath/index.html
fromPath: "/nginx"
,toPath: "/subpath/"
, request:/nginx/index.html
-->/subpath//index.html
(Note that for cases other thantoPath: ""
ortoPath: "/"
, it is suggested that thefromPath
andtoPath
either both end in/
, or neither do, because the rewritten path could otherwise end up with a double slash.)fromPath: "/nginx/"
,toPath: "/subpath/"
, request:/nginx/index.html
-->/subpath/index.html
This example uses pool.haproxy.frontend.linkBackend.pathBeg
to match on the beginning of a path. Other useful fields are:
pathBeg
: Match on path beginningpathEnd
: Match on path endingpathReg
: Match on a path regular expression