Skip to content

Commit f9a3e63

Browse files
weltekialexellis
authored andcommitted
Add cloud CLI reference docs
Document the inlets-pro cloud plugin: install/auth, creating HTTP tunnels with and without a custom domain, Ingress tunnels, connecting clients (CLI/k8s/systemd), domain registration and TXT verification, regions, and managing a tunnel's Security Group allow list via ACLs. Signed-off-by: Han Verstraete (OpenFaaS Ltd) <han@openfaas.com>
1 parent e64e98f commit f9a3e63

2 files changed

Lines changed: 312 additions & 0 deletions

File tree

docs/cloud/cli.md

Lines changed: 311 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,311 @@
1+
# Cloud CLI Reference
2+
3+
The `inlets-pro cloud` CLI is a plugin that provides a command-line interface to [Inlets Cloud](/cloud/index/). It lets you manage Inlets Cloud tunnels directly from the terminal.
4+
5+
## Install the cloud CLI plugin
6+
7+
The `cloud` plugin is not bundled with `inlets-pro` by default. It is a plugin that needs to be installed separately:
8+
9+
```bash
10+
inlets-pro plugin get cloud
11+
```
12+
13+
After installation, run `inlets-pro cloud` to verify it works:
14+
15+
```bash
16+
inlets-pro cloud version
17+
```
18+
19+
## Authenticate
20+
21+
Before using the CLI, log in with your access token from the Inlets Cloud dashboard:
22+
23+
```bash
24+
inlets-pro cloud auth login --token <ACCESS_TOKEN>
25+
```
26+
27+
Verify the active session:
28+
29+
```bash
30+
inlets-pro cloud auth whoami
31+
```
32+
33+
To log out:
34+
35+
```bash
36+
inlets-pro cloud auth logout
37+
```
38+
39+
## Create tunnels
40+
41+
A tunnel can be created in one of two modes:
42+
43+
* `http` (default) — an HTTPS-terminated tunnel for a single HTTP service. Use a generated `tryinlets.dev` domain or bring your own custom domain.
44+
* `ingress` — a TCP pass-through tunnel for ports 80 and 443. Requires a custom domain.
45+
46+
### Create an HTTP tunnel
47+
48+
This is the quickest way to get started. Inlets Cloud generates a subdomain for you under the `tryinlets.dev` domain.
49+
50+
```bash
51+
inlets-pro cloud tunnel create my-tunnel
52+
```
53+
54+
The `http` mode is the default, so the command above is equivalent to:
55+
56+
```bash
57+
inlets-pro cloud tunnel create --generated my-tunnel
58+
```
59+
60+
Create the tunnel in a specific region:
61+
62+
```bash
63+
inlets-pro cloud tunnel create my-tunnel --region us-east-1
64+
```
65+
66+
### Create an HTTP tunnel with a custom domain
67+
68+
You can serve the tunnel from your own domain instead of a generated one.
69+
70+
!!! note "Register and verify the domain first"
71+
Before you can create a tunnel with a custom domain, the domain must be
72+
registered and verified. First [add the domain](#add-a-domain), then
73+
[verify it](#verify-a-domain). A tunnel that references an unverified domain will be rejected.
74+
75+
Once the domain is verified, pass it with `--domain`:
76+
77+
```bash
78+
inlets-pro cloud tunnel create my-tunnel --domain myapp.example.com
79+
```
80+
81+
### Create an Ingress tunnel
82+
83+
An Ingress tunnel passes TCP through on ports 80 and 443 to your own reverse proxy or Kubernetes Ingress Controller. It always uses a custom domain, which must be [registered and verified first](#domains):
84+
85+
```bash
86+
inlets-pro cloud tunnel create ingress my-tunnel --domain myapp.example.com
87+
```
88+
89+
### List tunnels
90+
91+
```bash
92+
inlets-pro cloud tunnel list
93+
```
94+
95+
```
96+
NAME TYPE REGION STATUS DOMAIN CONNECTED
97+
my-tunnel http cambs1 Created leveto.cambs1.tryinlets.dev 1
98+
openfaas ingress cambs1 Created *.openfaas.example.dev 1
99+
```
100+
101+
You can include RX/TX traffic metrics by adding the `--verbose` when listing tunnels:
102+
103+
```bash
104+
inlets-pro cloud tunnel list --verbose
105+
```
106+
107+
### Delete a tunnel
108+
109+
Delete by name:
110+
111+
```bash
112+
inlets-pro cloud tunnel delete my-tunnel
113+
```
114+
115+
Delete by domain:
116+
117+
```bash
118+
inlets-pro cloud tunnel delete example.com
119+
```
120+
121+
### Connect to a tunnel
122+
123+
The `connect` command prints the configuration needed to run the inlets client for a tunnel, including the tunnel URL, token and upstream targets. The output is written to stdout so you can copy it or pipe it into a file. Use `--format` to choose how it is generated.
124+
125+
By default it prints a ready-to-run `inlets-pro uplink client` CLI one-liner:
126+
127+
```bash
128+
inlets-pro cloud tunnel connect my-tunnel
129+
```
130+
131+
Override the upstream targets that traffic is forwarded to:
132+
133+
```bash
134+
inlets-pro cloud tunnel connect my-tunnel --upstream "8080=127.0.0.1:8080"
135+
```
136+
137+
Use `--format k8s` to print a Kubernetes Deployment manifest that runs the inlets client as a Pod. The manifest is written to stdout, so redirect it to a file and apply it with `kubectl`:
138+
139+
```bash
140+
inlets-pro cloud tunnel connect --format k8s my-tunnel > inlets-client.yaml
141+
kubectl apply -f inlets-client.yaml
142+
```
143+
144+
Set the namespace and inlets-pro image version used in the manifest:
145+
146+
```bash
147+
inlets-pro cloud tunnel connect --format k8s \
148+
--namespace ingress \
149+
--inlets-version 0.11.1 \
150+
my-tunnel
151+
```
152+
153+
Use `--format systemd` to print a systemd unit file that runs the inlets client as a service. The unit is written to stdout, so save it under `/etc/systemd/system/`, then reload and enable it to keep the tunnel connected across reboots:
154+
155+
```bash
156+
inlets-pro cloud tunnel connect --format systemd my-tunnel \
157+
| sudo tee /etc/systemd/system/my-tunnel-inlets-client.service
158+
sudo systemctl daemon-reload
159+
sudo systemctl enable --now my-tunnel-inlets-client
160+
```
161+
162+
### Manage Ingress tunnel domains
163+
164+
Attach an additional domain to an Ingress tunnel:
165+
166+
```bash
167+
inlets-pro cloud tunnel domain add my-tunnel myapp.example.com
168+
```
169+
170+
Remove a domain from an Ingress tunnel:
171+
172+
```bash
173+
inlets-pro cloud tunnel domain remove my-tunnel myapp.example.com
174+
```
175+
176+
### Enable Proxy Protocol
177+
178+
Set Proxy Protocol (v1 or v2) on an Ingress tunnel to preserve the original client IP:
179+
180+
```bash
181+
inlets-pro cloud tunnel proxy-protocol set my-tunnel v2
182+
```
183+
184+
Disable Proxy Protocol:
185+
186+
```bash
187+
inlets-pro cloud tunnel proxy-protocol set my-tunnel none
188+
```
189+
190+
## Domains
191+
192+
Manage custom apex domains for HTTPS tunnels. Before creating a [tunnel with a custom domain](#create-an-http-tunnel-with-a-custom-domain) or an [Ingress tunnel](#create-an-ingress-tunnel), you must first register and verify the domain using the steps below.
193+
194+
### Add a domain
195+
196+
Register an apex domain with Inlets Cloud:
197+
198+
```bash
199+
inlets-pro cloud domain add example.com
200+
```
201+
202+
### Verify a domain
203+
204+
Verifying a domain proves you own it before Inlets Cloud will issue TLS certificates and route traffic for it. This is a one-time DNS TXT record challenge.
205+
206+
**1. Get the verification challenge**
207+
208+
```bash
209+
inlets-pro cloud domain get example.com
210+
```
211+
212+
```
213+
Domain: example.com
214+
Verified: no
215+
Required TXT record: inlets-domain-verify=ba4a4ab1-3324-4b1c-b684-e0ff2cc53e08
216+
```
217+
218+
**2. Create the TXT record at your DNS provider**
219+
220+
Add a `TXT` record on the apex of the domain using the value from the previous step:
221+
222+
| Type | Name | Value |
223+
|------|-----------|--------------------------------------------------------|
224+
| TXT | `@` | `inlets-domain-verify=ba4a4ab1-3324-4b1c-b684-e0ff2cc53e08` |
225+
226+
The `@` name (also shown as the bare domain by some providers) places the record on the apex, e.g. `example.com`. DNS changes can take a few minutes to propagate.
227+
228+
**3. Verify the domain**
229+
230+
Once the record has propagated, ask Inlets Cloud to check it:
231+
232+
```bash
233+
inlets-pro cloud domain verify example.com
234+
```
235+
236+
If the TXT record cannot be found yet, the command will report the domain as unverified. Wait for DNS to propagate and run it again. You can re-run `domain get` at any time to recheck the status and re-fetch the challenge value.
237+
238+
### List domains
239+
240+
List all registered domains:
241+
242+
```bash
243+
inlets-pro cloud domain list
244+
```
245+
246+
```
247+
DOMAIN VERIFIED LAST_VERIFIED
248+
example.com yes 2026-03-11T16:12:48Z
249+
```
250+
251+
### Delete a domain
252+
253+
```bash
254+
inlets-pro cloud domain delete example.com
255+
```
256+
257+
## Regions
258+
259+
List available Inlets Cloud regions:
260+
261+
```bash
262+
inlets-pro cloud region list
263+
```
264+
265+
```
266+
NAME DESCRIPTION HTTPS_GENERATED HTTPS_CUSTOM WILDCARD_DOMAIN
267+
cambs1 eu-west-1 yes yes cambs1.tryinlets.dev
268+
us-east-1 us-east-1 yes yes us-east-1.tryinlets.dev
269+
```
270+
271+
Each row is a region you can target. The columns are:
272+
273+
- `NAME` — the region's identifier. Pass this value to `--region` when creating a tunnel.
274+
- `DESCRIPTION` — the underlying cloud provider region the tunnel servers run in.
275+
- `HTTPS_GENERATED``yes` if the region can host HTTP tunnels with an auto-generated `tryinlets.dev` domain.
276+
- `HTTPS_CUSTOM``yes` if the region can host HTTP tunnels with your own domain.
277+
- `WILDCARD_DOMAIN` — the wildcard domain that generated tunnel names are created under in this region (for example `cambs1.tryinlets.dev`).
278+
279+
## ACLs
280+
281+
Manage the IP allow list for a tunnel's [Security Group](/cloud/security-groups/). Each tunnel has a Security Group containing the CIDRs/IPs that are allowed to reach it. These commands let you view and update that allow list from the CLI.
282+
283+
List ACL entries for a tunnel:
284+
285+
```bash
286+
inlets-pro cloud acl list my-tunnel
287+
```
288+
289+
```
290+
Tunnel: my-tunnel
291+
Security Group: default
292+
ALLOW
293+
0.0.0.0/0
294+
```
295+
296+
Set ACL entries (replaces all existing entries):
297+
298+
```bash
299+
inlets-pro cloud acl set my-tunnel --allow 203.0.113.0/24 --allow 198.51.100.5
300+
```
301+
302+
## JSON output
303+
304+
Most commands support `--json` for machine-readable output, which is useful for scripting:
305+
306+
```bash
307+
inlets-pro cloud tunnel list --json
308+
inlets-pro cloud tunnel connect my-tunnel --json
309+
inlets-pro cloud auth whoami --json
310+
inlets-pro cloud region list --json
311+
```

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ nav:
139139
- Inlets Cloud:
140140
- Overview: cloud/index.md
141141
- Security Groups: cloud/security-groups.md
142+
- CLI Reference: cloud/cli.md
142143

143144
- Reference:
144145
- Overview: reference/index.md

0 commit comments

Comments
 (0)