Skip to main content
Version: Next
Enterprise

Organizations

Organizations provide multi-tenant isolation at the RGD catalog level. Each Knodex server instance is configured with an organization identity, and RGDs can be scoped to specific organizations using labels.

Server Identity

The server's organization identity is set via the KNODEX_ORGANIZATION environment variable:

export KNODEX_ORGANIZATION=acme-corp
ConfigurationBehavior
KNODEX_ORGANIZATION not setDefaults to "default". All RGDs without an org label are visible. Org-labeled RGDs are filtered.
KNODEX_ORGANIZATION=acme-corpShows RGDs with knodex.io/organization: acme-corp and RGDs with no org label (shared). Hides RGDs labeled for other organizations.
KNODEX_ORGANIZATION=defaultSame as not setting the variable.

In Helm:

# values.yaml
enterprise:
organization: "acme-corp"

RGD Organization Scoping

Scope an RGD to a specific organization using the knodex.io/organization label (not annotation):

apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: acme-internal-service
annotations:
knodex.io/catalog: "true"
knodex.io/title: "ACME Internal Service"
labels:
knodex.io/organization: "acme-corp"
Label, Not Annotation

Organization scoping uses a label (labels.knodex.io/organization), not an annotation. Labels participate in Kubernetes server-side filtering, which is important for performance at scale.

Visibility Rules

RGD Org LabelServer OrgVisible?
(none)AnyYes (shared/public RGD)
acme-corpacme-corpYes
acme-corpbeta-incNo
beta-incacme-corpNo
(none)(not set / default)Yes
acme-corp(not set / default)No

Filter Chain

Organization filtering is one step in the full visibility chain:

  1. Catalog gate -- knodex.io/catalog: "true" annotation present
  2. Organization filter -- RGD has no org label (shared) OR org label matches server's KNODEX_ORGANIZATION
  3. Project filter -- RGD has no project label (public) OR user is a member of the labeled project

All three filters must pass for an RGD to be visible.

OSS Behavior

In OSS builds, the organization label is still processed. Setting KNODEX_ORGANIZATION and labeling RGDs works in OSS, but the license management UI and enterprise-specific organization features are not available.

Examples

Shared RGD (No Organization Label)

Visible to all Knodex server instances regardless of their KNODEX_ORGANIZATION setting:

apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: nginx-ingress
annotations:
knodex.io/catalog: "true"
knodex.io/title: "Nginx Ingress"
knodex.io/category: "networking"
# No knodex.io/organization label = shared

Organization-Specific RGD

Visible only to servers configured with KNODEX_ORGANIZATION=acme-corp:

apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: acme-payment-gateway
annotations:
knodex.io/catalog: "true"
knodex.io/title: "ACME Payment Gateway"
knodex.io/category: "applications"
labels:
knodex.io/organization: "acme-corp"

Organization + Project Scoped

Visible only to members of the payments project on servers configured for acme-corp:

apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: acme-payment-processor
annotations:
knodex.io/catalog: "true"
knodex.io/title: "ACME Payment Processor"
knodex.io/category: "applications"
labels:
knodex.io/organization: "acme-corp"
knodex.io/project: "payments"

Visibility Matrix

RGD LabelsServer: acme-corpServer: beta-incServer: default
No labelsVisibleVisibleVisible
org: acme-corpVisibleHiddenHidden
org: beta-incHiddenVisibleHidden
org: acme-corp, project: paymentsVisible (if in payments project)HiddenHidden
project: payments (no org)Visible (if in payments project)Visible (if in payments project)Visible (if in payments project)

UI Display

When the server has a KNODEX_ORGANIZATION configured, the organization name is displayed in the Settings page under server information. This helps administrators confirm which organization the server instance is configured for.