|
| 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 | +``` |
0 commit comments