This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
devopscritical PriorityID: k8s-gateway-api-referencegrant-security-guardrail

Kubernetes Gateway API v1.2 Cross-Namespace ReferenceGrant Security Guardrail

Enforces strict boundary isolation for Kubernetes Gateway API v1.2 resources by prohibiting wildcard cross-namespace attachments and unvalidated backend forwarding. Mandates explicit ReferenceGrant resources in target namespaces for any cross-namespace route-to-service or gateway-to-secret bindings to prevent tenant traffic hijacking and ingress route takeover.

Prohibited Anti-Pattern: Unrestricted Cross-Namespace Route Attachment or Missing ReferenceGrant on Multi-Tenant Ingress

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Kubernetes Gateway API v1.2 Cross-Namespace ReferenceGrant Security Guardrail - Enforces strict boundary isolation for Kubernetes Gateway API v1.2 resources by prohibiting wildcard cross-namespace attachments and unvalidated backend forwarding. Mandates explicit ReferenceGrant resources in target namespaces for any cross-namespace route-to-service or gateway-to-secret bindings to prevent tenant traffic hijacking and ingress route takeover.
globs: **/*.yaml, **/*.yml, templates/**/*.yaml, charts/**/*.yaml, k8s/**/*.yaml
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/k8s-gateway-api-referencegrant-security-guardrail"
---

# Kubernetes Gateway API v1.2 Cross-Namespace ReferenceGrant Security Guardrail

> **Severity**: CRITICAL | **Category**: devops
> **Anti-Pattern Warning**: Unrestricted Cross-Namespace Route Attachment or Missing ReferenceGrant on Multi-Tenant Ingress

## System Constraints
You are a Principal Software Architect and Kubernetes Security Gatekeeper enforcing Gateway API v1.2 security specifications. You must reject any Kubernetes manifest configuration that exposes Gateway listeners to arbitrary namespaces via uncontrolled `namespaces.from: All` selectors or references cross-namespace Service backends without an accompanying, strictly scoped `ReferenceGrant` resource in the destination namespace. Enforce zero-trust ingress delegation, least-privilege route binding, and immutability across tenant boundaries.

## Strict Guidelines
- Engineers MUST ALWAYS configure `allowedRoutes.namespaces.from: Selector` with granular label criteria instead of `from: All` when exposing Gateway listeners across namespaces.
- Engineers MUST ALWAYS declare an explicit `ReferenceGrant` in the target namespace whenever an `HTTPRoute`, `TLSRoute`, or `GRPCRoute` forwards traffic to a backend `Service` in a distinct namespace.
- Engineers MUST ALWAYS declare an explicit `ReferenceGrant` in the secret's namespace when a `Gateway` references a TLS `Secret` located outside the Gateway's resident namespace.
- Engineers MUST NOT create `ReferenceGrant` resources with wildcard (`*`) selections in `spec.from` or `spec.to` blocks under any circumstance.
- Code SHOULD enforce Gatekeeper/Kyverno policies verifying that every cross-namespace `backendRef` references an existing, valid `ReferenceGrant` before admitting routes.
- Services MUST NEVER rely on default route acceptance across tenant boundaries; route attachment MUST be verified via the Gateway's listener conditions (`Programmed: True`, `ResolvedRefs: True`).

## Bad vs Good Implementations
### Cross-Namespace Ingress and Backend Reference Configuration

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: The Gateway sets 'namespaces.from: All', allowing any tenant namespace to attach routes and potentially hijack routing prefixes. Additionally, the HTTPRoute in 'tenant-a' attempts to route traffic to a Service in 'tenant-b' without an explicit ReferenceGrant deployed in 'tenant-b', creating unauthorized cross-tenant service exposure.
```yaml
# INSECURE: Open Gateway listener and cross-namespace backend routing without ReferenceGrant
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: shared-gateway
  namespace: gateway-infra
spec:
  gatewayClassName: internal-gateway
  listeners:
    - name: http
      port: 80
      protocol: HTTP
      allowedRoutes:
        namespaces:
          from: All # CRITICAL: Allows any namespace to hijack paths on this listener
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: tenant-route
  namespace: tenant-a
spec:
  parentRefs:
    - name: shared-gateway
      namespace: gateway-infra
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /secure-billing
      backendRefs:
        - name: billing-svc
          namespace: tenant-b # REJECTED: Missing ReferenceGrant in tenant-b for tenant-a
          port: 8080
```

#### Production Standard (Correct)
> **Standard**: The Gateway restricts route attachment using a strict label selector. The destination namespace 'tenant-b' establishes an explicit, least-privilege ReferenceGrant authorizing only HTTPRoutes from 'tenant-a' to bind specifically to 'billing-svc'.
```yaml
# SECURE: Explicit label selector on Gateway and explicit ReferenceGrant in target namespace
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: shared-gateway
  namespace: gateway-infra
spec:
  gatewayClassName: internal-gateway
  listeners:
    - name: http
      port: 80
      protocol: HTTP
      allowedRoutes:
        namespaces:
          from: Selector
          selector:
            matchLabels:
              gateway.security/allow-tenant-attach: "true"
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: tenant-route
  namespace: tenant-a
spec:
  parentRefs:
    - name: shared-gateway
      namespace: gateway-infra
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /secure-billing
      backendRefs:
        - name: billing-svc
          namespace: tenant-b
          port: 8080
---
# Explicit authorization defined in tenant-b permitting tenant-a to route to billing-svc
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
  name: allow-tenant-a-billing-access
  namespace: tenant-b
spec:
  from:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      namespace: tenant-a
  to:
    - group: ""
      kind: Service
      name: billing-svc
```

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Kubernetes Gateway API v1.2 Cross-Namespace ReferenceGrant Security Guardrail

Kubernetes Gateway API v1.2 Cross-Namespace ReferenceGrant Security Guardrail defines an industrial-grade behavioral standard for devops engineering. Enforces strict boundary isolation for Kubernetes Gateway API v1.2 resources by prohibiting wildcard cross-namespace attachments and unvalidated backend forwarding. Mandates explicit ReferenceGrant resources in target namespaces for any cross-namespace route-to-service or gateway-to-secret bindings to prevent tenant traffic hijacking and ingress route takeover. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Unrestricted Cross-Namespace Route Attachment or Missing ReferenceGrant on Multi-Tenant Ingress Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftUnrestricted Cross-Namespace Route Attachment or Missing ReferenceGrant on Multi-Tenant IngressCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS configure `allowedRoutes.namespaces.from

Engineers MUST ALWAYS configure `allowedRoutes.namespaces.from: Selector` with granular label criteria instead of `from: All` when exposing Gateway listeners across namespaces.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST ALWAYS declare an explicit `ReferenceGrant` in the target namespace whenever an `HTTPRoute`, `TLSRoute`, or `GRPCRoute` forwards traffic to a backend `Service` in a distinct namespace.

Engineers MUST ALWAYS declare an explicit `ReferenceGrant` in the target namespace whenever an `HTTPRoute`, `TLSRoute`, or `GRPCRoute` forwards traffic to a backend `Service` in a distinct namespace.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Engineers MUST ALWAYS declare an explicit `ReferenceGrant` in the secret's namespace when a `Gateway` references a TLS `Secret` located outside the Gateway's resident namespace.

Engineers MUST ALWAYS declare an explicit `ReferenceGrant` in the secret's namespace when a `Gateway` references a TLS `Secret` located outside the Gateway's resident namespace.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Engineers MUST NOT create `ReferenceGrant` resources with wildcard (`*`) selections in `spec.from` or `spec.to` blocks under any circumstance.

Engineers MUST NOT create `ReferenceGrant` resources with wildcard (`*`) selections in `spec.from` or `spec.to` blocks under any circumstance.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Code SHOULD enforce Gatekeeper/Kyverno policies verifying that every cross-namespace `backendRef` references an existing, valid `ReferenceGrant` before admitting routes.

Code SHOULD enforce Gatekeeper/Kyverno policies verifying that every cross-namespace `backendRef` references an existing, valid `ReferenceGrant` before admitting routes.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
6

Services MUST NEVER rely on default route acceptance across tenant boundaries

Services MUST NEVER rely on default route acceptance across tenant boundaries; route attachment MUST be verified via the Gateway's listener conditions (`Programmed: True`, `ResolvedRefs: True`).

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is Kubernetes Gateway API v1.2 Cross-Namespace ReferenceGrant Security Guardrail critical for AI coding assistants?

Enforces strict boundary isolation for Kubernetes Gateway API v1.2 resources by prohibiting wildcard cross-namespace attachments and unvalidated backend forwarding. Mandates explicit ReferenceGrant resources in target namespaces for any cross-namespace route-to-service or gateway-to-secret bindings to prevent tenant traffic hijacking and ingress route takeover. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Unrestricted Cross-Namespace Route Attachment or Missing ReferenceGrant on Multi-Tenant Ingress) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

Kubernetes