diff --git a/manage/blueprints.mdx b/manage/blueprints.mdx
index db1c03d..b5cb2ab 100644
--- a/manage/blueprints.mdx
+++ b/manage/blueprints.mdx
@@ -129,7 +129,8 @@ private-resources:
ssh-host:
name: SSH Host
mode: host
- site: my-site
+ sites:
+ - my-site
destination: 192.168.1.10
tcp-ports: "22"
roles:
@@ -282,9 +283,10 @@ Private resources define what Pangolin clients can reach after they connect to y
- Use **`mode: host`** for a single host or DNS name
- Use **`mode: cidr`** for an entire network range
+- Use **`mode: http`** to expose an internal HTTP endpoint to clients via a private domain
-When applying a blueprint via Newt (using `--blueprint-file` or container labels), `site` is optional. If omitted, the resource is assigned to the site of the Newt that applied the blueprint.
+When applying a blueprint via Newt (using `--blueprint-file` or container labels), `sites` is optional. If omitted, the resource is assigned to the site of the Newt that applied the blueprint.
```yaml
@@ -293,7 +295,8 @@ private-resources:
name: Internal Network
mode: cidr
destination: 10.0.0.0/24
- site: my-site
+ sites:
+ - my-site
tcp-ports: "22,443,8000-9000"
udp-ports: "53,123"
disable-icmp: false
@@ -304,6 +307,19 @@ private-resources:
- user@example.com
machines:
- machine-id-1
+
+ internal-app:
+ name: Internal App
+ mode: http
+ destination: 10.0.0.5
+ destination-port: 8080
+ sites:
+ - my-site
+ full-domain: app.internal.example.com
+ ssl: true
+ scheme: https
+ roles:
+ - Member
```
## Container Labels Format
@@ -433,7 +449,8 @@ private-resources:
ssh-host:
name: SSH Host
mode: host
- site: my-site
+ sites:
+ - my-site
destination: 192.168.1.10
tcp-ports: "22"
@@ -966,7 +983,8 @@ private-resources:
internal-net:
name: Internal Network
mode: cidr
- site: my-site
+ sites:
+ - my-site
destination: 10.0.0.0/24
tcp-ports: "22,443"
udp-ports: "53"
@@ -978,6 +996,17 @@ private-resources:
- user@example.com
machines:
- machine-id-1
+
+ internal-app:
+ name: Internal App
+ mode: http
+ sites:
+ - my-site
+ destination: 10.0.0.5
+ destination-port: 8080
+ full-domain: app.internal.example.com
+ ssl: true
+ scheme: https
```
@@ -995,26 +1024,73 @@ private-resources:
Private resource type.
- **Options**: `host`, `cidr`
+ **Options**: `host`, `cidr`, `http`
+
+ - `host`: A single host or IP. If `destination` is a domain, `alias` is required.
+ - `cidr`: An entire IPv4 or IPv6 CIDR range.
+ - `http`: An internal HTTP endpoint exposed to clients via `full-domain`.
YAML: `mode: cidr`
Container label: `pangolin.private-resources.internal-net.mode=cidr`
-
- Site that hosts the resource. Optional when deploying from a Newt — if omitted, the resource is assigned to the site of the Newt that applied the blueprint.
+
+ Sites that host the resource. Optional when deploying from a Newt — if omitted, the resource is assigned to the site of the Newt that applied the blueprint.
+
+ Container labels for arrays must include an index (`[0]`, `[1]`, ...).
+
+ YAML: `sites: [my-site]`
+ Container label: `pangolin.private-resources.internal-net.sites[0]=my-site`
+
+
+
+ Deprecated. Use `sites` instead.
YAML: `site: my-site`
Container label: `pangolin.private-resources.internal-net.site=my-site`
- Host, IP, or CIDR block the client should reach.
+ Host, IP, or CIDR block the client should reach. The accepted format depends on `mode`:
+
+ - `host`: a valid IPv4/IPv6 address, or a hostname/domain (when using a domain, `alias` must also be set)
+ - `cidr`: a valid IPv4 or IPv6 CIDR block
+ - `http`: a host or IP for the upstream HTTP endpoint
YAML: `destination: 10.0.0.0/24`
Container label: `pangolin.private-resources.internal-net.destination=10.0.0.0/24`
+
+ Upstream port for the destination. Typically used with `mode: http` to point at the internal HTTP endpoint's port.
+
+ YAML: `destination-port: 8080`
+ Container label: `pangolin.private-resources.internal-app.destination-port=8080`
+
+
+
+ Internal domain used to expose an HTTP private resource to clients. Applies when `mode: http`.
+
+ YAML: `full-domain: app.internal.example.com`
+ Container label: `pangolin.private-resources.internal-app.full-domain=app.internal.example.com`
+
+
+
+ Whether SSL/TLS should be used when serving the private HTTP resource.
+
+ YAML: `ssl: true`
+ Container label: `pangolin.private-resources.internal-app.ssl=true`
+
+
+
+ Upstream scheme used by Pangolin to reach the destination for HTTP private resources.
+
+ **Options**: `http`, `https`
+
+ YAML: `scheme: https`
+ Container label: `pangolin.private-resources.internal-app.scheme=https`
+
+
Allowed TCP ports or ranges. Use comma-separated values for multiple ports or ranges, such as `22,443,8000-9000` or `*` for all ports or leave empty for no ports.
@@ -1043,14 +1119,14 @@ private-resources:
- Internal DNS alias for the resource.
+ Internal DNS alias for the resource. Must be a fully qualified domain name and may include wildcards (`*`, `?`), e.g. `example.com`, `*.example.com`, or `host-0?.example.internal`. Required when `mode: host` and `destination` is a domain.
YAML: `alias: "*.internal.example.com"`
Container label: `pangolin.private-resources.internal-net.alias=*.internal.example.com`
- Roles allowed to access the resource.
+ Roles allowed to access the resource. The `Admin` role is reserved and cannot be listed here.
Container labels for arrays must include an index (`[0]`, `[1]`, ...).