梗概

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。

与其他组件的关系

  • Pod 通过标签选择器关联,定义适用于哪些 Pod
  • Namespace 协同工作,可以限制策略的应用范围
  • Service 共同构建安全的网络架构
  • 依赖网络插件(如 CNI)的实现

father:: kubernetes