当前位置: 首页 > news >正文

k8s中的NetworkPolicy

在 Kubernetes (k8s) 中,NetworkPolicy 是一种用于控制 Pod 之间网络流量的资源对象,它基于 Pod 标签(Labels)和命名空间(namespace)来定义网络访问规则,实现了对 Pod 进出流量的精细化控制。

核心作用

  • 隔离网络流量:默认情况下,k8s 集群中所有 Pod 之间可以自由通信,NetworkPolicy 可限制这种通信,只允许符合规则的流量通过。
  • 定义访问策略:通过规则指定 “哪些 Pod 可以被谁访问” 或 “哪些 Pod 可以访问谁”。
  • 增强安全性:遵循最小权限原则,只开放必要的网络访问,减少攻击面。

工作原理

NetworkPolicy 依赖 网络插件(CNI) 实现(如 Calico、Cilium、Weave Net 等),不同插件对策略的支持可能存在差异。其核心逻辑是:

  1. 基于 Pod 标签和命名空间筛选目标 Pod(策略作用的对象)。
  2. 对目标 Pod 的入站(Ingress)和出站(Egress)流量定义允许 / 拒绝规则。
  3. 规则匹配的维度包括:源 / 目标 Pod 标签、命名空间标签、IP 地址段、端口等。

关键概念

  1. Pod 选择器(podSelector)用于指定策略作用于哪些 Pod(通过标签匹配)。若为空,则匹配命名空间内所有 Pod。

  2. 命名空间选择器(namespaceSelector)用于匹配特定命名空间(通过标签),常与 podSelector 结合使用,限定跨命名空间的流量。

  3. 入站规则(Ingress)控制流入目标 Pod 的流量,可定义:

    • 允许的源(来自哪些 Pod / 命名空间 / IP)。
    • 允许的端口和协议(TCP/UDP/SCTP)。
  4. 出站规则(Egress)控制从目标 Pod 流出的流量,可定义:

    • 允许的目标(到哪些 Pod / 命名空间 / IP)。
    • 允许的端口和协议。
  5. 默认策略

    • 若未定义任何 NetworkPolicy,所有流量默认允许。
    • 若定义了策略,未被规则允许的流量将被默认拒绝。

基本示例

1. 拒绝所有入站流量(默认拒绝)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: default-deny-ingressnamespace: default
spec:podSelector: {}  # 匹配命名空间内所有 PodpolicyTypes:- Ingress  # 只控制入站流量
  • 该策略会拒绝 default 命名空间内所有 Pod 的入站流量(无任何允许规则)。
2. 允许特定 Pod 访问

假设有标签为 app: frontend 的 Pod 需要访问标签为 app: backend 的 Pod(端口 8080):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: backend-allow-frontendnamespace: default
spec:podSelector:matchLabels:app: backend  # 策略作用于 backend PodpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: frontend  # 允许 frontend Pod 访问ports:- protocol: TCPport: 8080  # 只允许 8080 端口
3. 允许跨命名空间访问

允许 prod 命名空间(标签 env: prod)中的 Pod 访问 default 命名空间中 app: db 的 Pod(端口 5432):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: db-allow-prodnamespace: default
spec:podSelector:matchLabels:app: dbpolicyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:env: prod  # 匹配 prod 命名空间ports:- protocol: TCPport: 5432
4. 控制出站流量

限制 app: backend 的 Pod 只能访问 app: db 的 Pod(端口 5432)和外部 IP 段 10.0.0.0/24

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: backend-egress-policynamespace: default
spec:podSelector:matchLabels:app: backendpolicyTypes:- Egressegress:- to:- podSelector:matchLabels:app: dbports:- protocol: TCPport: 5432- to:- ipBlock:cidr: 10.0.0.0/24  # 允许访问该 IP 段

注意事项

  1. 顺序无关:NetworkPolicy 规则没有优先级,只要有一条规则匹配,流量就会被允许。
  2. 命名空间隔离:策略仅作用于所在命名空间的 Pod,跨命名空间需通过 namespaceSelector 配置。
  3. 状态性:部分网络插件(如 Calico)支持基于连接状态的规则(如允许已建立的连接)。
  4. 默认策略建议:生产环境中通常先配置 “默认拒绝所有流量”,再按需开放必要规则,即 “白名单模式”。

通过 NetworkPolicy,Kubernetes 实现了 Pod 级别的网络隔离,是构建安全集群网络的核心工具之一。实际使用时需结合具体网络插件的特性进行配置。

下期我们会详细讲NetworkPolicy的工作原理

http://www.dtcms.com/a/405757.html

相关文章:

  • 【大语言模型】大模型后训练入门指南
  • 【初学】使用 node 编写 MCP Server
  • 阿里云云原生挑战官方用例SPL
  • 销售管理软件免费版什么叫seo优化
  • Apache POI 在 Linux 无图形界面环境下因字体配置问题导致Excel导出失败的解决方案
  • 咨询顾问进阶——146页PPT详解麦肯锡-企业管理整合咨询-组织设计方案【附全文阅读】
  • 力扣995. K 连续位的最小翻转次数
  • Resources$NotFoundException
  • pg下使用 TimescaleDB并创建1亿数据
  • 自动化脚本的操作逻辑与实现
  • UVa12418 Game of 999
  • 基于51单片机的音乐弹奏系统
  • 负载均衡式的在线OJ项目编写(二)
  • 美篇在哪个网站做的外链代发工具
  • Linux高级技巧之集群部署(七)
  • 外贸做那种网站wordpress获取图片的绝对地址
  • 【自然语言处理与大模型】RAFT(Retrieval Augmented Fine Tuning)方法
  • 湖南网站建设公司 找磐石网络一流跨境电商平台app排名
  • 动态IP使用中 报错407 怎么办???
  • 手机百度建设网站台州企业网站建设
  • 鞍山网站建设制作新潮远网站建设
  • 网站友情链接的好处东莞专业微网站建设
  • 二级学院英语网站建设通知wordpress login网址
  • 计算机专业大学排名seo统计
  • 织梦网站怎么加入引导页成都最值得一去的地方
  • 手机网站需要什么c 网站开发需要学什么
  • 教人做美食视频网站wordpress开发上传图片
  • 做图网站有哪些注册网站给谁交钱
  • 昆明工程建设信息网站广元网站建设
  • 网站模板与网站定制版的区别服务商平台登录