Kubernetes Network Policy使用场景

embedded/2025/3/18 8:53:12/

0. 运维干货分享

  • 软考高级系统架构设计师备考学习资料
  • 软考高级网络规划设计师备考学习资料
  • Kubernetes CKA认证学习资料分享
  • 信息安全管理体系(ISMS)制度模板分享
  • 免费文档翻译工具(支持word、pdf、ppt、excel)
  • PuTTY中文版安装包
  • MobaXterm中文版安装包
  • pinginfoview网络诊断工具中文版

Kubernetes 中的 Network Policy 是用于控制 Pod 之间以及 Pod 与外部流量之间的网络通信的安全策略。通过 Network Policy,可以实现细粒度的网络隔离和流量控制,确保集群内的安全性。以下是 Network Policy 的常见使用场景:

1. 实现默认的网络隔离

  • 场景描述: 默认情况下,Kubernetes 集群中的 Pod 彼此之间是可以自由通信的,这可能会带来潜在的安全风险,尤其是在多租户环境或不同应用共存的情况下。
  • 使用 Network Policy:
    • 通过定义一条 Network Policy,将默认的网络策略设置为拒绝(Deny-all),可以实现 Pod 间的默认隔离。然后,可以通过额外的策略来允许特定 Pod 或服务之间的通信。
    • 例如,以下策略将阻止所有进入 default 命名空间中 app=myapp 的 Pod 的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-allnamespace: default
spec:podSelector:matchLabels:app: myapppolicyTypes:- Ingress

可以再定义其他 Network Policy 来允许特定 Pod 的流量。

2. 限制应用程序间的访问

  • 场景描述: 在微服务架构中,多个服务之间可能有明确的通信需求。例如,frontend 应用可能只需要与 backend 应用通信,不应该直接访问数据库服务。
  • 使用 Network Policy:
    • 使用 Network Policy 可以限制不同应用之间的访问,仅允许特定的服务互相通信,从而减少攻击面。
    • 例如,以下策略允许 frontend Pod 仅能访问 backend Pod,而拒绝其他任何流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-frontend-to-backendnamespace: default
spec:podSelector:matchLabels:app: backendpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: frontend

3. 保护敏感服务

  • 场景描述: 某些服务,如数据库、敏感信息处理服务等,不应被集群中的其他 Pod 随意访问。
  • 使用 Network Policy:
    • 通过定义 Network Policy,可以限制只有特定的 Pod 能访问这些敏感服务,从而增强安全性。
    • 例如,以下策略只允许标记为 role=app 的 Pod 访问 role=db 的 Pod:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-app-to-dbnamespace: default
spec:podSelector:matchLabels:role: dbpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:role: app

4. 分离开发和生产环境

  • 场景描述: 在同一个 Kubernetes 集群中可能同时存在开发和生产环境。为了防止开发环境中的服务影响生产环境,需要对两者的网络流量进行隔离。
  • 使用 Network Policy:
    • 通过 Network Policy,可以将开发环境和生产环境的流量完全隔离开,确保开发环境中的流量不会影响生产环境。
    • 例如,以下策略阻止开发环境(namespace=dev)中的 Pod 访问生产环境(namespace=prod)中的 Pod:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-dev-to-prodnamespace: prod
spec:podSelector:matchLabels: {}policyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:environment: dev

5. 允许外部访问特定服务

  • 场景描述: 某些服务需要暴露给集群外部访问,如前端应用或 API 网关,而其他服务应仅限于集群内部访问。
  • 使用 Network Policy:
    • 使用 Network Policy,可以限制哪些 Pod 可以被外部访问,哪些只能在集群内部通信。特别是对于公共服务,可以精细控制哪些外部 IP 或 CIDR 块可以访问该服务。
    • 例如,以下策略允许来自特定 IP 地址范围的流量访问 nginx 服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-external-accessnamespace: default
spec:podSelector:matchLabels:app: nginxpolicyTypes:- Ingressingress:- from:- ipBlock:cidr: 203.0.113.0/24

6. 限制Pod的出站流量

  • 场景描述: 在某些场景中,可能需要限制 Pod 的出站流量,以确保 Pod 只能访问特定的外部服务或网络,防止数据泄露或异常流量。
  • 使用 Network Policy:
    • 通过定义 Egress 类型的 Network Policy,可以控制 Pod 允许访问的外部地址或服务。
    • 例如,以下策略限制 Pod 只能访问特定的外部服务:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: restrict-egressnamespace: default
spec:podSelector:matchLabels:app: myapppolicyTypes:- Egressegress:- to:- ipBlock:cidr: 192.168.1.0/24- podSelector:matchLabels:app: external-service

7. 保护关键基础设施组件

  • 场景描述: 集群中的一些关键组件,如 DNS 服务、Kubernetes API Server 等,通常不应被普通 Pod 直接访问,避免潜在的安全风险。
  • 使用 Network Policy:
    • 可以为这些关键服务定义专门的 Network Policy,限制只有受信任的 Pod 才能与它们通信。
    • 例如,以下策略限制只有标记为 role=system 的 Pod 能访问 DNS 服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: protect-dnsnamespace: kube-system
spec:podSelector:matchLabels:k8s-app: kube-dnspolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:role: system

8.总结

Network Policy 是 Kubernetes 中非常强大且灵活的网络安全控制工具。它可以用于各种场景,从默认隔离、限制应用间访问,到保护敏感服务、分离环境、控制出站流量等。通过合理配置 Network Policy,集群管理员可以显著提高 Kubernetes 集群的安全性和网络控制能力,确保不同应用、环境和服务之间的流量按照预期的策略进行流动。


http://www.ppmy.cn/embedded/173541.html

相关文章

基本不等式

基本不等式: 三种形式: 和积式 x -2xy y 0 (x>0, y>0) x y 2xy x y √2xy 非齐此式 其次式 如下图所示: 不等式的三种解法: 换元法:(乘积复杂就换乘积,分母复杂就换分母&#xff…

推理大模型的后训练增强技术-Reasoning模型也进化到2.0了,这次居然学会用工具了

论文题目:START: Self-taught Reasoner with Tools 论文链接:https://arxiv.org/pdf/2503.04625 论文简介 Reasoning模型也进化到2.0了,这次居然学会用工具了!✨ 最近有个叫START的方法,让大模型也能学着用工具&#…

消息队列导致数据库数据读取不一致解决方案

我使用的是在数据库添加一个版本字段,记录版本,保证版本一致性,就能保证每次读取的是需要的内容。 具体问题:使用消息队列时,发送方给接收方发送消息,接收方修改了数据库的同时发送方查询数据库&#xff0…

MongoDB 和 Elasticsearch的区别、优缺点对比,以及选型建议

MongoDB 和 Elasticsearch 在存储和搜索方面各有特点,适用于不同的场景。以下是它们的区别、优缺点对比,以及选型建议。 1. 概述 MongoDB:分布式 NoSQL 文档数据库,基于 BSON(类似 JSON)的文档存储&#x…

app.config.globalProperties

目录 一:基础使用 1、简介 2、使用 3、打印结果: 二:封装 1、创建一个.ts文件(utils/msg.ts) 2、在main.ts中全局注册 3、在页面中使用 4、打印结果 一:基础使用 1、简介 app.config.globalProperties 是 Vue 3 应用实例(app)的一个配置属性&…

海绵音乐 3.4.0 | 免费AI音乐创作软件,支持多种风格智能生成

海绵音乐是一款专为Android用户设计的免费AI音乐创作软件,搭载深度神经网络作曲引擎,支持流行、电子、古风等12种音乐风格智能生成。提供多轨道编辑界面(8轨同步混音),可自定义鼓点、旋律和和弦进行实时混音&#xff0…

用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏

大家好!今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括:控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂,适合初学者学习和实践。 游戏功能概述 玩家控制:使用键…

基于javaweb的SpringBoot校园运动会管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…