Skip to content

02 - NetworkPolicy 与安全最佳实践

NetworkPolicy(网络策略)

默认情况下,K8s 中所有 Pod 可以互相通信。NetworkPolicy 实现网络级别的隔离

前提:CNI 插件必须支持 NetworkPolicy(Calico、Cilium 支持,Flannel 不支持)。


基本示例

拒绝所有入站流量(默认拒绝)

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: production
spec:
  podSelector: {}            # 匹配所有 Pod
  policyTypes:
  - Ingress                  # 拒绝所有入站

只允许特定来源访问

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-api
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: api               # 目标 Pod
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend       # 只允许 frontend Pod 访问
    ports:
    - protocol: TCP
      port: 8080

限制出站流量

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-egress
spec:
  podSelector:
    matchLabels:
      app: api
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database
    ports:
    - protocol: TCP
      port: 5432
  - to:                       # 允许 DNS 查询
    - namespaceSelector: {}
    ports:
    - protocol: UDP
      port: 53

安全最佳实践清单

镜像安全

  • [ ] 使用可信的基础镜像
  • [ ] 不使用 latest 标签,锁定版本
  • [ ] 定期扫描镜像漏洞(Trivy、Snyk)
  • [ ] 使用私有镜像仓库

Pod 安全

  • [ ] 不以 root 用户运行容器
  • [ ] 设置只读根文件系统
  • [ ] 禁止特权容器
  • [ ] 设置资源限制
yaml
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 2000
  containers:
  - name: app
    image: myapp
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]
    resources:
      limits:
        memory: "256Mi"
        cpu: "500m"

集群安全

  • [ ] 启用 RBAC,遵循最小权限原则
  • [ ] 使用 NetworkPolicy 隔离网络
  • [ ] Secret 启用加密存储(Encryption at Rest)
  • [ ] 审计日志开启
  • [ ] 定期更新 K8s 版本

Secret 管理

  • [ ] 不要把 Secret 提交到 Git
  • [ ] 使用外部 Secret 管理(Vault、AWS Secrets Manager、阿里云 KMS)
  • [ ] 限制 Secret 的 RBAC 访问

下一步

Phase 9 - K8s 监控与日志