--- # NetworkPolicies for neuron-prod # Default-deny all ingress and egress, then explicitly allow only what's needed. # Enforced by k3s's built-in NetworkPolicy controller. # ── Baseline: deny all traffic in namespace ─────────────────────────────────── apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all namespace: neuron-prod spec: podSelector: {} policyTypes: - Ingress - Egress --- # ── neuron-mcp: accept traffic from Traefik (kube-system) only ─────────────── apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-mcp-ingress namespace: neuron-prod spec: podSelector: matchLabels: app: neuron-mcp policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system - namespaceSelector: matchLabels: kubernetes.io/metadata.name: neuron-prod --- # ── neuron-rest: accept from mcp, kube-system (Traefik), monitoring (Alloy) ── apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-rest-ingress namespace: neuron-prod spec: podSelector: matchLabels: app: neuron-rest policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system - namespaceSelector: matchLabels: kubernetes.io/metadata.name: neuron-prod - namespaceSelector: matchLabels: kubernetes.io/metadata.name: monitoring --- # ── neuron-marketing: accept from Traefik only ─────────────────────────────── apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-marketing-ingress namespace: neuron-prod spec: podSelector: matchLabels: app: neuron-marketing policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system --- # ── Egress: all prod pods may reach platform (postgres/redis), vault, # monitoring (alloy OTLP), kube-dns, and the internet (external APIs) ─ apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-prod-egress namespace: neuron-prod spec: podSelector: {} policyTypes: - Egress egress: # Kubernetes DNS - ports: - port: 53 protocol: UDP - port: 53 protocol: TCP # platform namespace (Postgres, Redis, accounts service) - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: platform # vault namespace - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: vault # monitoring namespace (Alloy OTLP) - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: monitoring # intra-namespace (mcp ↔ rest ↔ license) - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: neuron-prod # external internet (Stripe, OAuth providers, Cloudflare, etc.) - ports: - port: 443 protocol: TCP - port: 80 protocol: TCP