梗概
NetworkPolicy 是 Kubernetes 中的一种资源,用于控制 Pod 间的网络通信,实现网络隔离和安全策略。它允许集群管理员指定哪些 Pod 可以与哪些 Pod 通信,以及可以访问哪些网络端点。
详细说明
功能与作用
- 提供细粒度的网络流量控制,允许或阻止特定 Pod 之间的通信
- 增强集群网络安全性,实现微服务间的网络隔离
- 支持入站(ingress)和出站(egress)规则,控制进出 Pod 的流量
- 基于标签选择器匹配 Pod,提供灵活的策略应用方式
实现机制
- NetworkPolicy 由网络插件(如 Calico, Cilium, Weave Net 等)实现,非所有 Kubernetes 集群都默认支持
- 策略应用在 Pod 级别,通过控制 Pod 的网络接口实现
- 默认情况下,如果没有 NetworkPolicy 应用到 Pod,则所有流量都被允许
常见用例
- 隔离不同环境(开发、测试、生产)的应用
- 限制只允许前端服务访问后端服务
- 限制 Pod 只能访问特定的外部服务
- 实现多租户集群的网络隔离
基本配置示例
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80上述配置表示:只允许带有 app: frontend 标签的 Pod 通过 TCP 80 端口访问带有 app: backend 标签的 Pod。
与其他组件的关系
father:: kubernetes