Chapter 24. Network Observer Configuration Reference
The following configuration options are for the Skupper Network Observer which enables the network console.
24.1. External access Copy linkLink copied to clipboard!
24.1.1. Ingress Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Enable Kubernetes Ingress resource |
|
| string |
|
IngressClass name (e.g., |
|
| map |
| Annotations for Ingress resource |
|
| array |
| Host configurations |
|
| string | - | Hostname |
|
| array | - | Path configurations |
|
| string | - | URL path |
|
| string | - |
|
|
| array |
| TLS configurations |
|
| string | - | TLS certificate Secret name |
|
| array | - | Hostnames for this certificate |
Notes:
- Backend always uses HTTPS (re-encryption required)
- Controller must support TLS backend
24.1.2. Route (OpenShift) Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Enable OpenShift Route resource |
|
| string |
| Explicit hostname |
|
| string |
| Subdomain for automatic FQDN |
|
| map |
| Route annotations |
|
| map |
| Route labels |
Notes:
-
Automatically uses
reencryptTLS termination -
Use
hostORsubdomain, not both - OpenShift only
24.2. Authentication Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
|
Authentication strategy: |
24.2.1. Basic Authentication Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Auto-generate htpasswd Secret with random password |
|
| string |
|
Existing htpasswd Secret name (requires |
Generated credentials:
-
Username:
skupper - Password: Random 16-character string (stored in Secret)
24.2.2. OpenShift OAuth Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Auto-generate session cookie secret |
|
| string |
| Existing cookie Secret name |
|
| bool |
| Create ServiceAccount for OAuth |
|
| string |
| Custom ServiceAccount name |
Requirements:
- OpenShift cluster
- RBAC permissions for delegated authentication
24.3. TLS Certificates Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Use Skupper controller CA (default) |
|
| bool |
| Use OpenShift Service CA |
|
| string |
| Existing TLS Secret name |
Priority: secretName > openshiftIssued > skupperIssued
Methods:
- Skupper-issued: Auto-provisioned by controller, uses same CA as inter-site links
- OpenShift Service CA: Platform-issued, automatic rotation
-
External: Manual management, Secret type
kubernetes.io/tls
24.4. Router Connection Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| AMQP endpoint URL |
|
| bool |
| Auto-create client certificate |
|
| string |
| Custom certificate name |
Notes:
-
Endpoint must use
amqps://scheme - Client certificate provisioned by Skupper controller
-
Certificate mounted at
/etc/messaging/
24.5. Network Observer Tuning Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| array |
| Command-line flags for observer container |
Available flags:
| Flag | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Enable web console UI |
|
| duration |
| Flow record retention time |
|
| bool |
| Allow all CORS origins (dev only) |
|
| string |
|
Vanflow logging: |
Example:
extraArgs:
- -flow-record-ttl=1h
- -vanflow-logging-profile=minimal
24.6. Prometheus Configuration Copy linkLink copied to clipboard!
The Prometheus container supports custom configuration and tuning options.
24.6.1. Configuration File Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string | embedded |
Complete |
Default scrape config:
scrape_configs:
- job_name: 'network-observer'
static_configs:
- targets: ['localhost:8080']
24.6.2. Command-Line Flags Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| array |
| Additional Prometheus flags |
Common flags:
-
--storage.tsdb.retention.time=<duration> -
--storage.tsdb.retention.size=<bytes> -
--query.max-samples=<int>
Example:
prometheus:
extraArgs:
- --storage.tsdb.retention.time=15d
- --storage.tsdb.retention.size=10GB
24.6.3. Extra Volumes and Mounts Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| array |
| Additional volumes (Kubernetes volume spec) |
|
| array |
| Volume mount points (Kubernetes volumeMount spec) |
Example:
prometheus:
extraVolumes:
- name: extra-config
configMap:
name: prometheus-rules
extraVolumeMounts:
- name: extra-config
mountPath: /etc/prometheus/rules
24.7. Data Persistence Copy linkLink copied to clipboard!
By default, Prometheus uses ephemeral storage (emptyDir). For persistent time-series data, enable a PersistentVolumeClaim.
24.7.1. Persistence Options Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Enable persistent storage |
|
| string |
| StorageClass name (empty = default) |
|
| string |
| PVC size |
|
| array |
| PVC access modes |
Behavior:
-
Disabled: Uses
emptyDir(ephemeral) -
Enabled: Creates PVC, uses
Recreatedeployment strategy
Prerequisites
- A StorageClass that can provision PersistentVolumes, or a default StorageClass configured in your cluster
Procedure
Configure persistence in your values file:
prometheus: persistence: enabled: true storageClass: "" # Use default StorageClass size: 8Gi accessModes: - ReadWriteOnceInstall or upgrade the chart with your values:
helm upgrade --install skupper-network-observer oci://quay.io/skupper/helm/network-observer --version {{skupper_cli_version}} -f values.yamlVerify the PersistentVolumeClaim is bound:
kubectl get pvcExample output:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE skupper-network-observer-prometheus-0 Bound pvc-a1b2c3d4-e5f6-7890-abcd-ef1234567890 8Gi RWO standard 2m
When persistence is enabled, the Deployment uses a Recreate update strategy to ensure the single read-write volume can attach cleanly during pod updates.
24.8. Container Resources Copy linkLink copied to clipboard!
Resource requests and limits can be configured for each container in the Pod.
24.8.1. Network Observer Container Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string | - | CPU request |
|
| string | - | Memory request |
|
| string | - | CPU limit |
|
| string | - | Memory limit |
24.8.2. Prometheus Container Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string | - | CPU request |
|
| string | - | Memory request |
|
| string | - | CPU limit |
|
| string | - | Memory limit |
24.8.3. Proxy Container Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string | - | CPU request |
|
| string | - | Memory request |
|
| string | - | CPU limit |
|
| string | - | Memory limit |
Example:
containerResources:
networkObserver:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
prometheus:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 2000m
memory: 4Gi
proxy:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 256Mi
24.9. Container Images Copy linkLink copied to clipboard!
24.9.1. Network Observer Image Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| Image repository |
|
| string | chart appVersion | Image tag |
|
| string |
| Pull policy |
24.9.2. Prometheus Image Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| Image repository |
|
| string |
| Image tag |
|
| string |
| Pull policy |
24.9.3. NGINX Proxy Image Copy linkLink copied to clipboard!
Used when auth.strategy is basic or none:
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| Image repository |
|
| string |
| Image tag |
|
| string |
| Pull policy |
|
| array |
| Override default command |
24.9.4. OpenShift OAuth Proxy Image Copy linkLink copied to clipboard!
Used when auth.strategy is openshift:
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| Image repository |
|
| string |
| Image tag |
|
| string |
| Pull policy |
24.10. Labels and Annotations Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| map |
| Labels on all resources |
|
| map |
| Annotations on all resources |
|
| map |
| Labels on Pod resources only |
|
| map |
| Annotations on Pod resources only |
Standard labels (always present):
-
app.kubernetes.io/name: network-observer -
app.kubernetes.io/instance: <name> -
app.kubernetes.io/version: <version> -
app.kubernetes.io/managed-by: Helmornetwork-observer-operator
Example:
commonLabels:
environment: production
team: platform-engineering
cost-center: "12345"
commonAnnotations:
owner: "platform-team@company.com"
docs: "https://wiki.company.com/network-observer"
podLabels:
app.kubernetes.io/tier: monitoring
podAnnotations:
prometheus.io/scrape: "false"
24.11. Service Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
|
Service type: |
|
| int |
| External port |
Notes:
-
targetPortalwayshttps(8443) -
Metrics service always
ClusterIPon port9000
24.12. Security Copy linkLink copied to clipboard!
24.12.1. Pod Security Context Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| Seccomp profile |
24.12.2. Container Security Contexts Copy linkLink copied to clipboard!
Available for: securityContext, prometheus.securityContext, nginx.securityContext, openshiftOauthProxy.securityContext
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Allow privilege escalation |
|
| array |
| Capabilities to drop |
24.13. Advanced Options Copy linkLink copied to clipboard!
24.13.1. Name Overrides Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| string |
| Override chart name |
|
| string |
| Override full resource name |
24.13.2. Skip Management Labels Copy linkLink copied to clipboard!
| Path | Type | Default | Description |
|---|---|---|---|
|
| bool |
| Skip Skupper management labels |
24.14. Metrics Endpoint Copy linkLink copied to clipboard!
The Network Observer serves Prometheus metrics on a dedicated HTTP listener, separate from the main API endpoint.
Listener Configuration:
-
Address:
:9000(container-wide) -
Path:
/metrics - Protocol: HTTP (no TLS/auth)
Service:
-
Name:
<name>-metrics -
Type:
ClusterIP -
Port:
90009000
Security: Cluster-internal only. Do not expose publicly.
24.14.1. Metrics Service Copy linkLink copied to clipboard!
The chart creates a second ClusterIP Service named <release-name>-metrics that targets the metrics listener on port 9000.
| Property | Value |
|---|---|
| Listener address |
|
| Service name |
|
| Service port |
|
| Metrics path |
|
24.14.2. Scraping Metrics Copy linkLink copied to clipboard!
Configure your Prometheus instance or monitoring operator to scrape the metrics endpoint.
ServiceMonitor example (Prometheus Operator):
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: skupper-network-observer
spec:
selector:
matchLabels:
app.kubernetes.io/name: network-observer
endpoints:
- port: metrics
path: /metrics
Static scrape configuration:
scrape_configs:
- job_name: 'network-observer'
static_configs:
- targets: ['skupper-network-observer-metrics.default.svc:9000']
Security note: The metrics Service is ClusterIP by default and does not include the TLS proxy or authentication that protects the main console endpoint. Do not expose this Service publicly without additional access controls if your metrics contain sensitive data.
24.15. Validation and Troubleshooting Copy linkLink copied to clipboard!
24.15.1. Verify Services Copy linkLink copied to clipboard!
Check that both Services are created:
kubectl get svc -l app.kubernetes.io/name=network-observer
Example output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
skupper-network-observer ClusterIP 10.96.123.45 <none> 443/TCP 5m
skupper-network-observer-metrics ClusterIP 10.96.123.46 <none> 9000/TCP 5m
24.15.2. Test Metrics Endpoint Copy linkLink copied to clipboard!
From a pod in the same namespace:
kubectl run -it --rm curl --image=curlimages/curl --restart=Never -- curl -sS http://skupper-network-observer-metrics:9000/metrics
Example output:
# HELP skupper_network_observer_info Network Observer build information
# TYPE skupper_network_observer_info gauge
skupper_network_observer_info{version="2.2.0"} 1
...
24.15.3. Check Observer Logs Copy linkLink copied to clipboard!
Look for the metrics listener startup message:
kubectl logs deployment/skupper-network-observer -c network-observer
Example output:
2025/03/15 10:23:45 Starting metrics server on :9000
2025/03/15 10:23:45 Starting API server on 127.0.0.1:8080
24.15.4. Verify Prometheus Configuration Copy linkLink copied to clipboard!
If the embedded Prometheus shows no data, check the ConfigMap:
kubectl get configmap skupper-network-observer-prometheus-config -o yaml
Ensure the prometheus.yml content is valid and the scrape target matches the observer’s API listener (localhost:8080).
24.15.5. PersistentVolumeClaim Issues Copy linkLink copied to clipboard!
If the pod remains in Pending state with persistence enabled:
kubectl describe pvc skupper-network-observer-prometheus-0
Look for events indicating StorageClass issues, volume provisioning failures, or capacity constraints.