diff --git a/config/mkdocs-overrides/stylesheets/skupper-overrides.css b/config/mkdocs-overrides/stylesheets/skupper-overrides.css
new file mode 100644
index 0000000..2e2722a
--- /dev/null
+++ b/config/mkdocs-overrides/stylesheets/skupper-overrides.css
@@ -0,0 +1,334 @@
+/*
+ * Skupper MkDocs Material Theme Overrides
+ *
+ * This file bridges Material Design theme with Skupper's existing CSS.
+ * It hides Material's header/footer and adjusts layout for Skupper's custom header/footer.
+ */
+
+/* Reset Material's large font sizes to match homepage */
+html {
+ font-size: 16px; /* Browser default, not Material's 20px */
+}
+
+.md-typeset {
+ font-size: 1rem; /* Reset from Material's 1.25rem */
+ line-height: 1.5; /* Match homepage line-height */
+}
+
+.md-typeset h1 {
+ font-size: 2em; /* Reset from Material's larger size */
+ line-height: 1.2;
+}
+
+.md-typeset h2 {
+ font-size: 1.5em; /* Reset from Material's larger size */
+ line-height: 1.3;
+}
+
+.md-typeset h3 {
+ font-size: 1.25em; /* Reset from Material's larger size */
+ line-height: 1.4;
+}
+
+.md-typeset h4 {
+ font-size: 1.1em;
+ line-height: 1.4;
+}
+
+.md-typeset p, .md-typeset li {
+ font-size: 1rem; /* Match body text */
+}
+
+/* Hide Material's default header and footer visually but keep in DOM for JS */
+.md-header {
+ visibility: hidden !important;
+ height: 0 !important;
+ min-height: 0 !important;
+ overflow: hidden !important;
+ position: absolute !important;
+}
+
+.md-footer {
+ visibility: hidden !important;
+ height: 0 !important;
+ min-height: 0 !important;
+ overflow: hidden !important;
+ position: absolute !important;
+}
+
+/* Adjust main content area to account for Skupper header */
+.md-main {
+ margin-top: 0;
+}
+
+.md-container {
+ padding-top: 0;
+}
+
+/* Ensure Skupper header is at the top */
+body > header {
+ position: sticky;
+ top: 0;
+ z-index: 1000;
+}
+
+/* Ensure Skupper footer is at the bottom */
+body > footer {
+ margin-top: auto;
+}
+
+/* Make body a flex container for sticky footer */
+body {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+/* Ensure main content grows to push footer down */
+.md-container {
+ flex: 1;
+}
+
+/* Adjust sidebar positioning to account for Skupper header */
+.md-sidebar {
+ top: 0;
+ padding-top: 1em;
+}
+
+.md-sidebar--primary {
+ top: 0;
+}
+
+.md-sidebar--secondary {
+ top: 0;
+}
+
+/* Match Skupper's link colors in content */
+.md-content a {
+ color: #306b8f;
+}
+
+.md-content a:hover {
+ color: #5eba7d;
+}
+
+/* Match Skupper's code block styling */
+.md-typeset code {
+ background-color: hsl(0, 0%, 97%);
+}
+
+.md-typeset pre {
+ background-color: hsl(0, 0%, 97%);
+}
+
+/* Adjust content width and layout to match Skupper's layout */
+.md-grid {
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
+.md-content__inner {
+ max-width: none;
+ margin: 0;
+ padding: 2.4em 1em;
+}
+
+/* Ensure proper spacing for main content area */
+.md-main__inner {
+ margin-top: 0;
+}
+
+/* Ensure header uses flexbox layout - Font 1.5x, Other params 1.3x */
+header {
+ display: flex !important;
+ justify-content: flex-start;
+ align-items: center;
+ width: 100%;
+ padding: 1.3em 0; /* Remove horizontal padding */
+ position: sticky;
+ top: 0;
+}
+
+/* Logo on the left - Fixed to left edge */
+header > a#-logo {
+ display: flex;
+ align-items: center;
+ gap: 0.65em;
+ text-decoration: none;
+ color: var(--text-color);
+ font-size: 1.8em;
+ font-weight: 700;
+ font-family: var(--heading-font-family);
+ margin-left: 2em; /* Fixed distance from left edge */
+}
+
+header > a#-logo img {
+ height: 3.9em; /* 20% bigger than original 3.25em (3.25 * 1.2 = 3.9) */
+}
+
+/* Center section with nav and GitHub */
+header > div {
+ display: flex;
+ flex: 1;
+ justify-content: center;
+ align-items: center;
+ margin: 0 2em;
+}
+
+/* Navigation tabs in center - Font 1.5x, Gap 1.3x */
+header nav#-tabs {
+ display: flex;
+ gap: 2.1em; /* 1.3x from 2em */
+ font-size: 1.9em; /* 1.5x scaling - KEEP */
+}
+
+header nav#-tabs a {
+ text-decoration: none;
+ color: var(--text-color);
+ padding: 0.65em 0; /* 1.3x from 0.5em 0 */
+ border-bottom: 3.9px solid transparent; /* 1.3x from 3px */
+}
+
+header nav#-tabs a:hover {
+ border-bottom-color: var(--accent-color-1);
+}
+
+header nav#-tabs a.selected {
+ border-bottom-color: var(--accent-color-2);
+ font-weight: 700;
+}
+
+/* GitHub link - Positioned at right edge */
+header > div > a[href*="github"] {
+ text-decoration: none;
+ color: var(--text-color);
+ display: flex;
+ align-items: center;
+ gap: 0.39em;
+ font-size: 1.5em;
+ position: absolute;
+ right: 2em;
+}
+
+/* Hide "GitHub" text, show only icon */
+header > div > a[href*="github"] div {
+ font-size: 0;
+}
+
+header > div > a[href*="github"] span {
+ font-size: 1.5rem; /* Restore icon size */
+}
+
+/* Center the footer content and match home page styling */
+footer {
+ border: 0 !important;
+ background-color: var(--footer-background-color) !important;
+ color: white !important;
+ padding: 3em 1em !important;
+ display: flex !important;
+ justify-content: center !important;
+ font-size: 1rem !important;
+ line-height: 1.5 !important;
+ margin: 0 !important;
+}
+
+footer a {
+ color: white !important;
+}
+
+footer h4 {
+ font-size: 1.1rem !important;
+ margin: 0.5em 0 !important;
+}
+
+footer p {
+ font-size: 1rem !important;
+ margin: 0.5em 0 !important;
+}
+
+footer > div {
+ max-width: 1200px !important;
+ width: var(--page-width) !important;
+ padding: 2em !important;
+ display: flex !important;
+ gap: 2em !important;
+}
+
+footer > div > div {
+ flex: 1;
+}
+
+footer > div > div:first-child {
+ flex: 0;
+ min-width: 10em;
+}
+
+/* Ensure sidebar navigation matches Skupper styling */
+.md-nav__link {
+ color: hsl(0, 0%, 20%);
+}
+
+.md-nav__link:hover {
+ color: #306b8f;
+}
+
+.md-nav__link--active {
+ color: #306b8f;
+ font-weight: 700;
+}
+
+/* Match Skupper's heading styles */
+.md-typeset h1 {
+ color: hsl(0, 0%, 20%);
+}
+
+.md-typeset h2 {
+ color: hsl(0, 0%, 20%);
+}
+
+.md-typeset h3 {
+ color: hsl(0, 0%, 20%);
+}
+
+/* Responsive adjustments */
+@media screen and (max-width: 76.1875em) {
+ .md-sidebar--primary {
+ transform: translateX(-100%);
+ }
+
+ [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
+ transform: translateX(0);
+ }
+}
+
+/* Ensure proper spacing around content */
+.md-content {
+ padding: 2em 1em;
+}
+
+/* Match Skupper's table styling */
+.md-typeset table:not([class]) {
+ border-collapse: collapse;
+}
+
+.md-typeset table:not([class]) th,
+.md-typeset table:not([class]) td {
+ border: 1px solid hsl(0, 0%, 90%);
+ padding: 0.5em 1em;
+}
+
+/* Adjust search box styling to match Skupper */
+.md-search__input {
+ background-color: hsl(0, 0%, 97%);
+}
+
+/* Fix any z-index issues between Skupper header and Material sidebar */
+.md-sidebar {
+ z-index: 999;
+}
+
+body > header {
+ z-index: 1000;
+}
+
+/* Made with Bob */
diff --git a/config/mkdocs_macros.py b/config/mkdocs_macros.py
new file mode 100644
index 0000000..f7eb6a8
--- /dev/null
+++ b/config/mkdocs_macros.py
@@ -0,0 +1,88 @@
+"""
+MkDocs Macros Plugin Configuration
+
+This module defines variables and macros for MkDocs that mirror
+the Transom template variables used in the main site.
+
+Variables are read from the same data sources as Transom to ensure consistency.
+"""
+
+import json
+from pathlib import Path
+from datetime import datetime
+
+
+def define_env(env):
+ """
+ Define variables and macros for MkDocs.
+
+ This function is called by the mkdocs-macros-plugin and provides
+ access to the same variables that Transom uses.
+
+ Args:
+ env: The MkDocs macros environment object
+ """
+
+ # Read release data from the same source as Transom
+ releases_file = Path("input/data/releases.json")
+
+ if releases_file.exists():
+ try:
+ releases = json.loads(releases_file.read_text())
+ latest = releases.get("latest", {})
+
+ # Set version variables from releases.json
+ env.variables['skupper_version'] = latest.get("version", "2.1.1")
+ env.variables['skupper_cli_version'] = latest.get("version", "2.1.1")
+ env.variables['latest_release_version'] = latest.get("version", "2.1.1")
+ env.variables['latest_release_date'] = latest.get("date", "")
+
+ # Format the date if available
+ if env.variables['latest_release_date']:
+ try:
+ date_obj = datetime.fromisoformat(env.variables['latest_release_date'].replace('Z', '+00:00'))
+ env.variables['latest_release_date'] = date_obj.strftime("%Y-%m-%d")
+ except:
+ pass # Keep original format if parsing fails
+
+ except Exception as e:
+ print(f"Warning: Could not read releases.json: {e}")
+ # Fall back to default values
+ env.variables['skupper_version'] = "2.1.1"
+ env.variables['skupper_cli_version'] = "2.1.1"
+ env.variables['latest_release_version'] = "2.1.1"
+ env.variables['latest_release_date'] = ""
+ else:
+ print(f"Warning: {releases_file} not found, using default values")
+ env.variables['skupper_version'] = "2.1.1"
+ env.variables['skupper_cli_version'] = "2.1.1"
+ env.variables['latest_release_version'] = "2.1.1"
+ env.variables['latest_release_date'] = ""
+
+ # Set other variables
+ env.variables['skupper_version_v1'] = "1.9.2"
+
+ # Site prefix for navigation links
+ # Empty for production (https://skupper.io), can be set for local dev or staging
+ # Example: env.variables['site_prefix'] = "http://localhost:8000"
+ env.variables['site_prefix'] = env.conf.get('extra', {}).get('site_prefix', '')
+
+ # Define helper macros if needed
+ @env.macro
+ def get_download_url(version):
+ """Generate a download URL for a specific Skupper version"""
+ return f"https://github.com/skupperproject/skupper/releases/download/{version}"
+
+ @env.macro
+ def get_helm_chart_url(chart_name, version):
+ """Generate a Helm chart URL"""
+ return f"oci://quay.io/skupper/helm/{chart_name}"
+
+ # Print variables for debugging (only during build)
+ if env.conf.get('verbose', False):
+ print("MkDocs Variables:")
+ print(f" skupper_version: {env.variables['skupper_version']}")
+ print(f" skupper_cli_version: {env.variables['skupper_cli_version']}")
+ print(f" skupper_version_v1: {env.variables['skupper_version_v1']}")
+
+# Made with Bob
diff --git a/input/index.html.in b/input/index.html.in
index e662cf8..d5e175e 100644
--- a/input/index.html.in
+++ b/input/index.html.in
@@ -70,3 +70,9 @@ title: Documentation
+
+Troubleshooting
+Learn how to diagnose common application network problems.
+
diff --git a/input/kube-cli/index.md b/input/kube-cli/index.md
index 38b911b..f401eb0 100644
--- a/input/kube-cli/index.md
+++ b/input/kube-cli/index.md
@@ -1,5 +1,6 @@
# Overview of Skupper CLI on Kubernetes
+
You can use the `skupper` CLI on Kubernetes after installing the Skupper controller to configure sites, links and services.
@@ -11,4 +12,4 @@ The Skupper CLI is designed to generate and consume standard resources, ensuring
[site-configuration]: ./site-configuration.html
[site-linking]: ./site-linking.html
-[service-exposure]: ./service-exposure.html
\ No newline at end of file
+[service-exposure]: ./service-exposure.html
diff --git a/input/kube-cli/service-exposure.md b/input/kube-cli/service-exposure.md
index 72b8f85..caa348a 100644
--- a/input/kube-cli/service-exposure.md
+++ b/input/kube-cli/service-exposure.md
@@ -1,5 +1,8 @@
# Exposing services on the application network using the CLI
+
+
+Create connectors and listeners to expose services across the application network.
After creating an application network by linking sites, you can expose services from one site using connectors and consume those services on other sites using listeners.
A *routing key* is a string that matches one or more connectors with one or more listeners.
@@ -10,6 +13,7 @@ This section assumes you have created and linked at least two sites.
## Creating a connector using the CLI
+
A connector binds a local workload to listeners in remote sites.
Listeners and connectors are matched using routing keys.
@@ -36,14 +40,14 @@ For more information about connectors, see [Connector concept][connector].
```bash
skupper connector status
```
-
For example:
-
- ```
+
+ ```bash
$ skupper connector status
NAME STATUS ROUTING-KEY SELECTOR HOST PORT HAS MATCHING LISTENER MESSAGE
backend Pending backend app=backend 8080 false No matching listeners
```
+
**📌 NOTE**
By default, the routing key name is set to the name of the connector.
If you want to use a custom routing key, set the `--routing-key` to your custom name.
@@ -57,6 +61,7 @@ If you need to expose a service from another namespace, you must use YAML as des
## Creating a listener using the CLI
+
A listener binds a local connection endpoint to connectors in remote sites.
Listeners and connectors are matched using routing keys.
@@ -73,7 +78,8 @@ For more information about listeners. see [Listener concept][listener].
skupper listener create [--routing-key ]
```
For example:
- ```
+
+ ```bash
$ skupper listener create backend 8080
Waiting for create to complete...
Listener "backend" is ready
@@ -83,15 +89,14 @@ For more information about listeners. see [Listener concept][listener].
```bash
skupper listener status
```
-
For example:
-
- ```
+
+ ```bash
$ skupper listener status
NAME STATUS ROUTING-KEY HOST PORT MATCHING-CONNECTOR MESSAGE
backend Ready backend backend 8080 true OK
```
-
+
**📌 NOTE**
There must be a `MATCHING-CONNECTOR` for the service to operate.
By default, the routing key name is the listener name.
diff --git a/input/kube-cli/site-configuration.md b/input/kube-cli/site-configuration.md
index 7dce8b5..079715b 100644
--- a/input/kube-cli/site-configuration.md
+++ b/input/kube-cli/site-configuration.md
@@ -1,5 +1,6 @@
# Creating a site on Kubernetes using the Skupper CLI
+
Using the skupper command-line interface (CLI) allows you to create and manage sites from the context of the current namespace.
@@ -7,9 +8,12 @@ A typical workflow is to create a site, link sites together, and expose services
## Checking the Skupper CLI
+
Installing the skupper command-line interface (CLI) provides a simple method to get started with Skupper.
+**Procedure**
+
1. Follow the instructions for [Installing Skupper](https://skupper.io/releases/index.html).
2. Verify the installation.
@@ -22,6 +26,9 @@ Installing the skupper command-line interface (CLI) provides a simple method to
## Creating a simple site using the CLI on Kubernetes
+
+
+Use the Skupper CLI to create a site on Kubernetes from the current namespace context.
**Prerequisites**
@@ -52,28 +59,24 @@ Installing the skupper command-line interface (CLI) provides a simple method to
```
There are many options to consider when creating sites using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
-For example
-
-* `--enable-link-access`
-
- If enabled, this option allows you create tokens and link *to* this site.
- By default, this option is disabled but you can change the setting later `skupper site update --enable-link-access`.
-
-* `--timeout `
+ For example, `--enable-link-access` allows you to create tokens and link *to* this site.
+ By default, this option is disabled, but you can change the setting later:
+ ```bash
+ skupper site update --enable-link-access
+ ```
- You can add the timeout option to specify the maximum time for the CLI wait for the site status to report `ready`.
- ```
- skupper site create my-site --timeout 2m
- ```
- The timeout option does not stop the site from being created, but if the site is not ready, the following is output:
-
- ```
- Site "my-site" is not yet ready: Pending
- ```
- You can check the status of the site at any time using `skupper site status`.
+ You can use `--timeout ` to specify the maximum time that the CLI waits for the site status to report `ready`.
+ ```bash
+ skupper site create my-site --timeout 2m
+ ```
+ The timeout option does not stop the site from being created, but if the site is not ready, the following is output:
+ ```bash
+ Site "my-site" is not yet ready: Pending
+ ```
+ You can check the status of the site at any time by using `skupper site status`.
- By default, the router CPU allocation is BestEffort as described in [Pod Quality of Service Classes](https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/) and this might affect performance under network load.
- To configure site resources, see [Setting site resources](../kube-yaml/site-configuration.html#kube-site-resources-yaml).
+ By default, the router CPU allocation is BestEffort as described in [Pod Quality of Service Classes](https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/), and this might affect performance under network load.
+ To configure site resources, see [Setting site resources](../kube-yaml/site-configuration.html#kube-site-resources-yaml).
@@ -112,6 +115,9 @@ High availability mode deploys two router pods with anti-affinity rules to ensur
## Deleting a site using the CLI on Kubernetes
+
+
+Delete a Skupper site on Kubernetes by using the CLI from the namespace where the site was created.
**Prerequisites**
diff --git a/input/kube-cli/site-linking.md b/input/kube-cli/site-linking.md
index 09bea01..b38afff 100644
--- a/input/kube-cli/site-linking.md
+++ b/input/kube-cli/site-linking.md
@@ -1,5 +1,8 @@
# Linking sites on Kubernetes using the Skupper CLI
+
+
+Create links between sites on Kubernetes by using the CLI.
Using the Skupper command-line interface (CLI) allows you to create links between sites.
The link direction is not significant, and is typically determined by ease of connectivity. For example, if east is behind a firewall, linking from east to west is the easiest option.
@@ -8,6 +11,7 @@ Once sites are linked, services can be exposed and consumed across the applicati
## Linking sites using a token
+
A token provides a secure method to link sites.
By default, a token can only be used once and must be used within 15 minutes to link sites.
@@ -66,7 +70,8 @@ To link sites, you create a token on one site and redeem that token on the other
skupper link status
```
You might need to issue the command multiple times before the link is ready:
- ```
+
+ ```bash
$ skupper link status
NAME STATUS COST MESSAGE
west-12f75bc8-5dda-4256-88f8-9df48150281a Pending 1 Not Operational
@@ -80,6 +85,7 @@ There are many options to consider when linking sites using the CLI, see [CLI Re
## Linking sites using a `link` resource
+
An alternative approach to linking sites using tokens is to create a `link` resource YAML file using the CLI, and to apply that resource to another site.
@@ -92,7 +98,7 @@ To link sites, you create a `link` resource YAML file on one site and apply that
**Procedure**
-1. On the site where you want to create a link , make sure link access is enabled:
+1. On the site where you want to create a link, make sure link access is enabled:
```bash
skupper site update --enable-link-access
```
@@ -119,7 +125,8 @@ To link sites, you create a `link` resource YAML file on one site and apply that
skupper link status
```
You might need to issue the command multiple times before the link is ready:
- ```
+
+ ```bash
$ skupper link status
NAME STATUS COST MESSAGE
west-12f75bc8-5dda-4256-88f8-9df48150281a Pending 1 Not Operational
diff --git a/input/kube-yaml/index.md b/input/kube-yaml/index.md
index 1c8b7fc..e39de69 100644
--- a/input/kube-yaml/index.md
+++ b/input/kube-yaml/index.md
@@ -1,7 +1,8 @@
-# Overview of using YAML CLI on Kubernetes
+# Overview of using YAML on Kubernetes
+
-You can use YAML on Kubernetes after installing the Skupper controller to
+You can use YAML on Kubernetes after installing the Skupper controller to create sites, link sites, and expose or consume services.
* [Create sites][site-configuration]
* [Link sites][site-linking] (requires that one site has link access enabled)
@@ -9,4 +10,4 @@ You can use YAML on Kubernetes after installing the Skupper controller to
[site-configuration]: ./site-configuration.html
[site-linking]: ./site-linking.html
-[service-exposure]: ./service-exposure.html
\ No newline at end of file
+[service-exposure]: ./service-exposure.html
diff --git a/input/kube-yaml/service-exposure.md b/input/kube-yaml/service-exposure.md
index 5a14ad3..37a83af 100644
--- a/input/kube-yaml/service-exposure.md
+++ b/input/kube-yaml/service-exposure.md
@@ -1,15 +1,18 @@
# Exposing services on the application network using YAML
+
After creating an application network by linking sites, you can expose services from one site using connectors and consume those services on other sites using listeners.
+
A *routing key* is a string that matches one or more connectors with one or more listeners.
For example, if you create a connector with the routing key `backend`, you need to create a listener with the routing key `backend` to consume that service.
This section assumes you have created and linked at least two sites.
-
+
## Creating a connector using YAML
+
A connector binds a local workload to listeners in remote sites.
Listeners and connectors are matched using routing keys.
@@ -61,17 +64,18 @@ There are many options to consider when creating connectors using YAML, see [Con
By default, the routing key name is set to the name of the connector.
If you want to use a custom routing key, set the `--routing-key` to your custom name.
-There are many options to consider when creating connectors using YAML, see [CLI Reference][cli-ref], including *frequently used* options.
-
-
+
## Creating a listener using YAML
+
A listener binds a local connection endpoint to connectors in remote sites.
Listeners and connectors are matched using routing keys.
For more information about listeners. see [Listener concept][listener].
+For configuration details, see [Listener resource][listener-resource].
+
**Procedure**
1. Identify a connector that you want to use.
@@ -92,7 +96,7 @@ For more information about listeners. see [Listener concept][listener].
This creates a listener in the `west` site and matches with the connector that uses the routing key `backend`.
It also creates a service named `east-backend` exposed on port 8080 in the current namespace.
- To create the connector resource:
+ To create the listener resource:
```bash
kubectl apply -f
@@ -115,11 +119,9 @@ For more information about listeners. see [Listener concept][listener].
**📌 NOTE**
There must be a `MATCHING-CONNECTOR` for the service to operate.
-There are many options to consider when creating listeners using YAML, see [Listener resource][listener-resource].
-
-
## Creating a connector for a different namespace using YAML
+
A connector binds a local workload to listeners in remote sites.
@@ -129,6 +131,8 @@ If you create a site in one namespace and need to expose a service in a differen
* The AttachedConnectorBinding is a binding to an attached connector in a peer namespace and is created in the site namespace.
* Creating attached connectors requires that Skupper is deployed cluster wide.
+For configuration details, see [Connector resource][connector-resource].
+
**Procedure**
1. Create a workload that you want to expose on the network in a non-site namespace, for example:
@@ -191,12 +195,8 @@ If you create a site in one namespace and need to expose a service in a differen
backend backend attached Ready true
```
-There are many options to consider when creating connectors using YAML, see [Connector resource][connector-resource].
-
-
-
[connector]: https://skupperproject.github.io/refdog/concepts/connector.html
[listener]: https://skupperproject.github.io/refdog/concepts/listener.html
[connector-resource]: https://skupperproject.github.io/refdog/resources/connector.html
-[listener-resource]: https://skupperproject.github.io/refdog/resources/listener.html
\ No newline at end of file
+[listener-resource]: https://skupperproject.github.io/refdog/resources/listener.html
diff --git a/input/kube-yaml/site-configuration.md b/input/kube-yaml/site-configuration.md
index 9c09392..6544911 100644
--- a/input/kube-yaml/site-configuration.md
+++ b/input/kube-yaml/site-configuration.md
@@ -1,5 +1,6 @@
# Creating a site on Kubernetes using YAML
+
Using YAML allows you to create and manage sites from the context of the current namespace.
@@ -7,6 +8,7 @@ A typical workflow is to create a site, link sites together, and expose services
## Creating a simple site on Kubernetes using YAML
+
You can use YAML to create and manage Skupper sites.
@@ -14,7 +16,12 @@ You can use YAML to create and manage Skupper sites.
* The Skupper controller is running on the Kubernetes cluster.
-Procedure
+By default, the router CPU allocation is BestEffort as described in [Pod Quality of Service Classes](https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/), and this might affect performance under network load.
+Consider setting resources as described in [Setting site resources](#kube-site-resources-yaml).
+
+There are many options to consider when creating sites using YAML, see the [YAML Reference][yaml-ref], including *frequently used* options.
+
+**Procedure**
1. Create a site CR YAML file named `my-site.yaml`, for example:
@@ -50,7 +57,7 @@ Procedure
kubectl get site
```
You might need to issue the command multiple times before the site is ready:
- ```
+ ```text
$ kubectl get site
NAME STATUS SITES IN NETWORK MESSAGE
west Pending containers with unready status: [router kube-adaptor]
@@ -60,18 +67,15 @@ Procedure
```
You can now link this site to another site to create an application network.
-By default, the router CPU allocation is BestEffort as described in [Pod Quality of Service Classes](https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/) and this might affect performance under network load.
-Consider setting resources as described in [Setting site resources](#kube-site-resources-yaml).
-
-There are many options to consider when creating sites using YAML, see the [YAML Reference][yaml-ref], including *frequently used* options.
-
[yaml-ref]: https://skupperproject.github.io/refdog/resources/index.html
## Creating a high availability site using YAML
+
+
+Use the `ha` option to create a highly available site on Kubernetes.
-You can create a site that is highly available by using the `ha` option.
High availability mode is intended to maintain service continuity during router restarts or pod rescheduling, but it does not provide failover if network connectivity between sites is lost.
High availability mode deploys two router pods with anti-affinity rules to ensure service continuity during node failures.
@@ -80,7 +84,7 @@ High availability mode deploys two router pods with anti-affinity rules to ensur
* The Skupper controller is running on the Kubernetes cluster you are running
-Procedure
+**Procedure**
1. Create a site CR YAML file named `ha-site.yaml`, for example:
@@ -106,11 +110,15 @@ Procedure
## Setting site resources
+
You can configure the Skupper Router and Kube Adaptor components with minimum and maximum CPU and memory resources by defining sizing models using ConfigMaps.
**Note:** Increasing the number of routers does not improve network performance. An incoming router-to-router link is associated with just one active router. Additional routers do not receive traffic while that router is responding.
+You can define multiple sizing configurations using separate ConfigMaps.
+Only one ConfigMap should be annotated as the default (`skupper.io/default-site-sizing: "true"`).
+
**Prerequisites**
* The Skupper V2 controller is running in your cluster.
@@ -124,7 +132,7 @@ You can configure the Skupper Router and Kube Adaptor components with minimum an
| 2 | Suitable for production environments |
| 5 | Maximum performance |
-Procedure
+**Procedure**
1. Create a sizing ConfigMap in the same namespace where your Skupper V2 controller is running.
@@ -210,7 +218,3 @@ Procedure
}
}
```
-
-You can define multiple sizing configurations using separate ConfigMaps.
-Only one ConfigMap should be annotated as the default (`skupper.io/default-site-sizing: "true"`).
-
diff --git a/input/kube-yaml/site-linking.md b/input/kube-yaml/site-linking.md
index b665d85..599e5c5 100644
--- a/input/kube-yaml/site-linking.md
+++ b/input/kube-yaml/site-linking.md
@@ -1,5 +1,9 @@
+---
+render_macros: false
+---
# Linking sites on Kubernetes using YAML
+
Once sites are linked, services can be exposed and consumed across the application network without the need to open ports or manage inter-site connectivity.
@@ -12,7 +16,10 @@ The link direction is not significant, and is typically determined by ease of co
-## Linking sites using `AccessGrant` and `AccessToken` resources
+## Linking sites using `AccessGrant` and `AccessToken` resources
+
+
+Use `AccessGrant` and `AccessToken` resources to create a link between two Kubernetes sites using YAML.
**Prerequisites**
@@ -63,10 +70,10 @@ A connecting site redeems this token for a `Link` resource to establish a link t
2. On the listening site, populate environment variables to allow token generation:
- ```shell
- URL="$(kubectl get accessgrant grant-west -o template --template '{{{ .status.url }}}')"
- CODE="$(kubectl get accessgrant grant-west -o template --template '{{{ .status.code }}}')"
- CA_RAW="$(kubectl get accessgrant grant-west -o template --template '{{{ .status.ca }}}')"
+ ```bash
+ URL="$(kubectl get accessgrant grant-west -o template --template '{{ .status.url }}')"
+ CODE="$(kubectl get accessgrant grant-west -o template --template '{{ .status.code }}')"
+ CA_RAW="$(kubectl get accessgrant grant-west -o template --template '{{ .status.ca }}')"
```
These environment variable settings support the next step of generating the token.
diff --git a/input/overview/connectivity.md b/input/overview/connectivity.md
index 52055ba..8ca2afa 100644
--- a/input/overview/connectivity.md
+++ b/input/overview/connectivity.md
@@ -1,5 +1,8 @@
# Skupper connectivity
+
+
+Skupper provides secure connectivity for services running across multiple clusters.
Skupper represents a new approach to connecting services across multiple Kubernetes clusters.
See how Skupper can give you the flexibility to deploy your services where you need them.
@@ -42,4 +45,3 @@ You can add and remove sites on demand.
Build large, robust networks of connected clusters.

-
diff --git a/input/overview/index.md b/input/overview/index.md
index 38b4d89..d6833ce 100644
--- a/input/overview/index.md
+++ b/input/overview/index.md
@@ -1,5 +1,8 @@
# Skupper overview
+
+
+Skupper connects distributed applications across sites by creating an application network.
Hybrid clouds enable organizations to combine on-premises, private cloud, and public cloud resources.
While such a solution provides many benefits, it also presents a unique challenge: enabling these resources to communicate with each other.
@@ -8,6 +11,9 @@ Skupper provides a solution to this challenge with an Application Network that s
## Application Networks
+
+
+An application network connects services across sites as if they were running together.
Skupper solves multi-cluster communication challenges through something called a Virtual Application Network or just application network.
To understand the value of Skupper, it is helpful to first understand what an application network is.
@@ -25,6 +31,9 @@ Application networks are able to provide connectivity across the hybrid cloud by
## Skupper routers
+
+
+Skupper routers carry application traffic between services in different sites.
Skupper routers form the backbone of an application network in the same way that conventional network routers form the backbone of a VPN.
However, instead of routing IP packets between network endpoints, Skupper routers route messages between application endpoints.
@@ -45,6 +54,9 @@ Application networks provide multiple routing patterns, so communications can be
## Skupper
+
+
+Skupper is the tool that creates and manages application networks across sites.
Skupper is an open source tool for creating application networks in Kubernetes or Linux.
By using Skupper, you can create a distributed application consisting of microservices running in different sites.
@@ -59,4 +71,3 @@ This means that each Skupper instance is always aware of every service that has
Once a Skupper network is formed across Kubernetes namespaces, any of the services in those namespaces can be exposed (through annotation) to the Skupper network.
When a service is exposed, Skupper creates proxy endpoints to make that service available on each namespace in the Skupper network.
-
diff --git a/input/overview/load-balancing.md b/input/overview/load-balancing.md
index 5dcc760..9ba8a94 100644
--- a/input/overview/load-balancing.md
+++ b/input/overview/load-balancing.md
@@ -1,5 +1,8 @@
# Skupper load balancing and failover
+
+
+Skupper balances active connections across sites and reroutes traffic when a site fails.
Skupper enables load balancing and failover across servers located across the application network.
Specifically, Skupper balances **active TCP connections** across workloads deployed in distinct sites.
diff --git a/input/overview/resources.md b/input/overview/resources.md
index 2d22b3a..979b74d 100644
--- a/input/overview/resources.md
+++ b/input/overview/resources.md
@@ -13,7 +13,7 @@ To get start creating application networks, you create the following custom reso
* Connectors
* Listeners
-See [Resource Reference][yaml-ref] for explanations of all the custom resources.
+See [Resource CONCEPT][yaml-ref] for explanations of all the custom resources.
## Service accounts, roles and role bindings
diff --git a/input/overview/routing.md b/input/overview/routing.md
index e238001..9192f56 100644
--- a/input/overview/routing.md
+++ b/input/overview/routing.md
@@ -1,5 +1,8 @@
# Skupper routing
+
+
+Skupper routes application traffic by using routing keys, ports, and site-aware paths.
Skupper uses routing keys and ports to connect servers and clients.
See how the power of application-layer addressing can bring new capabilities to your applications.
@@ -19,7 +22,7 @@ The Skupper network has cross-cluster visibility.
It can see which services are already loaded and which have spare capacity, and it directs requests accordingly.
You can assign a cost to each inter-cluster connection.
-This enables you to configure a preference for one resource over another.
+This enables you to configure a pCONCEPT for one resource over another.
If demand is normal, you can keep all traffic on your private cloud.
If demand peaks, you can dynamically spill over to public cloud resources.
diff --git a/input/overview/security.md b/input/overview/security.md
index 740e793..81503c1 100644
--- a/input/overview/security.md
+++ b/input/overview/security.md
@@ -1,5 +1,8 @@
# Skupper security
+
+
+Skupper protects service-to-service communication with built-in mutual TLS security.
Skupper securely connects your services with TLS authentication and encryption.
See how Skupper enables you to deploy your application securely across Kubernetes clusters.
@@ -21,4 +24,3 @@ Each router is uniquely identified by its own certificate.

This means that the Skupper network is isolated from external access, preventing security risks such as lateral attacks, malware infestations, and data exfiltration.
-
diff --git a/input/system-cli/index.md b/input/system-cli/index.md
index d20b851..354e389 100644
--- a/input/system-cli/index.md
+++ b/input/system-cli/index.md
@@ -1,6 +1,8 @@
# Overview of Skupper CLI on local systems
+
+Use the Skupper CLI on local systems to create sites, link them to other sites, and expose or consume services.
* [Create sites][site-configuration]
* [Link sites][site-linking] (requires that one site has link access enabled)
@@ -8,4 +10,4 @@
[site-configuration]: ./site-configuration.html
[site-linking]: ./site-linking.html
-[service-exposure]: ./service-exposure.html
\ No newline at end of file
+[service-exposure]: ./service-exposure.html
diff --git a/input/system-cli/service-exposure.md b/input/system-cli/service-exposure.md
index 1ce5378..b681cbe 100644
--- a/input/system-cli/service-exposure.md
+++ b/input/system-cli/service-exposure.md
@@ -1,5 +1,8 @@
# Exposing services on the application network using the CLI
+
+
+Use the CLI on local systems to create connectors and listeners for services on the application network.
After creating an application network by linking sites, you can expose services from one site using connectors and consume those services on other sites using listeners.
A *routing key* is a string that matches one or more connectors with one or more listeners.
@@ -7,7 +10,9 @@ For example, if you create a connector with the routing key `backend`, you need
This section assumes you have created and linked at least two sites.
+
## Creating a connector using the CLI
+
A connector binds a local workload to listeners in remote sites.
Listeners and connectors are matched using routing keys.
@@ -19,6 +24,7 @@ For more information about connectors see [Connector concept][connector]
* The `skupper` CLI is installed.
* The `SKUPPER_PLATFORM` environment variable is set to one of * `podman`,`docker` or `linux`.
+There are many options to consider when creating connectors using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
**Procedure**
@@ -41,7 +47,7 @@ For more information about connectors see [Connector concept][connector]
For example:
- ```
+ ```text
$ skupper connector status
NAME STATUS ROUTING-KEY HOST PORT
my-server Ok my-server localhost 8081
@@ -56,11 +62,9 @@ For more information about connectors see [Connector concept][connector]
skupper system reload
```
-
-There are many options to consider when creating connectors using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
-
-
+
## Creating a listener using the CLI
+
A listener binds a local connection endpoint to connectors in remote sites.
Listeners and connectors are matched using routing keys.
@@ -70,6 +74,8 @@ Listeners and connectors are matched using routing keys.
* The `skupper` CLI is installed.
* The `SKUPPER_PLATFORM` environment variable is set to one of * `podman`,`docker` or `linux`.
+There are many options to consider when creating listeners using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
+
**Procedure**
1. Identify a connector that you want to use.
@@ -77,10 +83,10 @@ Listeners and connectors are matched using routing keys.
2. Create a listener:
```bash
- skupper connector create [--routing-key ]
+ skupper listener create [--routing-key ]
```
For example:
- ```
+ ```text
$ skupper listener create my-server 8080
File written to /home/user/.local/share/skupper/namespaces/default/input/resources/Listener-backend.yaml
```
@@ -98,7 +104,7 @@ Listeners and connectors are matched using routing keys.
For example:
- ```
+ ```text
$ skupper listener status
NAME STATUS ROUTING-KEY HOST PORT
my-server Ok my-server localhost 8081
@@ -110,7 +116,6 @@ Listeners and connectors are matched using routing keys.
By default, the routing key name is the listener name.
If you want to use a custom routing key, set the `--routing-key` to your custom name.
-There are many options to consider when creating connectors using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
-
+[cli-ref]: https://skupperproject.github.io/refdog/commands/index.html
[connector]: https://skupperproject.github.io/refdog/concepts/connector.html
-[listener]: https://skupperproject.github.io/refdog/concepts/listener.html
\ No newline at end of file
+[listener]: https://skupperproject.github.io/refdog/concepts/listener.html
diff --git a/input/system-cli/site-configuration.md b/input/system-cli/site-configuration.md
index 300ccd6..fd6d996 100644
--- a/input/system-cli/site-configuration.md
+++ b/input/system-cli/site-configuration.md
@@ -1,5 +1,6 @@
# Creating a site on a local system using the Skupper CLI
+
Using the skupper command-line interface (CLI) allows you to create and manage Skupper sites from the context of the current user.
@@ -12,9 +13,12 @@ If you require more than one site, specify a unique namespace when using `skupp
## Checking the Skupper CLI and environment
+
Installing the skupper command-line interface (CLI) provides a simple method to get started with Skupper.
+**Procedure**
+
1. Follow the instructions for [Installing Skupper](https://skupper.io/releases/index.html).
2. Verify the installation.
@@ -38,11 +42,22 @@ Installing the skupper command-line interface (CLI) provides a simple method to
## Creating a simple site using the CLI on local systems
+
+
+Use the Skupper CLI to create a site on a local system.
**Prerequisites**
* The `skupper` CLI is installed.
+By default, all sites are created with the namespace `default`.
+On non-Kubernetes sites, you can create multiple sites per-user by specifying a *namespace*, for example:
+
+```bash
+skupper site create systemd-site -p linux -n linux-ns
+skupper site create docker-site -p docker -n docker-ns
+```
+
**Procedure**
1. Set the `SKUPPER_PLATFORM` for type of site you want to install:
@@ -77,17 +92,11 @@ Installing the skupper command-line interface (CLI) provides a simple method to
skupper system start
```
-By default, all sites are created with the namespace `default`.
-On non-Kubernetes sites, you can create multiple sites per-user by specifying a *namespace*, for example you can create multiple sites with different platforms as follows:
-
-```bash
-skupper site create systemd-site -p linux -n linux-ns
-skupper site create docker-site -p docker -n docker-ns
-```
-
-
## Deleting a site using the CLI on local systems
+
+
+Delete a Skupper site on a local system by using the CLI.
**Prerequisites**
@@ -108,6 +117,9 @@ skupper site create docker-site -p docker -n docker-ns
## Creating a site bundle using the CLI on local systems
+
+
+Create a site bundle when you want to prepare a site on one system and install it on a remote host.
Sometimes, you might want to create all the configuration for a site and apply it automatically to a remote host.
To support this, Skupper allows you create a `.tar.gz` file with all the required files and an `install.sh` script to start the remote site.
@@ -152,7 +164,7 @@ To support this, Skupper allows you create a `.tar.gz` file with all the require
skupper system generate-bundle remote-site
```
The output shows the location of the generated `.tar.gz` file, for example:
- ```
+ ```text
Site "remote-site" has been created (as a distributable bundle)
Installation bundle available at: /home/user/.local/share/skupper/bundles/remote-site.tar.gz
Default namespace: default
diff --git a/input/system-cli/site-linking.md b/input/system-cli/site-linking.md
index 1f2a319..59ed7a5 100644
--- a/input/system-cli/site-linking.md
+++ b/input/system-cli/site-linking.md
@@ -1,5 +1,8 @@
# Linking sites on local systems using the Skupper CLI
+
+
+Use the Skupper CLI on local systems to create links between sites.
Using the Skupper command-line interface (CLI) allows you to create links between sites.
The link direction is not significant, and is typically determined by ease of connectivity. For example, if east is behind a firewall, linking from east to west is the easiest option.
@@ -13,6 +16,9 @@ However, you can redeem tokens on a local system, and you can create and use 'li
## Linking to Kubernetes sites using a token
+
+
+A token lets a local system site link securely to a Kubernetes site.
A token provides a secure method to link sites.
By default, a token can only be used once and must be used within 15 minutes to link sites.
@@ -25,6 +31,8 @@ This procedure describes how to issue a token from a Kubernetes site and redeem
To link sites, you create a token on the Kubernetes site and redeem that token on the local system site to create the link.
+There are many options to consider when linking sites using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
+
**Procedure**
1. On the Kubernetes site where you want to issue the token, make sure link access is enabled:
@@ -71,7 +79,7 @@ To link sites, you create a token on the Kubernetes site and redeem that token o
skupper link status
```
You might need to issue the command multiple times before the link is ready:
- ```
+ ```text
$ skupper link status
NAME STATUS COST MESSAGE
west-12f75bc8-5dda-4256-88f8-9df48150281a Pending 1 Not Operational
@@ -81,10 +89,9 @@ To link sites, you create a token on the Kubernetes site and redeem that token o
```
You can now expose services on the application network.
-There are many options to consider when linking sites using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
-
-
+
## Linking sites using a `link` resource
+
An alternative approach to linking sites using tokens is to create a `link` resource YAML file using the CLI, and to apply that resource to another site.
@@ -95,6 +102,8 @@ An alternative approach to linking sites using tokens is to create a `link` reso
To link sites, you create a `link` resource YAML file on one site and apply that resource on the other site to create the link.
+There are many options to consider when linking sites using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
+
**Procedure**
1. On the site where you want to create a link , make sure link access is enabled:
@@ -119,7 +128,7 @@ To link sites, you create a `link` resource YAML file on one site and apply that
skupper link status
```
You might need to issue the command multiple times before the link is ready:
- ```
+ ```text
$ skupper link status
NAME STATUS COST MESSAGE
west Pending 1 Not Operational
@@ -128,6 +137,3 @@ To link sites, you create a `link` resource YAML file on one site and apply that
west Ready 1 OK
```
You can now expose services on the application network.
-
-There are many options to consider when linking sites using the CLI, see [CLI Reference][cli-ref], including *frequently used* options.
-
diff --git a/input/system-yaml/index.md b/input/system-yaml/index.md
index d32eb82..e133d02 100644
--- a/input/system-yaml/index.md
+++ b/input/system-yaml/index.md
@@ -1,8 +1,8 @@
# Overview of using YAML on local systems
+
-
-
+Use YAML on local systems to create sites, link them to other sites, and expose or consume services.
* [Create sites][site-configuration]
* [Link sites][site-linking] (requires that one site has link access enabled)
@@ -10,4 +10,4 @@
[site-configuration]: ./site-configuration.html
[site-linking]: ./site-linking.html
-[service-exposure]: ./service-exposure.html
\ No newline at end of file
+[service-exposure]: ./service-exposure.html
diff --git a/input/system-yaml/service-exposure.md b/input/system-yaml/service-exposure.md
index 78dbca8..0871875 100644
--- a/input/system-yaml/service-exposure.md
+++ b/input/system-yaml/service-exposure.md
@@ -1,5 +1,8 @@
# Exposing services on the application network using YAML
+
+
+Use YAML to create connectors and listeners for services on the application network.
After creating an application network by linking sites, you can expose services from one site using connectors and consume those services on other sites using listeners.
A *routing key* is a string that matches one or more connectors with one or more listeners.
@@ -7,12 +10,15 @@ For example, if you create a connector with the routing key `backend`, you need
This section assumes you have created and linked at least two sites.
+
## Creating a connector using YAML
+
A connector binds a local workload to listeners in remote sites.
Listeners and connectors are matched using routing keys.
-For more information about connectors see [Connector concept][connector]
+For more information about connectors see [Connector concept][connector].
+For configuration details, see [Connector resource][connector-resource].
**Procedure**
@@ -51,7 +57,7 @@ For more information about connectors see [Connector concept][connector]
For example:
- ```
+ ```text
NAME STATUS ROUTING-KEY SELECTOR HOST PORT HAS MATCHING LISTENER MESSAGE
backend Pending backend app=backend 8080 false No matching listeners
```
@@ -59,14 +65,16 @@ For more information about connectors see [Connector concept][connector]
By default, the routing key name is set to the name of the connector.
If you want to use a custom routing key, set the `--routing-key` to your custom name.
-There are many options to consider when creating connectors using YAML, see [CLI Reference][cli-ref], including *frequently used* options.
-
-
+
## Creating a listener using YAML
+
A listener binds a local connection endpoint to connectors in remote sites.
Listeners and connectors are matched using routing keys.
+For more information about listeners, see [Listener concept][listener].
+For configuration details, see [Listener resource][listener-resource].
+
**Procedure**
1. Identify a connector that you want to use.
@@ -87,7 +95,7 @@ Listeners and connectors are matched using routing keys.
This creates a listener in the `west` site and matches with the connector that uses the routing key `backend`.
It also creates a service named `east-backend` exposed on port 8080 in the current namespace.
- To create the connector resource:
+ To create the listener resource:
```bash
kubectl apply -f
@@ -102,7 +110,7 @@ Listeners and connectors are matched using routing keys.
For example:
- ```
+ ```text
NAME ROUTING KEY PORT HOST STATUS HAS MATCHING CONNECTOR MESSAGE
backend backend 8080 east-backend Ready true OK
```
@@ -110,7 +118,7 @@ Listeners and connectors are matched using routing keys.
**📌 NOTE**
There must be a `MATCHING-CONNECTOR` for the service to operate.
-There are many options to consider when creating connectors using YAML, see [CLI Reference][cli-ref], including *frequently used* options.
-
[connector]: https://skupperproject.github.io/refdog/concepts/connector.html
-[listener]: https://skupperproject.github.io/refdog/concepts/listener.html
\ No newline at end of file
+[listener]: https://skupperproject.github.io/refdog/concepts/listener.html
+[connector-resource]: https://skupperproject.github.io/refdog/resources/connector.html
+[listener-resource]: https://skupperproject.github.io/refdog/resources/listener.html
diff --git a/input/system-yaml/site-configuration.md b/input/system-yaml/site-configuration.md
index 754ccf8..7af5aa9 100644
--- a/input/system-yaml/site-configuration.md
+++ b/input/system-yaml/site-configuration.md
@@ -1,5 +1,6 @@
# Creating a site on local systems using YAML
+
Using YAML allows you to create and manage sites on Docker, Podman and Linux.
@@ -9,6 +10,7 @@ If you require more than one site, specify a unique namespace when using `skupp
## Creating a simple site on local systems using YAML
+
You can use YAML to create and manage Skupper sites.
@@ -16,6 +18,7 @@ You can use YAML to create and manage Skupper sites.
* The `skupper` CLI is installed.
+There are many options to consider when creating sites using YAML, see [YAML Reference][yaml-ref], including *frequently used* options.
**Procedure**
@@ -41,12 +44,10 @@ You can use YAML to create and manage Skupper sites.
skupper site status
```
You might need to issue the command multiple times before the site is ready:
- ```
+ ```text
NAME STATUS MESSAGE
default Ready OK
```
You can now link this site to another site to create an application network.
-There are many options to consider when creating sites using YAML, see [YAML Reference][yaml-ref], including *frequently used* options.
-
-[yaml-ref]: https://skupperproject.github.io/refdog/resources/index.html
\ No newline at end of file
+[yaml-ref]: https://skupperproject.github.io/refdog/resources/index.html
diff --git a/input/system-yaml/site-linking.md b/input/system-yaml/site-linking.md
index 30aec5d..2b2fe0a 100644
--- a/input/system-yaml/site-linking.md
+++ b/input/system-yaml/site-linking.md
@@ -1,6 +1,8 @@
# Linking sites on local systems using YAML
+
+Use a `link` resource YAML file to create links between local system and Kubernetes sites.
Using a `link` resource YAML file allows you to create links between sites.
The link direction is not significant, and is typically determined by ease of connectivity. For example, if east is behind a firewall, linking from east to west is the easiest option.
@@ -8,10 +10,13 @@ The link direction is not significant, and is typically determined by ease of co
Once sites are linked, services can be exposed and consumed across the application network without the need to open ports or manage inter-site connectivity.
The procedures below describe linking an existing site.
-Typically, it is easier to configure a site, links and services in a set of files and then create a configured site by placing all the YAML files in a directory, for example `local` and then using the following command to
+Typically, it is easier to configure a site, links, and services in a set of files and then create a configured site by placing all the YAML files in a directory such as `local` before running `skupper system setup`.
## Linking sites using a `link` resource
+
+
+Create a `link` resource YAML file and apply it to the local system site to establish a link.
An alternative approach to linking sites using tokens is to create a `link` resource YAML file using the CLI, and to apply that resource to another site.
@@ -45,7 +50,7 @@ To link sites, you create a `link` resource YAML file on one site and apply that
If you are configuring a different namespace, use that name instead.
The site is recreated and you see some of the internal resources that are not affected, for example:
- ```
+ ```text
Sources will be consumed from namespace "default"
2025/03/09 22:43:14 WARN certificate will not be overwritten path=~/.local/share/skupper/namespaces/default/runtime/issuers/skupper-local-ca/tls.crt
2025/03/09 22:43:14 WARN certificate will not be overwritten path=~/.local/share/skupper/namespaces/default/runtime/issuers/skupper-local-ca/tls.key
@@ -64,7 +69,7 @@ To link sites, you create a `link` resource YAML file on one site and apply that
skupper link status
```
The output shows the link name:
- ```
+ ```text
$ skupper link status
NAME STATUS
link-west Ok
diff --git a/input/troubleshooting/index.md b/input/troubleshooting/index.md
index a3bf34f..1503b50 100644
--- a/input/troubleshooting/index.md
+++ b/input/troubleshooting/index.md
@@ -1,18 +1,24 @@
# Troubleshooting an application network
+
Typically, you can create a network without referencing this troubleshooting guide.
However, this guide provides some tips for situations when the network does not perform as expected.
-See [Resolving common problems](#resolving-common-problems) if you have encountered a specific issue using the `skupper` CLI.
+See the resolving common problems section if you have encountered a specific issue using the `skupper` CLI.
A typical troubleshooting workflow is to check all the sites and create debug tar files.
## Checking sites
+
+
+Check site, connector, listener, and link status to confirm that the application network is operating correctly.
Using the `skupper` command-line interface (CLI) provides a simple method to get started with troubleshooting Skupper.
+**Procedure**
+
1. Check the controller on Kubernetes.
On Kubernetes the controller must be installed before you attempt to create an application network.
2. Check the site status for a cluster:
@@ -116,6 +122,9 @@ Using the `skupper` command-line interface (CLI) provides a simple method to get
## Checking links
+
+
+Check link status to confirm that sites can exchange traffic across the application network.
You must link sites before you can expose services on the network.
@@ -125,6 +134,8 @@ Generate a new token if the link is not connected.
This section outlines some advanced options for checking links.
+**Procedure**
+
1. Check the link status:
```bash
@@ -138,7 +149,7 @@ This section outlines some advanced options for checking links.
The status of the link must be `Ready` to allow service traffic.
- **📌 NOTE**\
+ **📌 NOTE**
Running `skupper link status` on a linked site produces output only if a token was used to create a link.
If you use this command on a site where you did not create the link, but there is an incoming link to the site:
@@ -151,6 +162,9 @@ This section outlines some advanced options for checking links.
## Resolving common problems
+
+
+Use these common symptoms and messages to identify simple Skupper configuration problems.
The following issues and workarounds might help you debug simple scenarios when evaluating Skupper.
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000..ce81c4b
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,112 @@
+site_name: Skupper Documentation
+site_url: https://skupper.io/docs/
+docs_dir: input
+site_dir: output/docs
+
+# Extra configuration
+# site_prefix controls navigation links in header/footer
+#
+# For production (skupper.io): use empty string (relative paths)
+# For staging/preview: use full URL without trailing slash
+# For local dev: use http://localhost:8000 or your local server
+#
+# Examples:
+# Production: site_prefix: ""
+# Staging: site_prefix: "https://skupper-mkdocs.netlify.app"
+# Local: site_prefix: "http://localhost:8000"
+extra:
+ site_prefix: "https://skupper-mkdocs.netlify.app"
+
+# Support .html links in markdown (Transom compatibility)
+use_directory_urls: false
+
+theme:
+ name: material
+ custom_dir: config/mkdocs-overrides
+ palette:
+ primary: blue
+ accent: green
+ features:
+ # - navigation.tabs # REMOVED: This puts nav in horizontal tabs at top
+ - navigation.sections # Show sections in sidebar
+ - navigation.expand # Auto-expand sections in sidebar
+ - navigation.top # Back to top button
+ - navigation.indexes # Section index pages
+ - search.suggest # Search suggestions
+ - search.highlight # Highlight search terms
+ - content.code.copy # Copy button for code blocks
+ - content.code.annotate # Code annotations
+ - toc.integrate # Integrate table of contents into sidebar
+
+extra_css:
+ - stylesheets/skupper-overrides.css
+
+nav:
+ - Home: index.md
+ - Overview:
+ - Introduction: overview/index.md
+ - Connectivity: overview/connectivity.md
+ - Security: overview/security.md
+ - Routing: overview/routing.md
+ - Load Balancing: overview/load-balancing.md
+ - Resources: overview/resources.md
+ - Migrating: overview/migrating.md
+ - Installation: install/index.md
+ - Kubernetes CLI:
+ - Overview: kube-cli/index.md
+ - Site Configuration: kube-cli/site-configuration.md
+ - Site Linking: kube-cli/site-linking.md
+ - Service Exposure: kube-cli/service-exposure.md
+ - Kubernetes YAML:
+ - Overview: kube-yaml/index.md
+ - Site Configuration: kube-yaml/site-configuration.md
+ - Site Linking: kube-yaml/site-linking.md
+ - Service Exposure: kube-yaml/service-exposure.md
+ - System CLI:
+ - Overview: system-cli/index.md
+ - Site Configuration: system-cli/site-configuration.md
+ - Site Linking: system-cli/site-linking.md
+ - Service Exposure: system-cli/service-exposure.md
+ - System YAML:
+ - Overview: system-yaml/index.md
+ - Site Configuration: system-yaml/site-configuration.md
+ - Site Linking: system-yaml/site-linking.md
+ - Service Exposure: system-yaml/service-exposure.md
+ - Console: console/index.md
+ - Troubleshooting: troubleshooting/index.md
+
+markdown_extensions:
+ - admonition
+ - pymdownx.details
+ - pymdownx.superfences
+ - pymdownx.highlight:
+ anchor_linenums: true
+ - pymdownx.inlinehilite
+ - pymdownx.snippets
+ - pymdownx.tabbed:
+ alternate_style: true
+ - attr_list
+ - md_in_html
+ - toc:
+ permalink: true
+
+# Validation settings
+validation:
+ links:
+ not_found: warn # Warn but don't fail on missing links
+ absolute_links: warn
+ unrecognized_links: warn
+
+plugins:
+ - search
+ - macros:
+ module_name: config/mkdocs_macros
+
+extra:
+ # Static values for MVP - will be dynamic with macros plugin
+ skupper_version: "2.1.1"
+ skupper_cli_version: "2.1.1"
+ skupper_version_v1: "1.9.2"
+ site_prefix: ""
+
+# Made with Bob
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..c5f6e24
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+mkdocs
+mkdocs-material
+mkdocs-macros-plugin