Review HRM admin guide
|
|
@ -1264,8 +1264,8 @@ manuals:
|
||||||
section:
|
section:
|
||||||
- path: /datacenter/ucp/2.1/guides/user/services/deploy-a-service/
|
- path: /datacenter/ucp/2.1/guides/user/services/deploy-a-service/
|
||||||
title: Deploy a service
|
title: Deploy a service
|
||||||
- path: /datacenter/ucp/2.1/guides/user/services/use-hostnames-to-access-your-service/
|
- path: /datacenter/ucp/2.1/guides/user/services/use-domain-names-to-access-services/
|
||||||
title: Use hostnames to access your service
|
title: Use domain names to access services
|
||||||
- path: /datacenter/ucp/2.1/guides/user/services/
|
- path: /datacenter/ucp/2.1/guides/user/services/
|
||||||
title: Deploy an app from the UI
|
title: Deploy an app from the UI
|
||||||
- path: /datacenter/ucp/2.1/guides/user/services/deploy-app-cli/
|
- path: /datacenter/ucp/2.1/guides/user/services/deploy-app-cli/
|
||||||
|
|
|
||||||
|
|
@ -1,104 +1,78 @@
|
||||||
---
|
---
|
||||||
title: Configure the HTTP Routing Mesh
|
title: Use domain names to access services
|
||||||
description: Learn how to configure UCP's HTTP Routing Mesh
|
description: Docker Universal Control Plane has an HTTP routing mesh that
|
||||||
|
allows you to make your services accessible through a domain name. Learn more.
|
||||||
keywords: ucp, services, http, dns
|
keywords: ucp, services, http, dns
|
||||||
---
|
---
|
||||||
|
|
||||||
UCP provides an HTTP routing mesh, that extends the networking capabilities
|
Docker has a transport-layer load balancer, also know as an L4 load balancer.
|
||||||
of Docker Engine. Docker Engine provides load balancing and service discovery
|
This allows you to access your services independently of the node they are
|
||||||
at the transport layer for TCP and UDP connections. UCP's HTTP routing mesh
|
running.
|
||||||
allows you to extend service discovery to have name-based virtual hosting for
|
|
||||||
HTTP and HTTPS services.
|
|
||||||
|
|
||||||
See the
|

|
||||||
[Docker Engine documentation on overlay networks](/engine/swarm/networking.md)
|
|
||||||
for more information on what Docker Engine provides.
|
In this example, the wordpress service is being served on port 8080.
|
||||||
|
Users can access wordpress using the IP address of any node
|
||||||
|
in the cluster and port 8080. If wordpress is not running in that node, the
|
||||||
|
request is redirected to a node that is.
|
||||||
|
|
||||||
|
UCP extends this and provides an http routing mesh for application-layer
|
||||||
|
load balancing. This allows you to access services with HTTP and HTTPS endpoints
|
||||||
|
using a domain name instead of an IP.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
In this example, the Wordpress service listens on port 8080 and is attached to
|
||||||
|
the `ucp-hrm` network. There's also a DNS entry mapping `wordpress.example.org`
|
||||||
|
to the IP addresses of the UCP nodes.
|
||||||
|
|
||||||
|
When users access `wordpress.example.org:80`, the HTTP routing mesh routes
|
||||||
|
the request to the service running Wordpress in a way that is transparent to
|
||||||
|
the user.
|
||||||
|
|
||||||
## Enable the HTTP routing mesh
|
## Enable the HTTP routing mesh
|
||||||
|
|
||||||
To enable the HTTP routing mesh, go to the **UCP web UI**, navigate to the
|
To enable the HTTP routing mesh, go to the **UCP web UI**, navigate to the
|
||||||
**Settings** page, and click the **Routing Mesh** tab.
|
**Settings** page, and click the **Routing Mesh** option.
|
||||||
|
Check the **Enable HTTP routing mesh** option.
|
||||||
|
|
||||||
<!-- todo: add screenshot -->
|
{: .with-border}
|
||||||
|
|
||||||
The default port for HTTP services is **80**, and the default port for HTTPS
|
By default the HTTP routing mesh service listens on port 80 for HTTP and port
|
||||||
services is **8443**. You may choose an alternate port on this screen.
|
8443 for HTTPS. Change the ports if you already have services that are using
|
||||||
|
them.
|
||||||
|
|
||||||
Check the checkbox to enable the HTTP routing mesh. This will create a service
|
## Under the hood
|
||||||
called `ucp-hrm` and a network called `ucp-hrm`.
|
|
||||||
|
|
||||||
If the HTTP routing mesh receives a HTTP request for a domain that it does not
|
Once you enable the HTTP routing mesh, UCP deploys:
|
||||||
handle, it returns a 503 error (Bad Gateway). For HTTPS requests, all unknown
|
|
||||||
domains are routed to the UCP web interface.
|
|
||||||
|
|
||||||
## HTTPS support
|
| Name | What | Description |
|
||||||
|
|:----------|:--------|:------------------------------------------------------------------------------|
|
||||||
|
| `ucp-hrm` | Service | Receive HTTP and HTTPS requests and send them to the right service |
|
||||||
|
| `ucp-hrm` | Network | The network used to communicate with the services using the HTTP routing mesh |
|
||||||
|
|
||||||
The HTTP routing mesh has support for routing using HTTPS. Using a feature of
|
You then deploy a service that exposes a port, attach that service to the
|
||||||
HTTPS called Server Name Indication, the HTTP routing mesh is able to route
|
`ucp-hrm` network, and create a DNS entry to map a domain name to the IP
|
||||||
connections to service backends without terminating the HTTPS connection.
|
address of the UCP nodes.
|
||||||
|
|
||||||
To use HTTPS support, no certificates for the service are provided to the HTTP
|
When a user tries to access an HTTP service from that domain name:
|
||||||
routing mesh. Instead, the backend service **must** handle HTTPS connections
|
|
||||||
directly. Services that meet this criteria can use the `SNI` protocol to
|
|
||||||
indicate handling of HTTPS in this manner.
|
|
||||||
|
|
||||||
## Route to a service
|
1. The DNS resolution will point them to the IP of one of the UCP nodes
|
||||||
|
2. The HTTP routing mesh looks at the Hostname header in the HTTP request
|
||||||
|
3. If there's a service that maps to that hostname the request is routed to the
|
||||||
|
port where the service is listening
|
||||||
|
4. If not, the user receives an HTTP 503, bad gateway error
|
||||||
|
|
||||||
The HTTP routing mesh can route to a Docker service that runs a webserver.
|
For services exposing HTTPS things are similar. The HTTP routing mesh doesn't
|
||||||
This service must meet three criteria:
|
terminate the TLS connection, and instead leverages an extension to TLS called
|
||||||
|
Server Name Indication, that allows a client to announce in clear the domain
|
||||||
|
name it is trying to reach.
|
||||||
|
|
||||||
* The service must be connected a network with a `com.docker.ucp.mesh.http` label
|
When receiving a connection in the HTTPS port, the routing mesh looks at the
|
||||||
* The service must publish one or more ports
|
Server Name Indication header and routes the request to the right service.
|
||||||
* The service must have one or more labels prefixed with
|
The service is responsible for terminating the HTTPS connection.
|
||||||
`com.docker.ucp.mesh.http` to specify the ports to route (see the syntax
|
|
||||||
below)
|
|
||||||
|
|
||||||
These options can be configured using the UCP UI, or can be entered manually
|
|
||||||
using the `docker service` command.
|
|
||||||
|
|
||||||
## Route domains to the HTTP routing mesh
|
## Where to go next
|
||||||
|
|
||||||
The HTTP routing mesh uses the `Host` HTTP header (or the Server Name
|
* [Run only the images you trust](run-only-the-images-you-trust.md)
|
||||||
Indication field for HTTPS requests) to determine which service should receive
|
|
||||||
a particular HTTP request. This is typically done using DNS and pointing one or
|
|
||||||
more domains to one or more nodes in the UCP cluster.
|
|
||||||
|
|
||||||
## Networks, Access Control, and the HTTP routing mesh
|
|
||||||
|
|
||||||
The HTTP routing mesh uses one or more overlay networks to communicate with the
|
|
||||||
backend services. By default, a single network is created called `ucp-hrm`,
|
|
||||||
with the access control label `ucp-hrm`. Adding a service to this network
|
|
||||||
either requires administrator-level access, or the user must be in a group that
|
|
||||||
gives them `ucp-hrm` access.
|
|
||||||
|
|
||||||
This default configuration does not provide any isolation between services
|
|
||||||
using the HTTP routing mesh.
|
|
||||||
|
|
||||||
Isolation between services may be implemented by creating one or more overlay
|
|
||||||
networks with the label `com.docker.ucp.mesh.http` prior to enabling the HTTP
|
|
||||||
routing mesh. Once the HTTP routing mesh is enabled, it will be able to route
|
|
||||||
to all services attached to any of these networks, but services on different
|
|
||||||
networks cannot communicate directly.
|
|
||||||
|
|
||||||
## Using the HTTP routing mesh
|
|
||||||
|
|
||||||
Once DNS and networks are configured, you can begin setting up services for
|
|
||||||
these domains. See the guides for the [UCP web
|
|
||||||
UI](../../user/services/use-hostnames-to-access-your-service.md) and [Docker
|
|
||||||
CLI](../../user/services/hrm-labels.md).
|
|
||||||
|
|
||||||
## Disable the HTTP routing mesh
|
|
||||||
|
|
||||||
To disable the HTTP routing mesh, first ensure that all services that are using
|
|
||||||
the HTTP routing mesh are disconnected from the **ucp-hrm** network.
|
|
||||||
|
|
||||||
Next, go to the **UCP web UI**, navigate to the **Settings** page, and click
|
|
||||||
the **Routing Mesh** tab. Uncheck the checkbox to disable the HTTP routing mesh.
|
|
||||||
|
|
||||||
## Troubleshoot
|
|
||||||
|
|
||||||
If a service is not configured properly for use of the HTTP routing mesh, this
|
|
||||||
information is available in the UI when inspecting the service.
|
|
||||||
|
|
||||||
More logging from the HTTP routing mesh is available in the logs of the
|
|
||||||
`ucp-controller` containers on your UCP manager nodes.
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<!-- Generator: Sketch 40.1 (33804) - http://www.bohemiancoding.com/sketch -->
|
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||||
<title>use-hostnames-1</title>
|
<title>use-domain-names-1</title>
|
||||||
<desc>Created with Sketch.</desc>
|
<desc>Created with Sketch.</desc>
|
||||||
<defs>
|
<defs>
|
||||||
<circle id="path-1" cx="4" cy="4" r="4"></circle>
|
<circle id="path-1" cx="4" cy="4" r="4"></circle>
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
</mask>
|
</mask>
|
||||||
</defs>
|
</defs>
|
||||||
<g id="ucp-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
<g id="ucp-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
<g id="use-hostnames-1">
|
<g id="use-domain-names-1">
|
||||||
<g id="nodes" transform="translate(108.000000, 104.000000)">
|
<g id="nodes" transform="translate(108.000000, 104.000000)">
|
||||||
<g id="workers" transform="translate(321.000000, 0.000000)">
|
<g id="workers" transform="translate(321.000000, 0.000000)">
|
||||||
<g id="node-1" transform="translate(107.000000, 0.000000)">
|
<g id="node-1" transform="translate(107.000000, 0.000000)">
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
</text>
|
</text>
|
||||||
<g id="node">
|
<g id="node">
|
||||||
<g id="node-label">
|
<g id="node-label">
|
||||||
<rect id="Rectangle-127" fill="#445D6E" x="0" y="0" width="71" height="21.2904762" rx="2"></rect>
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="6" y="14">worker node</tspan>
|
<tspan x="6" y="14">worker node</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
@ -48,14 +48,14 @@
|
||||||
</g>
|
</g>
|
||||||
<g id="app" transform="translate(1.000000, 79.000000)">
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
<rect id="Rectangle-138" fill="#439FD1" x="0" y="0" width="95" height="22" rx="2"></rect>
|
<rect id="Rectangle-138" fill="#439FD1" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
<tspan x="38.1953125" y="15">UCP </tspan>
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
<g id="app-copy" transform="translate(1.000000, 56.000000)">
|
<g id="app-copy" transform="translate(1.000000, 56.000000)">
|
||||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
<text id="nginx" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
<text id="wordpress:8000" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="35.2387695" y="15">nginx</tspan>
|
<tspan x="10.5390625" y="15">wordpress:8000</tspan>
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
</text>
|
</text>
|
||||||
<g id="node">
|
<g id="node">
|
||||||
<g id="node-label">
|
<g id="node-label">
|
||||||
<rect id="Rectangle-127" fill="#E0E4E7" x="0" y="0" width="71" height="21.2904762" rx="2"></rect>
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="6" y="14">worker node</tspan>
|
<tspan x="6" y="14">worker node</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
@ -74,8 +74,8 @@
|
||||||
</g>
|
</g>
|
||||||
<g id="app" transform="translate(1.000000, 79.000000)">
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
</text>
|
</text>
|
||||||
<g id="node">
|
<g id="node">
|
||||||
<g id="node-label">
|
<g id="node-label">
|
||||||
<rect id="Rectangle-127" fill="#E0E4E7" x="0" y="0" width="71" height="21.2904762" rx="2"></rect>
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="6" y="14">manager node</tspan>
|
<tspan x="6" y="14">manager node</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
@ -96,8 +96,8 @@
|
||||||
</g>
|
</g>
|
||||||
<g id="app" transform="translate(1.000000, 79.000000)">
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
|
@ -108,7 +108,7 @@
|
||||||
</text>
|
</text>
|
||||||
<g id="node">
|
<g id="node">
|
||||||
<g id="node-label">
|
<g id="node-label">
|
||||||
<rect id="Rectangle-127" fill="#E0E4E7" x="0" y="0" width="71" height="21.2904762" rx="2"></rect>
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="6" y="14">manager node</tspan>
|
<tspan x="6" y="14">manager node</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
@ -116,8 +116,8 @@
|
||||||
</g>
|
</g>
|
||||||
<g id="app" transform="translate(1.000000, 79.000000)">
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
|
@ -128,7 +128,7 @@
|
||||||
</text>
|
</text>
|
||||||
<g id="node">
|
<g id="node">
|
||||||
<g id="node-label">
|
<g id="node-label">
|
||||||
<rect id="Rectangle-127" fill="#E0E4E7" x="0" y="0" width="71" height="21.2904762" rx="2"></rect>
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="6" y="14">manager node</tspan>
|
<tspan x="6" y="14">manager node</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
@ -136,8 +136,8 @@
|
||||||
</g>
|
</g>
|
||||||
<g id="app" transform="translate(1.000000, 79.000000)">
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
|
@ -187,7 +187,12 @@
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<path d="M370,31 C373.59125,31 376.5,28.083125 376.5,24.5 C376.5,20.90875 373.59125,18 370,18 C366.40875,18 363.5,20.90875 363.5,24.5 C363.5,28.083125 366.40875,31 370,31 L370,31 Z M370,34.25 C365.669375,34.25 357,36.419375 357,40.75 L357,44 L383,44 L383,40.75 C383,36.419375 374.330625,34.25 370,34.25 L370,34.25 Z" id="Shape" fill="#82949E"></path>
|
<g id="user" transform="translate(321.000000, 4.000000)" fill="#82949E">
|
||||||
|
<text id="192.168.99.100:8000" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500">
|
||||||
|
<tspan x="0.191894531" y="42">192.168.99.100:8000</tspan>
|
||||||
|
</text>
|
||||||
|
<path d="M49,13 C52.59125,13 55.5,10.083125 55.5,6.5 C55.5,2.90875 52.59125,0 49,0 C45.40875,0 42.5,2.90875 42.5,6.5 C42.5,10.083125 45.40875,13 49,13 L49,13 Z M49,16.25 C44.669375,16.25 36,18.419375 36,22.75 L36,26 L62,26 L62,22.75 C62,18.419375 53.330625,16.25 49,16.25 L49,16.25 Z" id="Shape"></path>
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
|
@ -0,0 +1,198 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||||
|
<title>use-domain-names-2</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<defs>
|
||||||
|
<circle id="path-1" cx="4" cy="4" r="4"></circle>
|
||||||
|
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||||
|
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||||
|
<use xlink:href="#path-1" fill="black"></use>
|
||||||
|
</mask>
|
||||||
|
<circle id="path-3" cx="4" cy="4" r="4"></circle>
|
||||||
|
<mask id="mask-4" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||||
|
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||||
|
<use xlink:href="#path-3" fill="black"></use>
|
||||||
|
</mask>
|
||||||
|
<circle id="path-5" cx="4" cy="4" r="4"></circle>
|
||||||
|
<mask id="mask-6" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||||
|
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||||
|
<use xlink:href="#path-5" fill="black"></use>
|
||||||
|
</mask>
|
||||||
|
<circle id="path-7" cx="4" cy="4" r="4"></circle>
|
||||||
|
<mask id="mask-8" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||||
|
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||||
|
<use xlink:href="#path-7" fill="black"></use>
|
||||||
|
</mask>
|
||||||
|
<circle id="path-9" cx="4" cy="4" r="4"></circle>
|
||||||
|
<mask id="mask-10" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||||
|
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||||
|
<use xlink:href="#path-9" fill="black"></use>
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<g id="ucp-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="use-domain-names-2">
|
||||||
|
<g id="nodes" transform="translate(108.000000, 104.000000)">
|
||||||
|
<g id="workers" transform="translate(321.000000, 0.000000)">
|
||||||
|
<g id="node-1" transform="translate(107.000000, 0.000000)">
|
||||||
|
<text id="192.168.99.104" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||||
|
<tspan x="13.4824219" y="116">192.168.99.104</tspan>
|
||||||
|
</text>
|
||||||
|
<g id="node">
|
||||||
|
<g id="node-label">
|
||||||
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||||
|
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="6" y="14">worker node</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
|
<rect id="Rectangle-138" fill="#439FD1" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="38.1953125" y="15">UCP </tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g id="app-copy" transform="translate(1.000000, 56.000000)">
|
||||||
|
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
|
<text id="wordpress:8000" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="10.5390625" y="15">wordpress:8000</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
</g>
|
||||||
|
<g id="node-1-copy">
|
||||||
|
<text id="192.168.99.103" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||||
|
<tspan x="13.4824219" y="116">192.168.99.103</tspan>
|
||||||
|
</text>
|
||||||
|
<g id="node">
|
||||||
|
<g id="node-label">
|
||||||
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
|
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="6" y="14">worker node</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="managers">
|
||||||
|
<g id="node-1" transform="translate(214.000000, 0.000000)">
|
||||||
|
<text id="192.168.99.102" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||||
|
<tspan x="13.4824219" y="116">192.168.99.102</tspan>
|
||||||
|
</text>
|
||||||
|
<g id="node">
|
||||||
|
<g id="node-label">
|
||||||
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
|
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="6" y="14">manager node</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
</g>
|
||||||
|
<g id="node-1-copy-3" transform="translate(107.000000, 0.000000)">
|
||||||
|
<text id="192.168.99.101" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||||
|
<tspan x="13.4824219" y="116">192.168.99.101</tspan>
|
||||||
|
</text>
|
||||||
|
<g id="node">
|
||||||
|
<g id="node-label">
|
||||||
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
|
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="6" y="14">manager node</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
</g>
|
||||||
|
<g id="node-1-copy-2">
|
||||||
|
<text id="192.168.99.100-copy-4" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||||
|
<tspan x="13.4824219" y="116">192.168.99.100</tspan>
|
||||||
|
</text>
|
||||||
|
<g id="node">
|
||||||
|
<g id="node-label">
|
||||||
|
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||||
|
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="6" y="14">manager node</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="app" transform="translate(1.000000, 79.000000)">
|
||||||
|
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||||
|
<text id="UCP" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="38.1953125" y="15">UCP</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="load-balancer" transform="translate(107.000000, 59.000000)">
|
||||||
|
<g id="lb">
|
||||||
|
<rect id="Rectangle-138" fill="#445D6E" x="0" y="0" width="527" height="22" rx="2"></rect>
|
||||||
|
<text id="HTTP-routing-mesh" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||||
|
<tspan x="218.33504" y="15">HTTP routing mesh</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g id="arrow-copy-2" transform="translate(477.500000, 32.500000) scale(1, -1) rotate(-90.000000) translate(-477.500000, -32.500000) translate(465.500000, 28.500000)">
|
||||||
|
<path d="M2,4 L24,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||||
|
<g id="Oval">
|
||||||
|
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||||
|
<use stroke="#F7F8F9" mask="url(#mask-2)" stroke-width="4" xlink:href="#path-1"></use>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="arrow-copy-3" transform="translate(370.500000, 32.500000) scale(1, -1) rotate(-90.000000) translate(-370.500000, -32.500000) translate(358.500000, 28.500000)">
|
||||||
|
<path d="M2,4 L24,4" id="Line" stroke="#E0E4E7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||||
|
<g id="Oval">
|
||||||
|
<use fill="#E0E4E7" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||||
|
<use stroke="#F7F8F9" mask="url(#mask-4)" stroke-width="4" xlink:href="#path-3"></use>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="arrow-copy-4" transform="translate(263.500000, 32.500000) scale(1, -1) rotate(-90.000000) translate(-263.500000, -32.500000) translate(251.500000, 28.500000)">
|
||||||
|
<path d="M2,4 L24,4" id="Line" stroke="#E0E4E7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||||
|
<g id="Oval">
|
||||||
|
<use fill="#E0E4E7" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||||
|
<use stroke="#F7F8F9" mask="url(#mask-6)" stroke-width="4" xlink:href="#path-5"></use>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="arrow-copy-5" transform="translate(156.500000, 32.500000) scale(1, -1) rotate(-90.000000) translate(-156.500000, -32.500000) translate(144.500000, 28.500000)">
|
||||||
|
<path d="M2,4 L24,4" id="Line" stroke="#E0E4E7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||||
|
<g id="Oval">
|
||||||
|
<use fill="#E0E4E7" fill-rule="evenodd" xlink:href="#path-7"></use>
|
||||||
|
<use stroke="#F7F8F9" mask="url(#mask-8)" stroke-width="4" xlink:href="#path-7"></use>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="arrow-copy-6" transform="translate(49.500000, 32.500000) scale(1, -1) rotate(-90.000000) translate(-49.500000, -32.500000) translate(37.500000, 28.500000)">
|
||||||
|
<path d="M2,4 L24,4" id="Line" stroke="#E0E4E7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||||
|
<g id="Oval">
|
||||||
|
<use fill="#E0E4E7" fill-rule="evenodd" xlink:href="#path-9"></use>
|
||||||
|
<use stroke="#F7F8F9" mask="url(#mask-10)" stroke-width="4" xlink:href="#path-9"></use>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="user" transform="translate(306.000000, 4.000000)" fill="#82949E">
|
||||||
|
<text id="wordpress.example.or" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500">
|
||||||
|
<tspan x="0.0424804688" y="42">wordpress.example.org:80</tspan>
|
||||||
|
</text>
|
||||||
|
<path d="M64,13 C67.59125,13 70.5,10.083125 70.5,6.5 C70.5,2.90875 67.59125,0 64,0 C60.40875,0 57.5,2.90875 57.5,6.5 C57.5,10.083125 60.40875,13 64,13 L64,13 Z M64,16.25 C59.669375,16.25 51,18.419375 51,22.75 L51,26 L77,26 L77,22.75 C77,18.419375 68.330625,16.25 64,16.25 L64,16.25 Z" id="Shape"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 221 KiB |
|
After Width: | Height: | Size: 293 KiB |
|
After Width: | Height: | Size: 301 KiB |
|
After Width: | Height: | Size: 265 KiB |
|
After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 306 KiB |
|
Before Width: | Height: | Size: 313 KiB |
|
Before Width: | Height: | Size: 271 KiB |
|
Before Width: | Height: | Size: 186 KiB |
|
|
@ -1,118 +0,0 @@
|
||||||
---
|
|
||||||
title: Use the Docker CLI to configure hostnames to access your service
|
|
||||||
description: Learn how to configure your services to make them accessible using a hostname instead of IP addresses and ports, using the Docker CLI.
|
|
||||||
keywords: ucp, services, http, dns
|
|
||||||
---
|
|
||||||
|
|
||||||
UCP's HTTP routing mesh provides configuration through the web UI, but it is
|
|
||||||
also possible to configure a service by using the Docker CLI directly. This
|
|
||||||
information is stored in the labels of the services and other configuration of
|
|
||||||
the service. This guide will walk you through configuring a sample service for
|
|
||||||
use with the HTTP routing mesh and also provide a full reference to the label
|
|
||||||
syntax.
|
|
||||||
|
|
||||||
This configuration can be performed manually using the Docker CLI. It is also
|
|
||||||
appropriate to use this in automation, either using the Docker CLI or the
|
|
||||||
Docker Remote API directly.
|
|
||||||
|
|
||||||
The HTTP routing mesh can route to a Docker service that runs a webserver (HTTP
|
|
||||||
or HTTPS). This service must meet three criteria:
|
|
||||||
|
|
||||||
* The service must be connected a network with a `com.docker.ucp.mesh.http` label
|
|
||||||
* The service must publish the ports that you wish to route
|
|
||||||
* The service must have one or more labels prefixed with
|
|
||||||
`com.docker.ucp.mesh.http` to specify the ports to route (see the syntax
|
|
||||||
below)
|
|
||||||
|
|
||||||
## Route to a service using the CLI
|
|
||||||
|
|
||||||
### Networks
|
|
||||||
|
|
||||||
Services must be connected to a network that has a `com.docker.ucp.mesh.http`
|
|
||||||
label. The value is not relevant. A `ucp-hrm` network is created for you
|
|
||||||
automatically when enabling the HTTP routing mesh, or your administrators may
|
|
||||||
create one for you. Refer to the administrator's guide for more information.
|
|
||||||
|
|
||||||
### Service Labels
|
|
||||||
|
|
||||||
The key of the label must begin with `com.docker.ucp.mesh.http`. For multiple
|
|
||||||
labels, some examples could be `com.docker.ucp.mesh.http.80` and
|
|
||||||
`com.docker.ucp.mesh.http.443`. Here `80` and `443` are used to differentiate
|
|
||||||
the HRM labels via port numbers. You can use whatever values you want, just
|
|
||||||
make sure they are different from each other and you can keep track of them.
|
|
||||||
|
|
||||||
Labels with the prefix `com.docker.ucp.mesh.http` allow you to configure a
|
|
||||||
single hostname and port to route to a service. If you wish to route multiple
|
|
||||||
ports or hostnames to the same service, then multiple labels with the prefix
|
|
||||||
`com.docker.ucp.mesh.http` may be created.
|
|
||||||
|
|
||||||
### Example using the CLI
|
|
||||||
|
|
||||||
A service based on the image `myimage/mywebserver:latest` with a webserver
|
|
||||||
running on port 8080 can be routed to `http://foo.example.com` can be created
|
|
||||||
using the following:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ docker service create \
|
|
||||||
-p 8080 \
|
|
||||||
--network ucp-hrm \
|
|
||||||
--label com.docker.ucp.mesh.http.8080=external_route=http://foo.example.com,internal_port=8080 \
|
|
||||||
--name myservice \
|
|
||||||
myimage/mywebserver:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
## Service Label Syntax
|
|
||||||
|
|
||||||
The key of the label must begin with `com.docker.ucp.mesh.http`, for example
|
|
||||||
`com.docker.ucp.mesh.http.80` and `com.docker.ucp.mesh.http.443`.
|
|
||||||
|
|
||||||
The value of the label is a comma separated list of key/value pairs separated
|
|
||||||
by equals signs. These pairs are optional unless noted below, and are as
|
|
||||||
follows:
|
|
||||||
|
|
||||||
* `external_route` **(required)** the external URL to route to this service.
|
|
||||||
Examples: `http://myapp.example.com` and `sni://myapp.example.com`
|
|
||||||
* `internal_port`: the internal port to use for the service. Examples: `80`,
|
|
||||||
`8443`. This is **required** if more one port is published by the service.
|
|
||||||
* `sticky_sessions`: if present, use the named cookie to route the user to the
|
|
||||||
same backend task for this service. See the "Sticky Sessions" section below.
|
|
||||||
* `redirect`: if present, perform redirection to the specified URL. See the
|
|
||||||
"Redirection" section below.
|
|
||||||
|
|
||||||
|
|
||||||
### Sticky Sessions
|
|
||||||
|
|
||||||
Enable the sticky sessions option for a route if your application requires that
|
|
||||||
a user's session continues to use the same task of a backend service. This
|
|
||||||
option uses HTTP cookies to choose which task receives a given connection.
|
|
||||||
|
|
||||||
The cookie name for this feature is configured as the value of this option
|
|
||||||
within the label. The cookie must be created by the application, and its value
|
|
||||||
is used to pick a backend task.
|
|
||||||
|
|
||||||
Stickyness may be lost temporarily if the number of tasks for a service
|
|
||||||
changes, or if a service is reconfigured in a way that requires all of its
|
|
||||||
tasks to restart.
|
|
||||||
|
|
||||||
This option is incompatible with the `sni` protocol (routing HTTPS connections
|
|
||||||
without termination).
|
|
||||||
|
|
||||||
### Redirection
|
|
||||||
|
|
||||||
The `redirect` option indicates that all requests to this route should be
|
|
||||||
redirected to another domain name using a HTTP redirect.
|
|
||||||
|
|
||||||
One use of this feature is for a service which only listens using HTTPS, with
|
|
||||||
HTTP traffic to it being redirected to HTTPS. If the service is on
|
|
||||||
`example.com`, then this can be accomplished with two labels:
|
|
||||||
|
|
||||||
* `com.docker.ucp.mesh.http.1=external_route=http://example.com,redirect=https://example.com`
|
|
||||||
* `com.docker.ucp.mesh.http.2=external_route=sni://example.com`
|
|
||||||
|
|
||||||
Another use is a service expecting traffic only on a single domain, but other
|
|
||||||
domains should be redirected to it. For example, a website that has been
|
|
||||||
renamed might use this functionality. The following labels accomplish this for
|
|
||||||
`new.example.com` and `old.example.com`
|
|
||||||
|
|
||||||
* `com.docker.ucp.mesh.http.1=external_route=http://old.example.com.com,redirect=http://new.example.com`
|
|
||||||
* `com.docker.ucp.mesh.http.2=external_route=http://new.example.com`
|
|
||||||
|
|
@ -0,0 +1,181 @@
|
||||||
|
---
|
||||||
|
title: Use domain names to access services
|
||||||
|
description: Learn how to configure your services to make them accessible using a hostname instead of IP addresses and ports.
|
||||||
|
keywords: ucp, services, http, dns
|
||||||
|
redirect_from:
|
||||||
|
- /datacenter/ucp/2.1/guides/user/services/use-hostnames-to-access-your-service/
|
||||||
|
---
|
||||||
|
|
||||||
|
You can make it easier for users to access your HTTP and HTTPS services, by
|
||||||
|
making them accessible from a domain name, instead of an IP address.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
In this example, we're going to deploy a Wordpress service and make it accessible
|
||||||
|
to users at `http://wordpress.example.org`.
|
||||||
|
|
||||||
|
## Enable the HTTP routing mesh
|
||||||
|
|
||||||
|
Before you start, make sure an administrator user has
|
||||||
|
[enabled the HTTP routing mesh service](../../admin/configure/use-domain-names-to-access-services.md).
|
||||||
|
You also need permissions to attach services to the `ucp-hrm` network.
|
||||||
|
|
||||||
|
## Deploy Wordpress
|
||||||
|
|
||||||
|
Log in the **UCP web UI**, navigate to the **Services** page, and click
|
||||||
|
**Create a service**. Then create a Wordpress service with the following
|
||||||
|
configurations:
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
|:------------------|:----------------------|
|
||||||
|
| Service name | wordpress |
|
||||||
|
| Image name | wordpress:latest |
|
||||||
|
| Internal port | 80 |
|
||||||
|
| Protocol | tcp |
|
||||||
|
| Publish Mode | ingress |
|
||||||
|
| Public port | 8000 |
|
||||||
|
| External scheme | http:// |
|
||||||
|
| Routing mesh host | wordpress.example.com |
|
||||||
|
|
||||||
|
When creating the service, make sure to publish both internal and public ports.
|
||||||
|
This maps the port 80 on the container running the service, to port 8000 on the
|
||||||
|
ingress routing mesh.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
Then click the **Add hostname based route** to set the hostname that will
|
||||||
|
resolve to the service.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
Finally, you need to connect the service to the `ucp-hrm` network. This is
|
||||||
|
what ensures traffic send to the HTTP routing mesh is redirected to your
|
||||||
|
service.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
Click **Deploy now** to deploy your service. Once the service is deployed,
|
||||||
|
the HTTP routing mesh service is reconfigured to redirect HTTP requests with
|
||||||
|
the hostname set to `wordpress.example.org`, to the Wordpress service.
|
||||||
|
|
||||||
|
## Add a DNS entry
|
||||||
|
|
||||||
|
Now that Wordpress is deployed, add a new DNS entry that maps
|
||||||
|
`wordpress.example.org` to the IP address of any node in the UCP cluster.
|
||||||
|
When testing locally, you can also change your `/etc/hosts` file to
|
||||||
|
create this mapping, instead of using a DNS service.
|
||||||
|
|
||||||
|
Once this is done, you can access the wordpress service from your browser.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
## From the CLI
|
||||||
|
|
||||||
|
To deploy the Wordpress service from the CLI, you need to add labels to the
|
||||||
|
service that are specific to the HTTP routing mesh.
|
||||||
|
|
||||||
|
Once you get your [UCP client bundle](../access-ucp/cli-based-access.md), you
|
||||||
|
can run:
|
||||||
|
|
||||||
|
```none
|
||||||
|
docker service create \
|
||||||
|
--publish target=80,published=8000 \
|
||||||
|
--network ucp-hrm \
|
||||||
|
--label com.docker.ucp.mesh.http=external_route=http://wordpress.example.org,internal_port=80 \
|
||||||
|
--name wordpress \
|
||||||
|
wordpress:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Under the hood
|
||||||
|
|
||||||
|
Under the hood, UCP relies on labels to configure your services to use the
|
||||||
|
HTTP routing mesh. The UCP web UI automatically adds labels to your services,
|
||||||
|
but when deploying from the CLI or using compose files, you need to add labels
|
||||||
|
to your services.
|
||||||
|
|
||||||
|
The HTTP routing mesh can route to a service, as long as that service:
|
||||||
|
|
||||||
|
* Is attached to a network that has the `com.docker.ucp.mesh.http` label. You
|
||||||
|
can use the default `ucp-hrm` network or create your own
|
||||||
|
* Publishes the ports that you want to route to
|
||||||
|
* Has one or more labels with the prefix `com.docker.ucp.mesh.http`, specifying
|
||||||
|
the ports to route to
|
||||||
|
|
||||||
|
### Service labels
|
||||||
|
|
||||||
|
The HTTP routing mesh label that you apply to your services needs to have a list
|
||||||
|
of keys and values separated by a comma, specifying how to route the traffic to
|
||||||
|
your service. The label syntax looks like this:
|
||||||
|
|
||||||
|
```none
|
||||||
|
com.docker.ucp.mesh.http[.label-number]=<key-1>=<value-1>,<key-2>=<value-2>
|
||||||
|
```
|
||||||
|
|
||||||
|
Where `.label-number` is an optional number that you can include in your label
|
||||||
|
name if you want to have multiple routes to the same service. As an example
|
||||||
|
you could have one route for HTTP and another for HTTPS. In that case you'd
|
||||||
|
apply two labels:
|
||||||
|
|
||||||
|
```none
|
||||||
|
com.docker.ucp.mesh.http.1=<key-1>=<value-1>
|
||||||
|
com.docker.ucp.mesh.http.2=<key-1>=<value-1>
|
||||||
|
```
|
||||||
|
|
||||||
|
The keys and values in your label are what defined the route configuration.
|
||||||
|
These keys are supported:
|
||||||
|
|
||||||
|
| Key | Mandatory | Values | Description |
|
||||||
|
|:----------------|:------------------------------------------|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------|
|
||||||
|
| external_route | yes | http://domain-name or sni://domain-name | The external URL to route to this service |
|
||||||
|
| internal_port | yes, if the port published multiple ports | port-number | The internal port to use for the service |
|
||||||
|
| sticky_sessions | no | cookie-name | Always route a user to the same service, using HTTP cookies. This option can't be used with HTTPS routes |
|
||||||
|
| redirect | no | http://domain-name, or sni://domain-name | Redirect incoming requests to another route using an HTTP 301 redirect |
|
||||||
|
|
||||||
|
|
||||||
|
### Sticky sessions
|
||||||
|
|
||||||
|
You can use the `sticky_sessions` value to always route a user to the same
|
||||||
|
backend service. The first time a user makes a request, the service includes
|
||||||
|
a cookie in the response. When the user makes a new request, their browser
|
||||||
|
will send the cookie, and the HTTP routing mesh can use it to decide to which
|
||||||
|
service to route to.
|
||||||
|
|
||||||
|
Since this requires the HTTP routing mesh to be able to read the cookie, this
|
||||||
|
option only works with HTTP routes.
|
||||||
|
|
||||||
|
Sticky sessions might stop temporarily if the service is reconfigured to
|
||||||
|
change the number of replicas, or if the replicas are restarted.
|
||||||
|
|
||||||
|
### HTTP redirects
|
||||||
|
|
||||||
|
You can use the `redirect` option to redirect requests from one route to
|
||||||
|
another.
|
||||||
|
|
||||||
|
This allows you to redirect traffic to a new domain name if you've renamed the
|
||||||
|
domain you're using to serve your services. For that, you apply two labels to
|
||||||
|
your service:
|
||||||
|
|
||||||
|
```none
|
||||||
|
com.docker.ucp.mesh.http.1=external_route=http://old.example.org,redirect=http://new.example.org
|
||||||
|
com.docker.ucp.mesh.http.2=external_route=http://new.example.org
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also use this to redirect HTTP requests to an HTTPS route. For that you
|
||||||
|
apply two labels to your service:
|
||||||
|
|
||||||
|
```none
|
||||||
|
com.docker.ucp.mesh.http.1=external_route=http://example.org,redirect=https://example.org
|
||||||
|
com.docker.ucp.mesh.http.2=external_route=sni://example.org
|
||||||
|
```
|
||||||
|
|
||||||
|
### Keep services isolated
|
||||||
|
|
||||||
|
If you want to keep the services from sharing the same network, before
|
||||||
|
enabling the HTTP routing mesh:
|
||||||
|
|
||||||
|
1. Create multiple networks and apply the `com.docker.ucp.mesh.http` label to them
|
||||||
|
2. Enable the HTTP routing mesh
|
||||||
|
3. Attach each service to one of the different networks you've created
|
||||||
|
|
||||||
|
The HTTP routing mesh will route to all services in these networks, but services
|
||||||
|
on different networks can't communicate directly.
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
---
|
|
||||||
title: Use hostnames to access your service
|
|
||||||
description: Learn how to configure your services to make them accessible using a hostname instead of IP addresses and ports.
|
|
||||||
keywords: ucp, services, http, dns
|
|
||||||
---
|
|
||||||
|
|
||||||
When you deploy a service with an HTTP or HTTPS endpoint, you can make it
|
|
||||||
accessible to users by mapping the service port to the swarm routing mesh port.
|
|
||||||
This makes your service available using the IP address of any node in the
|
|
||||||
cluster.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
UCP takes this one step further and allows you to configure your HTTP or HTTPS
|
|
||||||
services to make them available using hostnames while sharing the same port.
|
|
||||||
This simplifies configuration, with each service specifies the hostname or
|
|
||||||
hostnames that it handles, giving your team fewer places to configure common
|
|
||||||
options for routing.
|
|
||||||
|
|
||||||
In this example we're going to deploy an NGINX service and make it available
|
|
||||||
with the hostname `app.ucp.example.com`. This guide uses the UCP web UI. The
|
|
||||||
same functionality is [provided via the Docker CLI and API using
|
|
||||||
labels](hrm-labels.md).
|
|
||||||
|
|
||||||
## Configuring a service for the HTTP routing mesh using the UCP web UI
|
|
||||||
|
|
||||||
Start by making sure that the
|
|
||||||
[HTTP routing mesh service is enabled](../../admin/configure/use-domain-names-to-access-services.md),
|
|
||||||
you have access to the `ucp-hrm` network, and that DNS records are configured.
|
|
||||||
If you don't have administrator credentials, ask your system administrator to
|
|
||||||
enable the HTTP routing mesh, and grant you access to the `ucp-hrm` network.
|
|
||||||
|
|
||||||
Log in the **UCP web UI**, navigate to the **Services** page, and click
|
|
||||||
**Create a service**. Then create an NGINX service with the following
|
|
||||||
configurations:
|
|
||||||
|
|
||||||
| Field | Value |
|
|
||||||
|:------------------|:--------------------|
|
|
||||||
| Service name | nginx |
|
|
||||||
| Image name | nginx |
|
|
||||||
| Internal port | 80 |
|
|
||||||
| Protocol | tcp |
|
|
||||||
| Publish Mode | ingress |
|
|
||||||
| Public port | 8000 |
|
|
||||||
| External scheme | http:// |
|
|
||||||
| Routing mesh host | app.ucp.example.com |
|
|
||||||
|
|
||||||
When creating the service, make sure to publish both internal and public ports.
|
|
||||||
This maps the port 80 on the container running the service, to port 8000 on the
|
|
||||||
ingress routing mesh.
|
|
||||||
|
|
||||||
{: .with-border}
|
|
||||||
|
|
||||||
Then click the **Add hostname based route** to set the hostname that will
|
|
||||||
resolve to the service.
|
|
||||||
|
|
||||||
{: .with-border}
|
|
||||||
|
|
||||||
Finally, you need to connect the service to the `ucp-hrm` network. This is
|
|
||||||
what ensures traffic send to the HTTP routing mesh is redirected to your
|
|
||||||
service.
|
|
||||||
|
|
||||||
{: .with-border}
|
|
||||||
|
|
||||||
Click **Deploy now** to deploy your service. Once the service is deployed,
|
|
||||||
the HTTP routing mesh service is reconfigured to redirect HTTP requests with
|
|
||||||
the hostname set to `app.ucp.example.com`, to the NGINX service.
|
|
||||||
|
|
||||||
To make this service accessible to users, you need to add an entry to your DNS,
|
|
||||||
mapping the name `app.ucp.example.com` to the IP address of any node in the
|
|
||||||
UCP cluster. When testing locally, you can also change your `/etc/hosts` file to
|
|
||||||
create this mapping, instead of using a DNS service.
|
|
||||||
|
|
||||||
Now when you access `http://app.ucp.example.com` from your browser, you'll see
|
|
||||||
the default NGINX page.
|
|
||||||
|
|
||||||
{: .with-border}
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
Once you have configured the HTTP routing mesh with a simple service, you may
|
|
||||||
want to explore other configuration options, including configuration using the
|
|
||||||
Docker CLI or advanced options.
|
|
||||||