✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Application Namespace Organization

Kubernetes Application Namespace Organization uses namespaces to isolate resources, manage access, and streamline cluster operations.

Kubernetes Application Namespace Organization is the practice of deciding how a single application's own internal components — frontend, backend API, database, cache, background workers — are distributed across one or more namespaces, a decision distinct from the broader cluster-wide organizational strategy (team, environment, or platform-based) covered by namespace organization areas. Where that broader strategy answers "how do we divide the cluster among teams and environments," application namespace organization answers a narrower question specific to a single application's architecture: should all of its components share one namespace, or should they be split across several, and what tradeoffs follow from each choice.

Because most applications naturally decompose into several cooperating components with different security postures, scaling characteristics, and update cadences, this decision has real operational consequences beyond simple tidiness.


Single-Namespace-Per-Application

The Simplicity Default

The most common pattern for small to medium applications: every component (frontend, API, database, cache) lives together in one namespace (codartium-checkout), with component identity distinguished purely through labels (app.kubernetes.io/component: frontend) rather than namespace boundaries.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: codartium-checkout-api
  namespace: codartium-checkout
  labels:
    app.kubernetes.io/part-of: codartium-checkout
    app.kubernetes.io/component: backend

When This Pattern Fits

Applications whose components are tightly coupled, deployed together, and managed by the same team benefit from this simplicity — a single kubectl get all -n codartium-checkout gives a complete view of the application, and a single ResourceQuota governs the application's total footprint without needing cross-namespace coordination.


Multi-Namespace Splitting Within One Application

Splitting by Security Posture

Components with meaningfully different privilege or exposure requirements sometimes warrant their own namespace even within a single logical application — a public-facing frontend namespace with a permissive NetworkPolicy ingress rule, paired with a backend namespace whose NetworkPolicy only accepts traffic from the frontend namespace specifically, tightening the blast radius if the frontend is compromised.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: codartium-backend-restrict
  namespace: codartium-checkout-backend
spec:
  podSelector: {}
  policyTypes: ["Ingress"]
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: codartium-checkout-frontend

Splitting by Independent Scaling or Ownership

A background worker component with drastically different scaling characteristics from the main API (bursty batch processing versus steady request traffic) sometimes benefits from its own namespace-scoped ResourceQuota, distinct from the API's, to prevent one component's resource needs from crowding out the other's within a shared aggregate ceiling.

The Cost of Splitting

Every additional namespace introduces cross-namespace referencing considerations (Services must be addressed by full DNS name, ConfigMaps/Secrets cannot be shared directly) and additional governance objects to maintain — splitting should be a deliberate response to a genuine security, scaling, or ownership need, not a default reflex applied to every application regardless of its actual architecture.


Helm Release Scoping

Namespace as the Natural Helm Deployment Unit

Helm releases are typically installed into a single target namespace, making "one namespace per application" the natural default alignment for Helm-managed applications — a Helm chart's templates commonly assume all its resources land together in one namespace unless explicitly designed otherwise.

helm install codartium-checkout ./charts/checkout --namespace codartium-checkout --create-namespace

Multi-Chart Applications Spanning Namespaces

Applications composed of multiple independently versioned Helm charts (a shared platform chart plus an application-specific chart) sometimes deliberately target different namespaces for each chart, reflecting a genuine architectural split rather than an accident of packaging.


Choosing an Approach

Application characteristicSuggested organization
Tightly coupled, single team, uniform trust levelSingle namespace
Distinct security postures between componentsSplit by security boundary
Drastically different scaling/quota needsSplit by resource profile
Deployed as one Helm releaseSingle namespace (Helm default)

Example

apiVersion: v1
kind: Namespace
metadata:
  name: codartium-checkout
  labels:
    app.kubernetes.io/name: checkout
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: codartium-checkout-frontend
  namespace: codartium-checkout
  labels:
    app.kubernetes.io/part-of: codartium-checkout
    app.kubernetes.io/component: frontend