容器网络隔离实战技巧!

170 阅读3分钟

拒绝“容器间串门”,打造严密的零信任网络!


在生产环境中,网络安全往往是最容易被忽略的部分。很多企业上线容器集群后,并未对容器之间的通信做任何限制,默认处于全通状态。

这就好比你把多个租户安置在同一栋公寓楼,却不设门禁,任何租户都能随意进出其他房间。这样一来,只要一个容器被攻破,攻击者就可以横向移动,入侵整个网络空间!

本讲将系统介绍如何隔离容器间的网络通信,从底层网络模型、Kubernetes 网络策略,到服务网格的流量管理,构建一道“看不见的防火墙”。


一、容器网络通信的默认状态

大部分 CNI(如 Flannel、Calico)部署后,Pod 默认可以跨命名空间通信。这种全互通的设计虽然简化开发调试,但也极大地降低了安全性。

⚠️ 默认无 ACL、无认证、无隔离!

示例:未隔离的 Pod 网络

这种“裸奔”的网络状态对于敏感业务是不允许的。


二、网络隔离的三大防线

容器网络隔离并非单点施策,而应从以下三层联动发力:

层级防御机制核心工具
容器网络层namespace 隔离iptables / bridge rules
Pod 层网络策略控制Kubernetes NetworkPolicy
应用服务层服务身份验证与控制Istio / Linkerd 等 Service Mesh

三、使用 Kubernetes NetworkPolicy 进行隔离

3.1 什么是 NetworkPolicy?

Kubernetes 提供的 NetworkPolicy 是一种声明式网络访问控制规则,可以限制哪些 Pod 可以通信、允许哪些端口、协议。

3.2 一个简单示例:只允许 frontend 访问 backend

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: demo
spec:
  podSelector:
    matchLabels:
      role: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 80

图示说明:


四、NetworkPolicy 的进阶用法

4.1 限制出站访问(egress)

egress:
- to:
  - ipBlock:
      cidr: 10.0.0.0/24

4.2 按命名空间隔离

from:
- namespaceSelector:
    matchLabels:
      team: frontend

这允许只来自某个命名空间的流量通过,是团队间隔离的常用方法。


五、容器网络隔离中的常见问题

问题说明建议
NetworkPolicy 不生效CNI 插件不支持推荐使用 Calico/Cilium 等支持策略的插件
DNS 不通忘记允许 kube-dns手动加入 DNS 白名单规则
新加容器默认无访问权限Policy 默认拒绝所有通信添加默认允许策略或设置 fallback 策略

六、服务网格下的流量隔离:Istio 实战

除了传统的 L3/L4 网络控制,服务网格(如 Istio)  提供更高阶的 L7 流量控制,支持:

  • 请求认证与授权
  • mTLS 加密通信
  • 流量细粒度控制(按 Header、路径、用户)

示例:拒绝未认证的服务访问 payment 服务

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: payment-authz
spec:
  selector:
    matchLabels:
      app: payment
  rules:
  - from:
    - source:
        requestPrincipals: ["cluster.local/ns/prod/sa/frontend"]

七、完整隔离模型图示


八、网络隔离的最佳实践清单 ✅

  1. ✅ 使用支持 NetworkPolicy 的 CNI,如 Calico、Cilium
  2. ✅ 默认创建“Deny All”策略,按需开放
  3. ✅ 启用 Namespace Selector 做多团队隔离
  4. ✅ DNS 等基础服务单独白名单放行
  5. ✅ 配合 Istio 实现 L7 级别的服务身份认证和授权
  6. ✅ 加入容器创建 Pipeline 的 CI/CD 校验中

九、小结

容器的网络隔离不能靠“规则约定”,而是要靠“技术手段硬控”。Kubernetes 提供的 NetworkPolicy 是第一道防线,而 Istio 的服务网格功能则为我们在应用层构建了更强大的零信任网络边界。

记住一句话:不要让任意容器可以访问任意目标!