# Tenants

> A complete Tenant combining the workload and networking best-practice baseline

> For the complete documentation index, see [llms.txt](https://deploy-preview-183--docs-projectcapsule.netlify.app/llms.txt).
> The HTML version of this page is at https://deploy-preview-183--docs-projectcapsule.netlify.app/docs/operating/best-practices/tenants/.

Use this complete Tenant as a starting point for application namespaces. It
combines the compatible baseline policies from [Workloads](/docs/operating/best-practices/workloads/)
and [Networking](/docs/operating/best-practices/networking/) into one ordered
`spec.rules` list. All namespaces in this Tenant receive the same baseline.

## Included Policies

| Area | Combined configuration |
|---|---|
| Resources | Default CPU, memory, and ephemeral-storage requests; remove CPU limits; match memory limits to requests; default ephemeral-storage limits. |
| Capacity | Share one illustrative quota across all Tenant namespaces. |
| QoS | Deny `BestEffort` after resource mutation. |
| Placement | Use the default scheduler, exclude control-plane nodes, deny control-plane and wildcard tolerations, and reject Pods created with `nodeName`. |
| Workload types | Deny DaemonSets. |
| Pod isolation | Set `hostUsers: false` and manage the namespace's Pod Security labels at `restricted`. |
| Images | Allow the approved registry path and require `Always` pull policy. |
| Priority | Default to and allow only `tenant-standard`. |
| Services | Allow only `ClusterIP` and deny every external IP. |
| Namespace trust | Deny adding or changing `company.com/system` on Tenant namespaces. |
| DRA admin access | Keep administrative device access disabled by denying `resource.kubernetes.io/admin-access: "true"` on Tenant namespaces. |

## Before Applying

* Replace `solar`, `solar-owner`, and `registry.example.com/solar` with your
  Tenant, owner, and approved registry path. Publish immutable image references
  in that registry; the example's registry matcher does not require a digest.
* Size requests, storage defaults, and the shared quota from measured usage and
  available capacity. The numbers below illustrate a profile, not a universal
  production budget. There is deliberately no CPU-limit quota.
* Create the [non-preempting `tenant-standard` PriorityClass](/docs/operating/best-practices/workloads/#priorityclasses)
  before admitting workloads that use this Tenant. The Tenant references the
  class; it does not create it.
* Use Linux nodes with [user namespace support](/docs/operating/best-practices/workloads/#user-namespaces).
  Review kernel, runtime, and volume support before enabling `hostUsers: false`.
  For incompatible workloads, define a separate, reviewed namespace profile.
* Set all three Pod Security version labels to a version supported by your
  cluster. This example pins them to `v1.36`. Applications must supply security
  contexts that satisfy `restricted`; these rules do not generate those fields.
* On OpenShift, also block tenant users from changing OpenShift-managed
  namespace labels and annotations, such as `openshift.io/run-level`, to
  prevent SecurityContextConstraints bypasses. See
  [Example Tenant and TenantOwners](/docs/operating/setup/openshift/#example-tenant-and-tenantowners)
  in the OpenShift guide. OpenShift manages the `pod-security.kubernetes.io/*`
  labels based on the SCCs, so review the Pod Security rules of this baseline
  before applying it there.

## Reference

Explore the ordered rules below. Select a card to open its documentation, or
view, copy, and download the complete Tenant YAML, including ownership and
PriorityClass settings.

<section class="tenant-example" aria-label="Tenant configuration example" data-tenant-example>
    <div class="tenant-example__toolbar">
      <div class="tenant-example__file">
        <span class="tenant-example__file-icon" aria-hidden="true">{ }</span>
        <div><strong>tenants.yaml</strong><span>Tenant · solar · 14 rules</span></div>
      </div>
      <div class="tenant-example__actions">
        <button type="button" class="btn btn-outline-primary btn-sm" data-copy-tenant hidden>Copy full YAML</button>
        <a class="btn btn-primary btn-sm" href="/docs/operating/best-practices/tenants.yaml" download="tenants.yaml">Download YAML</a>
      </div>
    </div>
    <p class="tenant-example__copy-status visually-hidden" role="status" data-copy-status></p>
    <details class="tenant-example__manifest">
      <summary>View complete Tenant YAML <span>Owners, priority settings, and all rules</span></summary>
      <pre tabindex="0" aria-label="Complete Tenant YAML"><code class="language-yaml" data-tenant-source>apiVersion: capsule.clastix.io/v1beta2
kind: Tenant
metadata:
  name: solar
spec:
  owners:
    - kind: User
      name: solar-owner
  # Default and allow the tenant-standard PriorityClass.
  priorityClasses:
    default: tenant-standard
    allowed: [tenant-standard]
  rules:

    # One shared budget across all namespaces in this Tenant.
    - quota:
        - name: application-budget
          hard:
            requests.cpu: &#34;20&#34;
            requests.memory: 40Gi
            limits.memory: 40Gi
            requests.ephemeral-storage: 100Gi
            limits.ephemeral-storage: 200Gi
            pods: &#34;100&#34;
            services: &#34;100&#34;

    # Apply placement and user-namespace settings on Pod creation.
    - mutate:
        - action: merge
          workloads:
            security:
              hostUsers: false
            placement:
              affinity:
                nodeAffinity:
                  requiredDuringSchedulingIgnoredDuringExecution:
                    nodeSelectorTerms:
                      - matchExpressions:
                          - key: node-role.kubernetes.io/control-plane
                            operator: DoesNotExist
                          - key: node-role.kubernetes.io/master
                            operator: DoesNotExist
      enforce:
        action: allow
        workloads:
          targets: [pod]
          placement:
            schedulers:
              - exact: [default-scheduler]

    # Defaults for application containers, sidecars, and init containers.
    - enforce:
        action: deny
        workloads:
          targets: [pod/containers, pod/initcontainers]
          resources:
            requests:
              cpu:
                policy: Default
                value: 250m
              memory:
                policy: Default
                value: 512Mi
              ephemeral-storage:
                policy: Default
                value: 1Gi
            limits:
              cpu:
                policy: Remove
              memory:
                policy: MatchRequest
              ephemeral-storage:
                policy: Default
                value: 2Gi

    # Normalize limits when a workload supplies Pod-level resources.
    - enforce:
        action: deny
        workloads:
          targets: [pod]
          resources:
            limits:
              cpu:
                policy: Remove
              memory:
                policy: MatchRequest

    # Deny BestEffort Pods after resource mutation.
    - enforce:
        action: deny
        workloads:
          targets: [pod]
          qosClasses: [BestEffort]

    # Reject control-plane and wildcard tolerations.
    - enforce:
        action: deny
        workloads:
          targets: [pod]
          placement:
            tolerations:
              - key:
                  exact:
                    - node-role.kubernetes.io/control-plane
                    - node-role.kubernetes.io/master
              - key: {exp: &#39;^$&#39;}
                operators: [Exists]

    # Check direct assignment only at creation; allow scheduler-bound updates.
    - enforce:
        action: deny
        conditions:
          - name: direct-node-assignment
            expression: &gt;-
              request.operation == &#39;CREATE&#39; &amp;&amp; has(object.spec.nodeName) &amp;&amp; object.spec.nodeName != &#39;&#39;
        workloads:
          targets: [pod]

    # Keep kind-level denials separate from workload property checks.
    - enforce:
        action: deny
        workloads:
          targets: [daemonset]

    # Allow approved images with Always pull policy.
    - enforce:
        action: allow
        workloads:
          targets:
            - pod/containers
            - pod/initcontainers
            - pod/ephemeralcontainers
            - pod/volumes
          registries:
            - exp: &#39;^registry\.example\.com/solar/.+$&#39;
              policy: [Always]

    # Allow only ClusterIP Services.
    - enforce:
        action: allow
        services:
          types: [ClusterIP]

    # Deny all Service external IPs.
    - enforce:
        action: deny
        services:
          externalIPs: {}

    # Apply and reconcile Pod Security labels on the Namespace itself.
    - enforce:
        action: allow
        metadata:
          - apiGroups: [v1]
            kinds: [Namespace]
            labels:
              pod-security.kubernetes.io/enforce:
                managed: restricted
                required: true
                values:
                  - exact: [restricted]
              pod-security.kubernetes.io/enforce-version:
                managed: v1.36
                required: true
                values:
                  - exact: [v1.36]
              pod-security.kubernetes.io/warn:
                managed: restricted
                required: true
                values:
                  - exact: [restricted]
              pod-security.kubernetes.io/warn-version:
                managed: v1.36
                required: true
                values:
                  - exact: [v1.36]
              pod-security.kubernetes.io/audit:
                managed: restricted
                required: true
                values:
                  - exact: [restricted]
              pod-security.kubernetes.io/audit-version:
                managed: v1.36
                required: true
                values:
                  - exact: [v1.36]

    # Reserve this trusted-platform label for administrator-managed namespaces.
    - enforce:
        action: deny
        metadata:
          - apiGroups: [v1]
            kinds: [Namespace]
            labels:
              company.com/system:
                values:
                  - exp: &#34;.*&#34;

    # Keep DRA administrative access disabled in application namespaces.
    - enforce:
        action: deny
        metadata:
          - apiGroups: [v1]
            kinds: [Namespace]
            labels:
              resource.kubernetes.io/admin-access:
                values:
                  - exact: [&#34;true&#34;]
</code></pre>
    </details>
    <div class="tenant-example__rule-heading"><span>Namespace rules</span><span>In declaration order</span></div>
    <div class="tenant-example__rules"><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-0" data-tenant-rule data-rule-index="0">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">01</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[0]</span>
                <h3 id="tenant-example-0-rule-0"><a class="tenant-rule__link" href="/docs/tenants/rules/#quotas">Shared resource budget</a></h3>
                <div class="tenant-rule__tags"><span>Quota</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">One shared budget across all namespaces in this Tenant.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Shared resource budget YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">quota</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span>- <span style="color:#062873;font-weight:bold">name</span>:<span style="color:#bbb"> </span>application-budget<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">hard</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">requests.cpu</span>:<span style="color:#bbb"> </span><span style="color:#4070a0">&#34;20&#34;</span><span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">requests.memory</span>:<span style="color:#bbb"> </span>40Gi<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">limits.memory</span>:<span style="color:#bbb"> </span>40Gi<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">requests.ephemeral-storage</span>:<span style="color:#bbb"> </span>100Gi<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">limits.ephemeral-storage</span>:<span style="color:#bbb"> </span>200Gi<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">pods</span>:<span style="color:#bbb"> </span><span style="color:#4070a0">&#34;100&#34;</span><span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">services</span>:<span style="color:#bbb"> </span><span style="color:#4070a0">&#34;100&#34;</span><span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-1" data-tenant-rule data-rule-index="1">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">02</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[1]</span>
                <h3 id="tenant-example-0-rule-1"><a class="tenant-rule__link" href="/docs/rules/mutate/workloads/#reference">Placement and user namespaces</a></h3>
                <div class="tenant-rule__tags"><span>Mutate</span><span>Enforce · allow</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Apply placement and user-namespace settings on Pod creation.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Placement and user namespaces YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">mutate</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span>- <span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>merge<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">security</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">hostUsers</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">false</span><span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">placement</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">affinity</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">nodeAffinity</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span><span style="color:#062873;font-weight:bold">requiredDuringSchedulingIgnoredDuringExecution</span>:<span style="color:#bbb">
</span><span style="color:#bbb">                </span><span style="color:#062873;font-weight:bold">nodeSelectorTerms</span>:<span style="color:#bbb">
</span><span style="color:#bbb">                  </span>- <span style="color:#062873;font-weight:bold">matchExpressions</span>:<span style="color:#bbb">
</span><span style="color:#bbb">                      </span>- <span style="color:#062873;font-weight:bold">key</span>:<span style="color:#bbb"> </span>node-role.kubernetes.io/control-plane<span style="color:#bbb">
</span><span style="color:#bbb">                        </span><span style="color:#062873;font-weight:bold">operator</span>:<span style="color:#bbb"> </span>DoesNotExist<span style="color:#bbb">
</span><span style="color:#bbb">                      </span>- <span style="color:#062873;font-weight:bold">key</span>:<span style="color:#bbb"> </span>node-role.kubernetes.io/master<span style="color:#bbb">
</span><span style="color:#bbb">                        </span><span style="color:#062873;font-weight:bold">operator</span>:<span style="color:#bbb"> </span>DoesNotExist<span style="color:#bbb">
</span><span style="color:#bbb">  </span><span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>allow<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb"> </span>[pod]<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">placement</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">schedulers</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[default-scheduler]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-2" data-tenant-rule data-rule-index="2">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">03</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[2]</span>
                <h3 id="tenant-example-0-rule-2"><a class="tenant-rule__link" href="/docs/rules/enforcement/workloads/#requests-and-limits">Container resource defaults</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Defaults for application containers, sidecars, and init containers.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Container resource defaults YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb"> </span>[pod/containers, pod/initcontainers]<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">resources</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">requests</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">cpu</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>Default<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">value</span>:<span style="color:#bbb"> </span>250m<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">memory</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>Default<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">value</span>:<span style="color:#bbb"> </span>512Mi<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">ephemeral-storage</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>Default<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">value</span>:<span style="color:#bbb"> </span>1Gi<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">limits</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">cpu</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>Remove<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">memory</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>MatchRequest<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">ephemeral-storage</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>Default<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">value</span>:<span style="color:#bbb"> </span>2Gi<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-3" data-tenant-rule data-rule-index="3">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">04</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[3]</span>
                <h3 id="tenant-example-0-rule-3"><a class="tenant-rule__link" href="/docs/rules/enforcement/workloads/#targeting-resource-locations">Pod-level resource limits</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Normalize limits when a workload supplies Pod-level resources.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Pod-level resource limits YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb"> </span>[pod]<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">resources</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">limits</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">cpu</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>Remove<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">memory</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>MatchRequest<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-4" data-tenant-rule data-rule-index="4">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">05</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[4]</span>
                <h3 id="tenant-example-0-rule-4"><a class="tenant-rule__link" href="/docs/rules/enforcement/workloads/#qos-classes">Reject BestEffort Pods</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Deny BestEffort Pods after resource mutation.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Reject BestEffort Pods YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb"> </span>[pod]<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">qosClasses</span>:<span style="color:#bbb"> </span>[BestEffort]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-5" data-tenant-rule data-rule-index="5">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">06</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[5]</span>
                <h3 id="tenant-example-0-rule-5"><a class="tenant-rule__link" href="/docs/rules/enforcement/workloads/#tolerations">Control-plane tolerations</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Reject control-plane and wildcard tolerations.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Control-plane tolerations YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb"> </span>[pod]<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">placement</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">tolerations</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span>- <span style="color:#062873;font-weight:bold">key</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span><span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb">
</span><span style="color:#bbb">                </span>- node-role.kubernetes.io/control-plane<span style="color:#bbb">
</span><span style="color:#bbb">                </span>- node-role.kubernetes.io/master<span style="color:#bbb">
</span><span style="color:#bbb">          </span>- <span style="color:#062873;font-weight:bold">key</span>:<span style="color:#bbb"> </span>{<span style="color:#062873;font-weight:bold">exp</span>:<span style="color:#bbb"> </span><span style="color:#4070a0">&#39;^$&#39;</span>}<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">operators</span>:<span style="color:#bbb"> </span>[Exists]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-6" data-tenant-rule data-rule-index="6">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">07</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[6]</span>
                <h3 id="tenant-example-0-rule-6"><a class="tenant-rule__link" href="/docs/rules/#enforcement-conditions">Prevent direct node assignment</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Check direct assignment only at creation; allow scheduler-bound updates.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Prevent direct node assignment YAML"><code class="language-yaml">- enforce:
    action: deny
    conditions:
      - name: direct-node-assignment
        expression: &gt;-
          request.operation == &#39;CREATE&#39; &amp;&amp; has(object.spec.nodeName) &amp;&amp; object.spec.nodeName != &#39;&#39;
    workloads:
      targets: [pod]
</code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-7" data-tenant-rule data-rule-index="7">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">08</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[7]</span>
                <h3 id="tenant-example-0-rule-7"><a class="tenant-rule__link" href="/docs/rules/enforcement/workloads/#deny-daemonsets">Block DaemonSets</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Keep kind-level denials separate from workload property checks.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Block DaemonSets YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb"> </span>[daemonset]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-8" data-tenant-rule data-rule-index="8">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">09</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[8]</span>
                <h3 id="tenant-example-0-rule-8"><a class="tenant-rule__link" href="/docs/rules/enforcement/workloads/#registries">Approved image registries</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · allow</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Allow approved images with Always pull policy.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Approved image registries YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>allow<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">workloads</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">targets</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span>- pod/containers<span style="color:#bbb">
</span><span style="color:#bbb">        </span>- pod/initcontainers<span style="color:#bbb">
</span><span style="color:#bbb">        </span>- pod/ephemeralcontainers<span style="color:#bbb">
</span><span style="color:#bbb">        </span>- pod/volumes<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">registries</span>:<span style="color:#bbb">
</span><span style="color:#bbb">        </span>- <span style="color:#062873;font-weight:bold">exp</span>:<span style="color:#bbb"> </span><span style="color:#4070a0">&#39;^registry\.example\.com/solar/.+$&#39;</span><span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">policy</span>:<span style="color:#bbb"> </span>[Always]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-9" data-tenant-rule data-rule-index="9">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">10</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[9]</span>
                <h3 id="tenant-example-0-rule-9"><a class="tenant-rule__link" href="/docs/rules/enforcement/network/#types">ClusterIP Services only</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · allow</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Allow only ClusterIP Services.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="ClusterIP Services only YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>allow<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">services</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">types</span>:<span style="color:#bbb"> </span>[ClusterIP]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-10" data-tenant-rule data-rule-index="10">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">11</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[10]</span>
                <h3 id="tenant-example-0-rule-10"><a class="tenant-rule__link" href="/docs/rules/enforcement/network/#denying-all-external-ips">Block external IPs</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Deny all Service external IPs.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Block external IPs YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">services</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span><span style="color:#062873;font-weight:bold">externalIPs</span>:<span style="color:#bbb"> </span>{}<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-11" data-tenant-rule data-rule-index="11">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">12</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[11]</span>
                <h3 id="tenant-example-0-rule-11"><a class="tenant-rule__link" href="/docs/rules/enforcement/metadata/#managed">Restricted Pod Security labels</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · allow</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Apply and reconcile Pod Security labels on the Namespace itself.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Restricted Pod Security labels YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>allow<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span>- <span style="color:#062873;font-weight:bold">apiGroups</span>:<span style="color:#bbb"> </span>[v1]<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">kinds</span>:<span style="color:#bbb"> </span>[Namespace]<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">labels</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">pod-security.kubernetes.io/enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">managed</span>:<span style="color:#bbb"> </span>restricted<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">required</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[restricted]<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">pod-security.kubernetes.io/enforce-version</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">managed</span>:<span style="color:#bbb"> </span>v1.36<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">required</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[v1.36]<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">pod-security.kubernetes.io/warn</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">managed</span>:<span style="color:#bbb"> </span>restricted<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">required</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[restricted]<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">pod-security.kubernetes.io/warn-version</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">managed</span>:<span style="color:#bbb"> </span>v1.36<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">required</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[v1.36]<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">pod-security.kubernetes.io/audit</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">managed</span>:<span style="color:#bbb"> </span>restricted<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">required</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[restricted]<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">pod-security.kubernetes.io/audit-version</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">managed</span>:<span style="color:#bbb"> </span>v1.36<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">required</span>:<span style="color:#bbb"> </span><span style="color:#007020;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[v1.36]<span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-12" data-tenant-rule data-rule-index="12">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">13</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[12]</span>
                <h3 id="tenant-example-0-rule-12"><a class="tenant-rule__link" href="/docs/rules/enforcement/metadata/#deny-metadata-values">Protect platform trust labels</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Reserve this trusted-platform label for administrator-managed namespaces.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Protect platform trust labels YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span>- <span style="color:#062873;font-weight:bold">apiGroups</span>:<span style="color:#bbb"> </span>[v1]<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">kinds</span>:<span style="color:#bbb"> </span>[Namespace]<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">labels</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">company.com/system</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exp</span>:<span style="color:#bbb"> </span><span style="color:#4070a0">&#34;.*&#34;</span><span style="color:#bbb">
</span></code></pre></div>
          </article><article class="tenant-rule" aria-labelledby="tenant-example-0-rule-13" data-tenant-rule data-rule-index="13">
            <header class="tenant-rule__header">
              <span class="tenant-rule__number" aria-hidden="true">14</span>
              <div class="tenant-rule__heading">
                <span class="tenant-rule__path">spec.rules[13]</span>
                <h3 id="tenant-example-0-rule-13"><a class="tenant-rule__link" href="/docs/operating/best-practices/tenants/#dra-administrative-access">Disable DRA admin access</a></h3>
                <div class="tenant-rule__tags"><span>Enforce · deny</span></div>
              </div>
              <span class="tenant-rule__arrow" aria-hidden="true">↗</span>
            </header>
            <p class="tenant-rule__description">Keep DRA administrative access disabled in application namespaces.</p>
            <div class="tenant-rule__body"><pre tabindex="0" aria-label="Disable DRA admin access YAML"><code class="language-yaml">- <span style="color:#062873;font-weight:bold">enforce</span>:<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">action</span>:<span style="color:#bbb"> </span>deny<span style="color:#bbb">
</span><span style="color:#bbb">    </span><span style="color:#062873;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span><span style="color:#bbb">      </span>- <span style="color:#062873;font-weight:bold">apiGroups</span>:<span style="color:#bbb"> </span>[v1]<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">kinds</span>:<span style="color:#bbb"> </span>[Namespace]<span style="color:#bbb">
</span><span style="color:#bbb">        </span><span style="color:#062873;font-weight:bold">labels</span>:<span style="color:#bbb">
</span><span style="color:#bbb">          </span><span style="color:#062873;font-weight:bold">resource.kubernetes.io/admin-access</span>:<span style="color:#bbb">
</span><span style="color:#bbb">            </span><span style="color:#062873;font-weight:bold">values</span>:<span style="color:#bbb">
</span><span style="color:#bbb">              </span>- <span style="color:#062873;font-weight:bold">exact</span>:<span style="color:#bbb"> </span>[<span style="color:#4070a0">&#34;true&#34;</span>]<span style="color:#bbb">
</span></code></pre></div>
          </article></div>
  </section><script src="/js/tenant-example.min.ba609845c5f8abce7462b58a893ae91f40e0ed8279486720f071a291c63d1482.js" defer></script>

## How the Policies Combine

Capsule applies mutations before validation. On Pod creation, the resource
rules supply missing requests and storage limits, remove CPU limits, and align
memory limits with requests. Explicit requests and storage limits survive the
`Default` policies. Placement mutation adds the control-plane exclusions and
sets `hostUsers: false`; enforcement then checks the resulting Pod.

The workload policies target Pods, including controller-created Pods. The
DaemonSet rule separately rejects the controller itself. Add explicit
[controller targets](/docs/rules/enforcement/workloads/#workload-targets) if
you also want resource or image checks on saved controller templates. Keep the
DaemonSet denial and conditional direct-assignment denial separate: adding
workload properties to a targets-only rule changes its meaning.

The quota rule generates `solar-application-budget`, a
[GlobalResourceQuota](/docs/resource-management/globalresourcequota/) shared
across this Tenant's namespaces. It bounds aggregate consumption; the resource
defaults do not impose maximum requests or reserve node capacity by themselves.
Retain capacity for failover and system services as described in
[capacity planning](/docs/operating/best-practices/workloads/#eviction-and-capacity-planning).

The restricted Pod Security labels are managed values. The platform-label
denial checks added or changed metadata; unchanged existing values are skipped
on updates. Remove any existing tenant-controlled `company.com/system` labels
before using them as a network trust boundary.

The memory-overcommit and ExternalName examples on the individual pages are
deliberate exceptions. Add them only under reviewed namespace selectors, with
the selecting labels under platform control. Review [rule order and scope](/docs/rules/#order-and-scope)
when composing further rules so a later decision does not unintentionally
relax the baseline.

## DRA Administrative Access

Keep [Dynamic Resource Allocation (DRA) administrative access](https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#admin-access)
disabled by default in application Tenant namespaces. A ResourceClaim or
ResourceClaimTemplate with `adminAccess: true` can access devices already in
use by other workloads and may receive additional permissions from the device
driver. Restricting DeviceClasses alone does not prevent this privileged mode.

Kubernetes permits these requests in namespaces labeled
`resource.kubernetes.io/admin-access: "true"`. Keep that label absent and prevent
Tenant users from enabling it. The example's final metadata rule denies the
`"true"` value on namespace creation and on updates that add or change the
label. Namespaces without the label, the value `"false"`, and updates removing
the label remain allowed. Ordinary DRA requests remain available, subject to
any configured DeviceClass restrictions.

Apply this rule to every application Tenant without namespace selectors,
audiences, or conditions, so the restriction covers every namespace and caller.
Review later rules and managed metadata to ensure they do not enable the label.
Reserve administrative device access for separately reviewed namespaces under
platform control.

Before applying the baseline, remove any existing
`resource.kubernetes.io/admin-access: "true"` labels. Metadata validation skips
unchanged values on updates, so the denial does not clean up existing labels.
Also review existing claims and running workloads with `adminAccess: true`;
removing the label does not revoke device access from running workloads.

## Complete the Platform Setup

Apply the [native NetworkPolicy GlobalTenantResource](/docs/operating/best-practices/networking/#native-networkpolicies-with-globaltenantresource)
alongside this Tenant. It distributes default-deny, same-Tenant, DNS, and
platform-ingress policies; NetworkPolicies are not embedded in this Tenant
manifest. Review its CNI requirements and the permissions needed to prevent
tenants from adding policies that widen access.

Use the [additional admission policies](/docs/operating/best-practices/admission-policies/)
for requirements such as PDB validation, `emptyDir.sizeLimit`, debugging access,
and certificate issuer restrictions. Those examples require their respective
admission mechanisms and are not installed by this Tenant.

Configure [authentication, registry mirrors, and secret management](/docs/operating/best-practices/)
at platform level. Review existing workloads and Services before rollout;
admission policies do not remove previously admitted resources.

---

Last modified November 4, 2026: feat: add dra class enforcement and mutation (#176) (75c3bc0)
