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

Strict BackendTLSPolicy Pod mTLS & SAN Verification Standard

Enforces zero-trust cryptographic pod-to-gateway mutual TLS and Subject Alternative Name (SAN) validation natively without sidecars via Kubernetes Gateway API v1.2 BackendTLSPolicy. Prohibits cleartext pod transit, unpinned wildcard certificates, and unanchored trust chains across heterogeneous service meshes.

Prohibited Anti-Pattern: Cleartext Gateway-to-Pod Egress and Unvalidated Upstream Backend TLS Handshakes

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Strict BackendTLSPolicy Pod mTLS & SAN Verification Standard - Enforces zero-trust cryptographic pod-to-gateway mutual TLS and Subject Alternative Name (SAN) validation natively without sidecars via Kubernetes Gateway API v1.2 BackendTLSPolicy. Prohibits cleartext pod transit, unpinned wildcard certificates, and unanchored trust chains across heterogeneous service meshes.
globs: k8s/**/*.yaml, deploy/**/*.yaml, charts/**/*.yaml, manifests/**/*.yaml, infrastructure/**/*.yaml
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/k8s-gateway-api-backendtlspolicy-strict-mtls"
---

# Strict BackendTLSPolicy Pod mTLS & SAN Verification Standard

> **Severity**: CRITICAL | **Category**: devops
> **Anti-Pattern Warning**: Cleartext Gateway-to-Pod Egress and Unvalidated Upstream Backend TLS Handshakes

## System Constraints
You are a Principal Software Architect enforcing zero-trust networking via Kubernetes Gateway API v1.2 BackendTLSPolicy. Reject any Gateway, HTTPRoute, or Service architecture that routes cleartext traffic to backend pods or terminates upstream TLS without explicit certificate authority (CA) pinning and Subject Alternative Name (SAN) validation. Mandate native, non-sidecar pod-level TLS validation adhering to strict transport layer invariants.

## Strict Guidelines
- Every Service targeted by an HTTPRoute or GRPCRoute MUST be explicitly targeted by a BackendTLSPolicy (gateway.networking.k8s.io/v1alpha3 or v1alpha2) in the same namespace.
- Engineers MUST specify an exact, fully-qualified Subject Alternative Name (SAN) in `spec.tls.hostname` matching the pod certificate's dNSName or SPIFFE URI identity.
- Engineers MUST NOT rely on implicit or default system trust stores; `spec.tls.caCertRefs` MUST explicitly reference an immutable ConfigMap containing only the designated authority CA bundle.
- Engineers MUST NOT configure upstream backend connections over insecure plaintext ports (e.g., port 80/8080) when processing regulated, sensitive, or cross-boundary workloads.
- Services MUST define target ports matching the native HTTPS/TLS listener of the backend pod container, ensuring direct cryptographic termination without intermediary sidecar proxies.
- Components NEVER permit insecureSkipVerify or empty caCertRefs configurations inside Gateway controller profiles or upstream route attributes.

## Bad vs Good Implementations
### Native Pod-to-Gateway Strict TLS Verification via BackendTLSPolicy

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: The HTTPRoute forwards decrypted traffic to billing-svc over plain HTTP (port 8080). There is no BackendTLSPolicy to mandate encryption or validate the pod's identity, allowing network sniffing, spoofing, and man-in-the-middle attacks within the cluster network fabric.
```yaml
# INSECURE: Gateway routes to backend pods over plaintext without cryptographic verification
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: billing-route
  namespace: payments
spec:
  parentRefs:
    - name: internal-gateway
      namespace: gateway-infra
  rules:
    - backendRefs:
        - name: billing-svc
          port: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: billing-svc
  namespace: payments
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
  selector:
    app: billing
```

#### Production Standard (Correct)
> **Standard**: The BackendTLSPolicy binds to billing-svc, establishing a strict cryptographic contract. The Gateway API data plane validates the pod's leaf certificate against the specified internal CA ConfigMap and enforces that the certificate SAN matches 'billing.payments.svc.cluster.local', ensuring end-to-end zero-trust encryption without sidecars.
```yaml
# SECURE: Gateway enforces native TLS, strict SAN matching, and explicit CA pinning
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: billing-route
  namespace: payments
spec:
  parentRefs:
    - name: internal-gateway
      namespace: gateway-infra
  rules:
    - backendRefs:
        - name: billing-svc
          port: 8443
---
apiVersion: gateway.networking.k8s.io/v1alpha3
kind: BackendTLSPolicy
metadata:
  name: billing-tls-policy
  namespace: payments
spec:
  targetRefs:
    - group: ""
      kind: Service
      name: billing-svc
  tls:
    caCertRefs:
      - group: ""
        kind: ConfigMap
        name: internal-workload-ca-cert
    hostname: billing.payments.svc.cluster.local
---
apiVersion: v1
kind: Service
metadata:
  name: billing-svc
  namespace: payments
spec:
  ports:
    - name: https
      port: 8443
      targetPort: 8443
  selector:
    app: billing
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Strict BackendTLSPolicy Pod mTLS & SAN Verification Standard

Strict BackendTLSPolicy Pod mTLS & SAN Verification Standard defines an industrial-grade behavioral standard for devops engineering. Enforces zero-trust cryptographic pod-to-gateway mutual TLS and Subject Alternative Name (SAN) validation natively without sidecars via Kubernetes Gateway API v1.2 BackendTLSPolicy. Prohibits cleartext pod transit, unpinned wildcard certificates, and unanchored trust chains across heterogeneous service meshes. 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: Cleartext Gateway-to-Pod Egress and Unvalidated Upstream Backend TLS Handshakes 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 DriftCleartext Gateway-to-Pod Egress and Unvalidated Upstream Backend TLS HandshakesCritical
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

Every Service targeted by an HTTPRoute or GRPCRoute MUST be explicitly targeted by a BackendTLSPolicy (gateway.networking.k8s.io/v1alpha3 or v1alpha2) in the same namespace.

Every Service targeted by an HTTPRoute or GRPCRoute MUST be explicitly targeted by a BackendTLSPolicy (gateway.networking.k8s.io/v1alpha3 or v1alpha2) in the same 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.
2

Engineers MUST specify an exact, fully-qualified Subject Alternative Name (SAN) in `spec.tls.hostname` matching the pod certificate's dNSName or SPIFFE URI identity.

Engineers MUST specify an exact, fully-qualified Subject Alternative Name (SAN) in `spec.tls.hostname` matching the pod certificate's dNSName or SPIFFE URI identity.

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 NOT rely on implicit or default system trust stores

Engineers MUST NOT rely on implicit or default system trust stores; `spec.tls.caCertRefs` MUST explicitly reference an immutable ConfigMap containing only the designated authority CA bundle.

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 configure upstream backend connections over insecure plaintext ports (e.g., port 80/8080) when processing regulated, sensitive, or cross-boundary workloads.

Engineers MUST NOT configure upstream backend connections over insecure plaintext ports (e.g., port 80/8080) when processing regulated, sensitive, or cross-boundary workloads.

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

Services MUST define target ports matching the native HTTPS/TLS listener of the backend pod container, ensuring direct cryptographic termination without intermediary sidecar proxies.

Services MUST define target ports matching the native HTTPS/TLS listener of the backend pod container, ensuring direct cryptographic termination without intermediary sidecar proxies.

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

Components NEVER permit insecureSkipVerify or empty caCertRefs configurations inside Gateway controller profiles or upstream route attributes.

Components NEVER permit insecureSkipVerify or empty caCertRefs configurations inside Gateway controller profiles or upstream route attributes.

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 Strict BackendTLSPolicy Pod mTLS & SAN Verification Standard critical for AI coding assistants?

Enforces zero-trust cryptographic pod-to-gateway mutual TLS and Subject Alternative Name (SAN) validation natively without sidecars via Kubernetes Gateway API v1.2 BackendTLSPolicy. Prohibits cleartext pod transit, unpinned wildcard certificates, and unanchored trust chains across heterogeneous service meshes. 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 (Cleartext Gateway-to-Pod Egress and Unvalidated Upstream Backend TLS Handshakes) 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

Strict