首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes 10个网络策略案例实践,守护集群安全

Kubernetes 10个网络策略案例实践,守护集群安全

作者头像
用户11081884
发布2026-07-20 20:15:41
发布2026-07-20 20:15:41
250
举报

Kubernetes网络策略是保障集群安全的关键组件,通过精细控制Pod间的通信流量,可以有效实现零信任网络架构。本文将介绍10个实用的网络策略案例,覆盖多租户隔离、监控采集、数据库白名单、出口限流等常见场景。

01 命名空间级完全隔离

场景:多租户集群中,强制不同团队命名空间完全隔离。

策略:拒绝所有出入站流量。

代码语言:javascript
复制
# 01-namespace-deny-all.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-cross-namespace
  namespace: team-a
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]

02 允许监控命名空间采集指标

场景:Prometheus 位于 monitoring 命名空间,需要抓取业务Pod 指标。

策略:对目标命名空间放行来自 monitoring 命名空间的所有入站流量。

代码语言:javascript
复制
# 02-allow-monitoring.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-monitoring
  namespace: default
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: monitoring
  policyTypes: [Ingress]

03 仅开放Web端口

场景:前端 Web服务只需暴露 80/443。

策略:Pod标签 app=web 匹配,仅放行 TCP 80/443

代码语言:javascript
复制
# 03-web-ports-only.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: web-ports-only
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: web
  ingress:
  - ports:
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443
  policyTypes: [Ingress]

04 数据库访问白名单

场景:仅后端组件能访问 PostgreSQL

策略:Pod 标签 app=database 仅接受来自 app=backend 且端口 5432 的流量。

代码语言:javascript
复制
# 04-db-access.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-access
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: database
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: backend
    ports:
    - protocol: TCP
      port: 5432
  policyTypes: [Ingress]

05 出口DNS白名单

场景:安全合规要求限制 Pod 只能访问指定外部 DNS

策略:匹配 app=restrictedPod,仅允许访问 8.8.8.8:53。

代码语言:javascript
复制
# 05-egress-dns-only.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-dns-only
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: restricted
  egress:
  - to:
    - ipBlock:
        cidr: 8.8.8.8/32
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
  policyTypes: [Egress]

06 允许办公室内网访问管理后台

场景:Admin 界面只允许公司内网 IP 访问。

策略:匹配 app=adminPod,放行 CIDR 192.168.1.0/24

代码语言:javascript
复制
# 06-allow-office-cidr.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-office-ip
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: admin
  ingress:
  - from:
    - ipBlock:
        cidr: 192.168.1.0/24
  policyTypes: [Ingress]

07 多条件组合(命名空间 + Pod 标签)

场景:敏感服务需同时满足「来源命名空间=prod」且「Pod 角色=auditor」。

策略:使用两个 Selector 组合,逻辑为“与”。

代码语言:javascript
复制
# 07-multi-condition.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: multi-condition
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: sensitive
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          env: prod
      podSelector:
        matchLabels:
          role: auditor
  policyTypes: [Ingress]

08 默认拒绝所有出口流量

场景:高安全基线,先全部拒绝出站,再按需开洞。

策略:匹配所有 Pod,仅启用 Egress 类型,无规则即拒绝。

代码语言:javascript
复制
# 08-deny-all-egress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-egress
  namespace: default
spec:
  podSelector: {}
  policyTypes: [Egress]

09 同一微服务组内互通

场景:微服务 A 的多个实例需自由通信,但拒绝其他组。

策略:通过相同标签 group=microservice-a 实现组内全互通。

代码语言:javascript
复制
# 09-allow-same-group.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-same-group
  namespace: default
spec:
  podSelector:
    matchLabels:
      group: microservice-a
  ingress:
  - from:
    - podSelector:
        matchLabels:
          group: microservice-a
  policyTypes: [Ingress]

10 默认拒绝所有流量(打底策略)

场景:作为“默认关闭”安全基线,后续逐步放行。

策略:匹配全部 Pod,同时启用 Ingress + Egress,无规则即全部拒绝。

代码语言:javascript
复制
# 10-default-deny-all.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: default
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]

这些网络策略案例覆盖了Kubernetes网络安全的常见场景,从基本的命名空间隔离到精细的端口控制。实际应用中,建议采用“默认拒绝”的安全模型,然后逐步添加必要的允许规则。同时,网络策略应与RBAC等其他安全机制配合使用,构建全面的安全防护体系。

1、先 apply 10-default-deny-all.yaml,再按需叠加放行规则,确保“默认拒绝”。

2、规则叠加顺序无关,NetworkPolicy关系;不同文件间注意命名冲突。

3、出口策略需确认集群 DNS、Service Mesh、Ingress Controller 是否受影响,必要时单独放行。

4、与 RBAC、PodSecurityPolicy/OPA、ServiceAccount 配合,形成多层次安全体系。

5、生产环境建议启用 NetworkPolicy 日志审计(如 Calico Policy Reporter、Cilium Hubble)以便排障。

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 命名空间级完全隔离
  • 02 允许监控命名空间采集指标
  • 03 仅开放Web端口
  • 04 数据库访问白名单
  • 05 出口DNS白名单
  • 06 允许办公室内网访问管理后台
  • 07 多条件组合(命名空间 + Pod 标签)
  • 08 默认拒绝所有出口流量
  • 09 同一微服务组内互通
  • 10 默认拒绝所有流量(打底策略)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档