# NetworkPolicies for the agentic-os platform.
# Default-deny all ingress/egress per namespace, then explicitly allow required flows.
# Apply via platform/security kustomization.
---
# ─── ai-core namespace ────────────────────────────────────────────────────────
# Allow ingress from agents and interface namespaces, deny everything else.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ai-core-ingress
  namespace: ai-core
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/ai-agent-namespace: "true"
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "interface"
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "argocd"
  egress:
    # Allow DNS
    - ports:
        - port: 53
          protocol: UDP
        - port: 53
          protocol: TCP
    # Allow outbound to platform-data (Postgres, Redis, etc.)
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "data"
    # Allow outbound to tools-mcp
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "mcp"
    # Allow outbound to observability (metrics push)
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "observability"
---
# ─── platform-data namespace ──────────────────────────────────────────────────
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: platform-data-ingress
  namespace: platform-data
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "ai-core"
        - namespaceSelector:
            matchLabels:
              agentic-os.io/ai-agent-namespace: "true"
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "security"
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: "cnpg-system"
---
# ─── ai-agents-gumbo namespace ────────────────────────────────────────────────
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: gumbo-egress
  namespace: ai-agents-gumbo
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    # DNS
    - ports:
        - port: 53
          protocol: UDP
        - port: 53
          protocol: TCP
    # LiteLLM in ai-core
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "ai-core"
      ports:
        - port: 4000
    # MCP filesystem
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "mcp"
      ports:
        - port: 8080
    # Postgres checkpoint DB in platform-data
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "data"
      ports:
        - port: 5432
    # Temporal frontend
    - to:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "ai-core"
      ports:
        - port: 7233
---
# ─── tools-mcp namespace ──────────────────────────────────────────────────────
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: tools-mcp-ingress
  namespace: tools-mcp
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              agentic-os.io/ai-agent-namespace: "true"
        - namespaceSelector:
            matchLabels:
              agentic-os.io/layer: "interface"
