网络策略
全部拒绝默认策略
# 拒绝命名空间内所有入站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
---
# 拒绝所有入站和出站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
入站规则
# 允许同命名空间内特定 Pod 访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-api
namespace: production
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
出站规则
# 仅允许访问数据库
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-egress
namespace: production
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
app: postgres
ports:
- protocol: TCP
port: 5432
# 允许 DNS 解析
- ports:
- protocol: UDP
port: 53
命名空间选择器
# 允许来自 frontend 命名空间的所有 Pod
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
team: frontend
# 重要:同一 from 元素中的选择器为 AND 逻辑
# 不同 from 元素之间为 OR 逻辑
常用模式
| 模式 | 使用场景 |
|---|---|
| 全部拒绝 + 显式允许 | 零信任命名空间隔离 |
| 仅允许同命名空间 | 微服务命名空间隔离 |
| 允许来自 Ingress Controller | 限制外部流量路径 |
| 仅允许 DNS 出站 | 隔离互联网的工作负载 |