Ingress and egress rules in Kubernetes - Time & Space Complexity
We want to understand how the time to process network rules grows as we add more rules in Kubernetes.
How does adding more ingress and egress rules affect the time Kubernetes takes to enforce them?
Analyze the time complexity of the following Kubernetes NetworkPolicy snippet.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: example-policy
spec:
podSelector:
matchLabels:
role: db
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 3306
This policy controls which pods can send traffic to or receive traffic from the selected pods.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Kubernetes checks each network packet against all ingress and egress rules.
- How many times: For each packet, it loops through all rules to find matches.
As the number of rules increases, the time to check each packet grows roughly in proportion.
| Input Size (n rules) | Approx. Operations per Packet |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The time grows linearly as more rules are added.
Time Complexity: O(n)
This means the time to process network rules grows directly with the number of rules.
[X] Wrong: "Adding more rules won't affect performance much because checks happen instantly."
[OK] Correct: Each packet must be checked against every rule, so more rules mean more checks and more time.
Understanding how rule checks scale helps you design efficient network policies and troubleshoot performance issues confidently.
"What if Kubernetes used a hash map to organize rules by pod labels? How would the time complexity change?"
Practice
Ingress rules control in Kubernetes NetworkPolicies?Solution
Step 1: Understand the role of Ingress rules
Ingress rules specify which incoming network traffic is allowed to reach the pods.Step 2: Differentiate from Egress rules
Egress rules control outgoing traffic, not incoming.Final Answer:
Incoming traffic to pods -> Option BQuick Check:
Ingress = Incoming traffic [OK]
- Confusing ingress with egress
- Thinking ingress controls resource limits
- Mixing network traffic with storage access
frontend using a NetworkPolicy ingress rule?Solution
Step 1: Identify ingress rule syntax
Ingress rules useingress:withfrom:to specify allowed sources.Step 2: Confirm namespaceSelector usage
UsingnamespaceSelectorwithmatchLabelsis correct to select pods in a namespace.Final Answer:
ingress: - from: - namespaceSelector: matchLabels: name: frontend -> Option AQuick Check:
Ingress uses 'from' to allow incoming traffic [OK]
- Using 'to' instead of 'from' in ingress
- Confusing ingress with egress syntax
- Misplacing namespaceSelector under egress
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
except:
- 10.0.0.5/32Solution
Step 1: Analyze egress rule with ipBlock
The rule allows outgoing traffic to IPs in 10.0.0.0/24 except 10.0.0.5.Step 2: Confirm direction and exceptions
Egress means outgoing traffic; 'except' excludes 10.0.0.5 from allowed IPs.Final Answer:
All outgoing traffic to 10.0.0.0/24 except 10.0.0.5 -> Option AQuick Check:
Egress with ipBlock except excludes IPs [OK]
- Confusing ingress with egress direction
- Misreading 'except' as allowed IP
- Mixing incoming and outgoing traffic
egress:
- from:
- ipBlock:
cidr: 0.0.0.0/0
What is the error?Solution
Step 1: Check egress rule syntax
Egress rules specify destinations with 'to', not 'from'. Using 'from' is invalid here.Step 2: Understand correct usage
Correct egress syntax uses 'to' to define allowed outgoing IP blocks.Final Answer:
Egress rules use 'to', not 'from' -> Option DQuick Check:
Egress uses 'to' for destinations [OK]
- Using 'from' in egress rules
- Assuming CIDR 0.0.0.0/0 is invalid
- Thinking ports are always required
Solution
Step 1: Configure ingress to allow same-namespace pods
UsingpodSelector: {}allows traffic from all pods in the same namespace.Step 2: Configure egress to allow only specific external IP range
Egress usestowithipBlockfor 192.168.1.0/24 to restrict outgoing traffic.Final Answer:
ingress: - from: - podSelector: {} egress: - to: - ipBlock: cidr: 192.168.1.0/24 -> Option CQuick Check:
Ingress 'from' podSelector + Egress 'to' ipBlock [OK]
- Using 'from' in egress rules
- Using namespaceSelector instead of podSelector for ingress
- Mixing 'to' and 'from' keywords incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
