Introduction
Network Policies are Kubernetes resources that control pod-to-pod communication within a cluster. They act as a firewall, enabling fine-grained control over how pods communicate with each other and external endpoints.
Key Concepts
Pod Selection
Network policies use labels to select pods and define rules. Two key selectors:
- podSelector: Defines which pods the policy applies to
- namespaceSelector: Filters pods based on their namespace
Policy Types
- Ingress: Controls incoming traffic
- Egress: Controls outgoing traffic
Default Behavior
By default, pods accept traffic from any source. Once a Network Policy selects a pod, it denies all traffic not explicitly allowed by that policy.
Common Network Policy Patterns
1. Deny All Traffic
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny namespace: prod spec: podSelector: {} policyTypes: - Ingress - Egress
2. Allow Traffic from Specific Namespace
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-dev namespace: prod spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: environment: dev
3. Allow Specific Port Access
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-api-access spec: podSelector: matchLabels: app: api policyTypes: - Ingress ingress: - ports: - protocol: TCP port: 8080 from: - podSelector: matchLabels: role: frontend
4. Allow External Traffic
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-external-traffic spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - ipBlock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24
Best Practices
1. Isolation Strategy
- Start with deny-all policies
- Gradually add allow rules based on requirements
- Use namespaces for logical grouping
- Label pods consistently
2. Security Considerations
- Implement least privilege access
- Regular audit of network policies
- Document policy intentions
- Use network policy logs for troubleshooting
3. Performance Impact
- Minimize complex selectors
- Use efficient CIDR blocks
- Regular monitoring of network policy performance
- Consider CNI plugin capabilities
Troubleshooting Guide
Common Issues
-
Policy Not Applied
- Verify CNI plugin supports Network Policies
- Check label selectors match intended pods
- Confirm policy is in correct namespace
-
Unexpected Blocking
- Review all policies affecting the pod
- Check for conflicting rules
- Verify namespace labels
- Test with temporary allow-all policy
Debugging Commands
# List all network policies kubectl get networkpolicy --all-namespaces # Describe specific policy kubectl describe networkpolicy <policy-name> -n <namespace> # Check pod labels kubectl get pods --show-labels # Verify pod connectivity kubectl exec -it <pod-name> -- wget -qO- http://<service-name>
Advanced Configurations
1. Combining Multiple Rules
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: complex-policy spec: podSelector: matchLabels: app: web policyTypes: - Ingress - Egress ingress: - from: - namespaceSelector: matchLabels: environment: prod - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 80 egress: - to: - namespaceSelector: matchLabels: environment: prod ports: - protocol: TCP port: 5432
2. Using Multiple Port Ranges
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: multi-port-policy spec: podSelector: matchLabels: app: service policyTypes: - Ingress ingress: - ports: - protocol: TCP port: 80 - protocol: TCP port: 443 - protocol: UDP port: 53
Monitoring and Compliance
Tools and Metrics
- Network Policy Advisor
- Calico Network Policy Logs
- Prometheus metrics for policy evaluation
- Regular compliance audits
Best Practices for Production
- Version control all network policies
- Implement change management process
- Regular security reviews
- Automated policy testing
- Documentation of policy intentions
Conclusion
Network Policies are essential for securing Kubernetes clusters. Proper implementation requires understanding of pod networking, careful planning, and regular maintenance. Start with basic policies and gradually implement more complex rules based on security requirements.
Top comments (0)