掌握Kubernetes Network Policy,构建安全的容器网络

在 Kubernetes 集群中,默认情况下,所有 Pod 之间都是可以相互通信的,这在某些场景下可能会带来安全隐患。为了实现更精细的网络访问控制,Kubernetes 提供了 Network Policy 机制。Network Policy 允许我们定义一组规则,来控制 Pod 之间的网络流量,从而实现网络隔离和安全加固。

本文将通过丰富的示例,详细讲解 Network Policy 的概念、语法、使用场景以及配置实践,帮助大家快速掌握 Network Policy,构建安全的容器网络。
在这里插入图片描述

Network Policy 的核心概念

Network Policy 是一种基于 Pod 标签(Label)的网络访问控制策略。它通过定义一系列规则,来允许或拒绝 Pod 之间的网络流量。Network Policy 的核心概念包括:

  • Policy 对象:Network Policy 是 Kubernetes 中的一种资源对象,我们可以通过 YAML 文件来定义和管理。
  • Pod 选择器(Pod Selector):Network Policy 通过 Pod 选择器来指定哪些 Pod 需要应用该策略。
  • Ingress 规则:定义允许进入被选定 Pod 的流量规则。
  • Egress 规则:定义允许从被选定 Pod 发出的流量规则。
  • 规则类型
    • IPBlock:基于 IP 地址段进行流量控制。
    • PodSelector:基于 Pod 标签进行流量控制。
    • NamespaceSelector:基于 Namespace 标签进行流量控制。

Network Policy 示例详解

下面通过几个示例来详细讲解 Network Policy 的用法。

示例 1:拒绝所有流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-allnamespace: default
spec:podSelector: {}policyTypes:- Ingress- Egress

这个 Network Policy 选择了 default 命名空间下的所有 Pod(podSelector: {}),并定义了空的 IngressEgress 规则。这意味着拒绝所有进入和离开这些 Pod 的流量。

示例 2:允许同一 Namespace 下的 Pod 之间互访
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-same-namespacenamespace: default
spec:podSelector: {}ingress:- from:- podSelector: {}

这个 Network Policy 选择了 default 命名空间下的所有 Pod,并定义了一个 Ingress 规则,允许来自同一命名空间下所有 Pod(podSelector: {})的流量。

示例 3:允许特定标签的 Pod 访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-frontendnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- podSelector:matchLabels:app: frontend

这个 Network Policy 选择了 default 命名空间下标签为 app: backend 的 Pod,并定义了一个 Ingress 规则,允许来自同一命名空间下标签为 app: frontend 的 Pod 的流量。

示例 4:允许来自特定 Namespace 的 Pod 访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-monitoringnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- namespaceSelector:matchLabels:name: monitoring

这个 Network Policy 选择了 default 命名空间下标签为 app: backend 的 Pod,并定义了一个 Ingress 规则,允许来自标签为 name: monitoring 的 Namespace 下的所有 Pod 的流量。

示例 5:允许特定 IP 段的访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-external-accessnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- ipBlock:cidr: 192.168.1.0/24except:- 192.168.1.10/32

这个 Network Policy 选择了 default 命名空间下标签为 app: backend 的 Pod,并定义了一个 Ingress 规则,允许来自 IP 地址段 192.168.1.0/24 但排除 192.168.1.10/32 的流量。

示例 6:允许特定端口的访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-specific-portnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- podSelector:matchLabels:app: frontendports:- protocol: TCPport: 80

这个 Network Policy 选择了 default 命名空间下标签为 app: backend 的 Pod,并定义了一个 Ingress 规则,允许来自同一命名空间下标签为 app: frontend 的 Pod 的流量,但仅限于 TCP 协议的 80 端口。

Network Policy 的注意事项

  • Network Policy 仅适用于支持它的网络插件:如 Calico、Cilium 等。
  • Network Policy 是累加的:如果多个 Network Policy 选择了同一个 Pod,那么这些策略的规则会合并生效。
  • Network Policy 的默认行为:如果没有 Network Policy 选择某个 Pod,那么该 Pod 的所有流量都是允许的。
  • Network Policy 的调试:可以使用 kubectl describe networkpolicy <policy-name> 命令查看 Network Policy 的详细信息,以及使用网络插件提供的工具进行调试。

总结

Network Policy 是 Kubernetes 中实现网络隔离和访问控制的重要工具。通过灵活运用 Network Policy,我们可以构建出满足各种安全需求的容器网络,保障应用的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask 小册子简介

这是一个Flask restful讲解的小册子&#xff0c;涵盖了 RESTful API 的概念、选择 Flask 的原因以及小册子的目标和结构。我会尽量写得详细&#xff0c;帮助你更好地理解。 1. 简介 1.1 什么是 RESTful API&#xff1f; 1.1.1 REST 的概念 REST&#xff08;Representational…

ElementUI 级联选择器el-cascader启用选择任意一级选项,选中后关闭下拉框

1、启用选择任意一级选项 在 el-cascader 标签上加上配置项&#xff1a; :props"{ checkStrictly: true }"例如&#xff1a; <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…

typedef 和 using 有什么区别?

在 C 编程中&#xff0c;类型别名&#xff08;Type Aliases&#xff09;是为已有类型定义新名称的一种机制&#xff0c;能够显著提升代码的可读性和可维护性。C 提供了两种工具来实现这一功能&#xff1a;传统的 typedef 和 C11 引入的 using 关键字。 概念 类型别名本质上是为…

VS2022C#windows窗体应用程序调用DeepSeek API

目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局‌‌ 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…

docker 如何更新容器内的环境变量,并覆盖创建这个容器的镜像?

docker 如何更新容器内的环境变量&#xff0c;并覆盖串讲这个容器的镜像&#xff1f; 之前试过在容器内unset 环境变量&#xff0c;并进行docker commit 保存&#xff0c;发现这样是不行的&#xff0c;重新启动容器之后还是会出现之前设置过的环境变量 了解了下&#xff0c;u…

Android Coil总结

文章目录 Android Coil总结概述添加依赖用法基本用法占位图变形自定义ImageLoader取消加载协程支持缓存清除缓存监听 简单封装 Android Coil总结 概述 Coil 是一个用于 Android 的 Kotlin 图像加载库&#xff0c;旨在简化图像加载和显示的过程。它基于 Kotlin 协程&#xff0…

如何在WPS中接入DeepSeek并使用OfficeAI助手(超细!成功版本)

目录 第一步&#xff1a;下载并安装OfficeAI助手 第二步&#xff1a;申请API Key 第三步:两种方式导入WPS 第一种:本地大模型Ollama 第二种APIKey接入 第四步&#xff1a;探索OfficeAI的创作功能 工作进展汇报 PPT大纲设计 第五步&#xff1a;我的使用体验(体验建议) …

Spring Boot集成Minio笔记

一、首先配置MinIO 1、MinIO新建Bucket&#xff0c;访问控制台如图 创建访问密钥(就是账号和密码) 二、集成mino添加Minio客户端依赖 1.maven构建方式在pom.xml引入jar <dependency><groupId>io.minio</groupId><artifactId>minio</artifactI…

【开源宝藏】Spring Trace 一种轻量级的日志追踪新方式

Spring Trace&#xff1a;一种轻量级的日志追踪新方式 一、前言 在日常开发中&#xff0c;我们常常需要在日志中标记某个请求的唯一标识&#xff08;Trace ID&#xff09;或上下文信息&#xff0c;以便快速定位问题或查看调用链路。传统做法通常会使用 MDC&#xff08;Mapped…

Web网页开发——水果忍者

1.介绍 复刻经典小游戏——水果忍者 2.预览 3.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

【Flink银行反欺诈系统设计方案】6.用户画像数据与反欺诈系统的关联思路

【Flink银行反欺诈系统设计方案】6.用户画像数据与反欺诈系统的关联思路 概要1. 用户画像数据与反欺诈系统的关联思路1.1 用户画像数据内容1.2 数据赋能反欺诈的核心逻辑 2. 用户画像赋能反欺诈的3个案例2.1 案例1&#xff1a;消费习惯异常检测2.2 案例2&#xff1a;设备/地理位…

如何在unity中完整录制一段动画

在动画制作中&#xff0c;需要对接音频部门进行音效的制作。通常需要完整且无多余帧数的动画视频作为时间和帧数对帧参考&#xff0c;这时候手动录屏就会显得不够精确&#xff0c;这里分享一个插件录制方法&#xff0c;可以自定义录制起始位置&#xff0c;0帧起手完整录制。 录…

Jetson Orin 安装 onnxruntime

Jetson Orin 安装 onnxruntime onnxruntime在Jetson上安装只需注意三件事&#xff1a; 版本&#xff01; 版本&#xff01; 还是TMD版本&#xff01; 本机环境 Jectpack : 5.1.2CUDA : 11.4cuDNN &#xff1a;8.6.0 版本说明 关于onnxruntime的版本适配不同的官方有不同的…

Manus AI : Agent 元年开启.pdf

Manus AI : Agent 元年开启.pdf 是由华泰证券出品的一份调研报告&#xff0c;共计23页。报告详细介绍了Manus AI 及 Agent&#xff0c;主要包括Manus AI 的功能、优势、技术能力&#xff0c;Agent 的概念、架构、应用场景&#xff0c;以及 AI Agent 的类型和相关案例&#xff0…

【为什么会有 map、weakmap 类型?】

为什么会有 map、weakmap 类型? 传统对象的局限性催生 Map‌1. 键类型单一性‌2. 有序性与迭代支持‌3. 性能优化场景‌ 内存管理需求催生 WeakMap‌1.弱引用机制‌2. 私有数据存储‌3. 规避循环引用问题‌ 总结 传统对象的局限性催生 Map‌ 1. 键类型单一性‌ 传统对象&…

SpringSecurity认证授权完整流程

SpringSecurity认证流程&#xff1a;loadUserByUsername&#xff08;&#xff09;方法内部实现。 实现步骤&#xff1a; 构建一个自定义的service接口&#xff0c;实现SpringSecurity的UserDetailService接口。建一个service实现类&#xff0c;实现此loadUserByUsername方法。…

本地部署DeepSeek R1大数据模型知识库

DeepSeek-V3 的综合能力 DeepSeek-V3 在推理速度上相较历史模型有了大幅提升。在目前大模型主流榜单中&#xff0c;DeepSeek-V3 在开源模型中位列榜首&#xff0c;与世界上最先进OpenAI 闭源模型不分伯仲。 1、下载Ollama运行大数据库 Ollama支持 Llama 3.3, DeepSeek-R1, Phi-…

云端秘境:EC2的奇幻之旅

在一个神秘的云端世界里&#xff0c;流传着一个传说——只要掌握了 EC2&#xff08;Elastic Compute Cloud&#xff09; 的奥秘&#xff0c;就能召唤出强大的骑士军团&#xff0c;在云端之上建造属于自己的帝国。年轻的程序法师 艾伦&#xff08;Allen&#xff09;&#xff0c;…

【javaEE】多线程(基础)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…