# Step 1: Deny ALL ingress and egress by default in every namespace apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all namespace: production spec: podSelector: {} policyTypes: - Ingress - Egress --- # Step 2: Allow DNS egress (required for pod name resolution) apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-egress namespace: production spec: podSelector: {} policyTypes: - Egress egress: - ports: - protocol: UDP port: 53 - protocol: TCP port: 53 --- # Step 3: Allow nginx-app to receive traffic from ingress controller only apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-ingress-to-nginx namespace: production spec: podSelector: matchLabels: app: nginx-app policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: ingress-nginx ports: - protocol: TCP port: 80 --- # Step 4: Allow monitoring scrape from prometheus namespace apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-prometheus-scrape namespace: production spec: podSelector: {} policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: monitoring ports: - protocol: TCP port: 9090 - protocol: TCP port: 8080