From 00dd6413ac7bf943c37c52e9bf20ca4e77a1e734 Mon Sep 17 00:00:00 2001 From: Owen Date: Wed, 17 Sep 2025 16:22:58 -0400 Subject: [PATCH] Add new docs T# --- images/targets_config.png | Bin 0 -> 22610 bytes manage/blueprints.mdx | 14 +++++++- manage/resources/targets.mdx | 67 ++++++++++++++++++++++++----------- package-lock.json | 6 ++++ 4 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 images/targets_config.png create mode 100644 package-lock.json diff --git a/images/targets_config.png b/images/targets_config.png new file mode 100644 index 0000000000000000000000000000000000000000..3763b973ba27a08ffb1ea4ae68ed08e4d3758e20 GIT binary patch literal 22610 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 wZ@2uXsL%UuR + + Newt automatically discovers and applies blueprints defined in YAML format when passing the `--blueprint-file` argument. For example + + ```bash + newt --blueprint-file /path/to/blueprint.yaml + ``` + + + ### Proxy Resources Proxy resources are used to expose HTTP, TCP, or UDP services through Pangolin. Below is an example configuration for proxy resources: @@ -110,7 +122,7 @@ When using targets-only resources, the `name` and `protocol` fields are not requ ### Client Resources -Client resources are only accessible when connected via an Olm client: +Client resources define proxied resources accessible when connected via an Olm client: ```yaml client-resources: diff --git a/manage/resources/targets.mdx b/manage/resources/targets.mdx index beac73a..5041a1d 100644 --- a/manage/resources/targets.mdx +++ b/manage/resources/targets.mdx @@ -54,29 +54,54 @@ newt --prefer-endpoint Pangolin currently does not load balance between nodes, only between targets on the same node. -## Configuring Targets +## Path-Based Routing - - - In the Pangolin dashboard, go to the **Resources** section. - +Path-based routing allows you to direct traffic to different targets based on the request path. This enables sophisticated routing scenarios where different services can handle different parts of your application. - - Either create a new resource or select an existing resource to edit. - +### How Path-Based Routing Works - - Click **Add Target** to configure a new destination. - +Each target can be configured with optional path routing parameters: - - Specify the target configuration: - - **Address**: IP address or hostname of the target service - - **Port**: Port number where the service is listening - - **Site**: Select the site where this target is located - - +- **Path**: The path pattern to match against incoming requests +- **Match**: The matching strategy to use when comparing the request path - -Pangolin uses round-robin load balancing by default, distributing traffic evenly across all targets. - \ No newline at end of file +When a request comes in, Pangolin evaluates the path against all targets and routes traffic to the target with the matching path configuration. + +### Match Types + +Pangolin supports three different matching strategies: + + + **exact**: The request path must match the configured path exactly. + + Example: Path `/api/users` with exact match only matches `/api/users` + + + + **prefix**: The request path must start with the configured path. + + Example: Path `/api` with prefix match matches `/api/users`, `/api/orders`, `/api/users/123`, etc. + + + + **regex**: The request path is matched against a regular expression pattern. + + Example: Path `^/api/users/[0-9]+$` with regex match matches `/api/users/123` but not `/api/users/abc` + + + + Targets example + + +### Load Balancing with Path-Based Routing + +When multiple targets have the same path and match configuration, Pangolin will load balance between them using round-robin distribution. + +**Example Scenario:** +- Target 1: Path `/api`, Match `prefix`, Address `10.0.1.10:8080` +- Target 2: Path `/api`, Match `prefix`, Address `10.0.1.11:8080` +- Target 3: Path `/web`, Match `prefix`, Address `10.0.1.12:80` + +In this configuration: +- Requests to `/api/users` will be load balanced between Target 1 and Target 2 +- Requests to `/web/dashboard` will only go to Target 3 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..15b832f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "docs-v2", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}