| name | network-policies |
| type | skill |
| description | Design and implement Kubernetes NetworkPolicy and Cilium network policies for namespace isolation and service-to-service access control. |
| related-rules | ["workload-security.md","cluster-standards.md"] |
| allowed-tools | Read, Write, Edit, Bash |
Skill: Network Policies
Expertise: K8s NetworkPolicy + Cilium policy design for multi-tenant namespace isolation and zero-trust traffic control.
When to load
When isolating a new namespace, allowing specific service-to-service communication, debugging traffic being blocked, or auditing inter-namespace access.
Standard Policy Set (apply to every new namespace)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: my-app
spec:
podSelector: {}
policyTypes: [Ingress, Egress]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns-egress
namespace: my-app
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-controller
namespace: my-app
spec:
podSelector:
matchLabels:
app: my-service
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: ingress-nginx
ports:
- port: 8080
Service-to-Service Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-orders
namespace: payments
spec:
podSelector:
matchLabels:
app: payment-service
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: orders
podSelector:
matchLabels:
app: order-service
ports:
- port: 8080
Monitoring Ingress (Prometheus scraping)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-prometheus-scrape
namespace: my-app
spec:
podSelector: {}
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: monitoring
ports:
- port: 9090
Cilium Policies (extended capabilities)
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: order-service-l7
namespace: production
spec:
endpointSelector:
matchLabels:
app: order-service
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: GET
path: /api/.*
Debugging Blocked Traffic
kubectl -n kube-system exec -it $(kubectl -n kube-system get pods -l k8s-app=cilium -o jsonpath='{.items[0].metadata.name}') \
-- cilium monitor --type drop
hubble observe --namespace my-app --verdict DROPPED
kubectl exec -n kube-system <calico-node-pod> -- calicoctl get networkpolicy -n my-app
kubectl run test-pod --image=curlimages/curl -it --rm --restart=Never -- \
curl -v http://payment-service.payments.svc.cluster.local:8080/health
Policy Design Checklist