Kubernetes NetworkPolicy实战:Pod网络隔离与东西向流量控制策略

Kubernetes集群中Pod之间默认网络互通,这在多租户或微服务架构中存在安全风险。NetworkPolicy通过标签选择器和CIDR规则控制Pod级网络流量,实现东西向流量隔离。本文覆盖NetworkPolicy的配置方法、常见隔离模式及调试技巧,适用于生产环境集群安全加固,是DevOps实践中容器网络安全管理的核心组件。

NetworkPolicy工作原理

NetworkPolicy是Kubernetes原生API资源,定义Pod的入站和出站规则。策略生效需满足两个条件:集群网络插件支持NetworkPolicy(Calico、Cilium等支持,Flannel默认不支持);策略spec中包含podSelector匹配目标Pod。

NetworkPolicy默认拒绝模式:一旦某个Pod匹配了任意一条NetworkPolicy的podSelector,未在策略中明确允许的流量全部被拒绝。这种白名单模式符合最小权限原则。

命名空间级默认隔离策略

创建默认拒绝所有入站流量的策略,作为基线隔离:

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-egress
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Egress

该策略拒绝production命名空间所有Pod的入站和出站流量,后续通过放行策略逐步开放必要通信。

微服务间流量放行配置

典型的微服务架构中,前端服务需要访问后端API,后端API访问数据库,需按调用链路逐层放行:

# 前端允许访问后端API
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: frontend-to-backend
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend-api
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend-web
    ports:
    - protocol: TCP
      port: 8080

---
# 后端API允许访问数据库
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-to-database
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: postgresql
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: backend-api
    ports:
    - protocol: TCP
      port: 5432

此配置实现三层网络隔离:只有frontend-web Pod可访问backend-api的8080端口,只有backend-api Pod可访问postgresql的5432端口,其他所有跨Pod流量被拒绝。

命名空间间流量隔离

多环境下需隔离不同命名空间的Pod通信。通过namespaceSelector限制来源命名空间:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-monitoring-namespace
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          team: monitoring
    ports:
    - protocol: TCP
      port: 9090

该策略仅允许带有team: monitoring标签的命名空间中的Pod访问production命名空间的9090端口,实现监控系统的跨命名空间访问控制。

命名空间需添加标签才能被selector匹配:

kubectl label namespace monitoring team=monitoring
kubectl label namespace production team=backend

出站流量控制与外部访问限制

限制Pod的出站流量可防止数据泄露和恶意外连。以下策略允许backend-api访问集群内DNS和指定外部API,拒绝其他所有出站流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-egress-control
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend-api
  policyTypes:
  - Egress
  egress:
  # 允许DNS解析
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: kube-system
      podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - protocol: UDP
      port: 53
  # 允许访问指定外部API
  - to:
    - ipBlock:
        cidr: 203.0.113.0/24
    ports:
    - protocol: TCP
      port: 443
  # 允许访问集群内数据库
  - to:
    - podSelector:
        matchLabels:
          app: postgresql
    ports:
    - protocol: TCP
      port: 5432

NetworkPolicy调试与排查

网络策略配置后需要验证实际效果。使用临时Pod进行连通性测试:

# 创建测试Pod
kubectl run test-client --image=nicolaka/netshoot --rm -it --restart=Never --namespace=production

# 在测试Pod内执行连通性检查
nc -zv backend-api 8080      # 预期:连接被拒绝
nc -zv postgresql 5432        # 预期:连接被拒绝
curl http://frontend-web:80   # 预期:连接成功

使用Calico网络插件时,通过calicoctl查看策略实际下发情况:

calicoctl get networkPolicy --all-namespaces -o wide
# 查看具体策略详情
calicoctl get networkPolicy default-deny-ingress -n production -o yaml

Cilium插件提供更直观的策略可视化:

# 查看策略命中情况
cilium policy get
# 监控策略拒绝事件
cilium monitor --type=drop
# 查看特定Pod的流量日志
cilium monitor --type=trace --related-to <pod-name>

常见问题排查:确认网络插件支持NetworkPolicy;检查Pod标签是否匹配策略中的selector;验证namespace标签是否正确设置;使用kubectl describe networkpolicy确认策略生效范围。生产环境建议先用default-deny策略隔离再逐步放行,避免一次性开放导致服务中断。Kubernetes容器编排中的网络隔离配合网络插件实现Pod级访问控制,是构建零信任架构的基础环节。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/kubernetesnetworkpolicy-shi-zhan-pod-wang-luo-ge-li-yu-dong/

(0)
小编小编
上一篇 1天前
下一篇 1天前

相关推荐