Custom Tabs
Learning UI supports adding custom tabs for additional services like Jupyter notebooks, Grafana dashboards, documentation sites, and more.
Configuration
Add custom tabs in your values:
customTabs: - id: "jupyter" name: "Jupyter" icon: "book" url: "/jupyter/" - id: "grafana" name: "Grafana" icon: "chart" url: "/grafana/" - id: "docs" name: "Documentation" icon: "globe" url: "https://docs.example.com"Tab Properties
| Property | Required | Description |
|---|---|---|
id | Yes | Unique identifier for the tab |
name | Yes | Display name shown in the UI |
icon | Yes | Icon to display (see available icons) |
url | Yes | URL to load in the iframe (relative or absolute) |
Available Icons
terminal- Terminal iconcode- Code/editor iconbook- Book/notebook iconchart- Chart/graph iconglobe- Globe/web icondatabase- Database iconsettings- Settings/gear icon
Tab Order
Tabs appear in this order:
- Editor (if enabled)
- Custom tabs (in order defined)
- Terminal (if enabled)
Examples
Jupyter Notebook
Add a Jupyter notebook service alongside Learning UI:
customTabs: - id: "jupyter" name: "Jupyter" icon: "book" url: "/jupyter/"
# You'll need to deploy Jupyter separately and configure ingressDocumentation Site
Link to external documentation:
customTabs: - id: "docs" name: "Docs" icon: "globe" url: "https://kubernetes.io/docs/"Monitoring Dashboard
Add Grafana for monitoring tutorials:
customTabs: - id: "grafana" name: "Grafana" icon: "chart" url: "/grafana/"Deploying Custom Services
To add services that appear as tabs, you need to:
- Deploy the service in the same namespace
- Configure ingress to route to the service
- Add the tab in your values
Example: Adding Jupyter
1. Deploy Jupyter
Create a deployment for Jupyter:
apiVersion: apps/v1kind: Deploymentmetadata: name: jupyterspec: replicas: 1 selector: matchLabels: app: jupyter template: metadata: labels: app: jupyter spec: containers: - name: jupyter image: jupyter/scipy-notebook:latest ports: - containerPort: 8888 env: - name: JUPYTER_TOKEN value: "" # No token for simplicity---apiVersion: v1kind: Servicemetadata: name: jupyterspec: ports: - port: 8888 selector: app: jupyter2. Configure Ingress
Add ingress rules for Jupyter:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: jupyter annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2spec: rules: - host: <your-learning-ui-host> http: paths: - path: /jupyter(/|$)(.*) pathType: ImplementationSpecific backend: service: name: jupyter port: number: 88883. Add the Tab
customTabs: - id: "jupyter" name: "Jupyter" icon: "book" url: "/jupyter/"Hiding the Terminal
For scenarios where you only want custom services (e.g., only Jupyter):
terminal: enabled: false
customTabs: - id: "jupyter" name: "Jupyter" icon: "book" url: "/jupyter/"Using as a Dependency
When using Learning UI as a Helm dependency, you can add custom tabs and services in your parent chart. See Complex Scenarios for details.