k8s-NetworkPolicy

在 Kubernetes 中,NetworkPolicy 是一种资源对象,用于定义 Pod 之间的网络通信策略。它允许你控制哪些 Pod 可以相互通信,以及如何通信。通过使用 NetworkPolicy,可以实现更细粒度的网络访问控制,增强集群的安全性。
1.NetworkPolicy 的作用
NetworkPolicy 主要用于以下场景:
限制 Pod 之间的通信:指定哪些 Pod 可以相互通信,哪些不能通信。
控制入站和出站流量:定义哪些流量可以进入 Pod,哪些流量可以从 Pod 发出。
基于标签的策略:通过 Pod 的标签选择器来定义策略,使得策略的管理更加灵活。

2.NetworkPolicy 的工作原理
NetworkPolicy 本身并不直接实现网络策略,而是依赖于支持网络策略的网络插件(如 Calico、Cilium、Weave 等)。这些插件会根据 NetworkPolicy 的定义,动态地配置网络规则,从而实现流量的控制。

3.NetworkPolicy 的基本配置
NetworkPolicy 的配置文件是一个 YAML 文件,定义了策略的规则。以下是一个简单的例子:

apiVersion: networking.k8s.io/v1   # 指定API版本
kind: NetworkPolicy				   # 指定资源类型为 NetworkPolicy。
metadata:						   # 定义了策略的名称和命名空间。name: allow-specific-podsnamespace: default
spec:podSelector:    # 定义了哪些 Pod 受此策略影响。在这个例子中,所有带有 role: frontend 标签的 Pod 会受到此策略的限制。matchLabels:role: frontendpolicyTypes:  # 定义了策略的类型,可以是 Ingress(入站流量)、Egress(出站流量)或两者。- Ingress- Egressingress:   # 定义了允许进入 Pod 的流量规则。在这个例子中,只有带有 role: backend 标签的 Pod 可以向带有 role: frontend 标签的 Pod 发送流量。- from:- podSelector:matchLabels:role: backendegress: # 定义了允许从 Pod 发出的流量规则。在这个例子中,带有 role: frontend 标签的 Pod 只能向带有 role: backend 标签的 Pod 发送流量。- to:- podSelector:matchLabels:role: backend

4.NetworkPolicy 的主要字段
podSelector:选择受此策略影响的 Pod。如果没有指定,则默认选择命名空间中的所有 Pod。
policyTypes:定义策略的类型,可以是 Ingress、Egress 或两者。
ingress:定义入站流量的规则。
from:定义允许流量的来源。
podSelector:基于 Pod 的标签选择器。
namespaceSelector:基于命名空间的标签选择器。
ipBlock:基于 IP 范围。
egress:定义出站流量的规则。
to:定义允许流量的目的地。
podSelector:基于 Pod 的标签选择器。
namespaceSelector:基于命名空间的标签选择器。
ipBlock:基于 IP 范围。
ports:定义允许的端口和协议。如果没有指定,则默认允许所有端口。

5.示例 限制 Pod 之间的通信

假设我们有两个服务:
frontend:运行前端应用,带有标签 role: frontend。
backend:运行后端应用,带有标签 role: backend。

我们希望:
frontend 只能从 backend 接收流量。
frontend 只能向 backend 发送流量。

创建 Pod

apiVersion: v1
kind: Pod
metadata:name: frontendlabels:role: frontend
spec:containers:- name: frontendimage: my-frontend-image
---
apiVersion: v1
kind: Pod
metadata:name: backendlabels:role: backend
spec:containers:- name: backendimage: my-backend-image

创建 NetworkPolicy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-specific-podsnamespace: default
spec:podSelector:matchLabels:role: frontendpolicyTypes:- Ingress- Egressingress:- from:- podSelector:matchLabels:role: backendegress:- to:- podSelector:matchLabels:role: backend

6.注意事项
默认策略:如果没有定义任何 NetworkPolicy,则默认允许所有 Pod 之间的通信。
网络插件支持:NetworkPolicy 的实现依赖于网络插件。确保你的 Kubernetes 集群使用了支持 NetworkPolicy 的网络插件(如 Calico、Cilium 等)。
命名空间隔离:NetworkPolicy 仅在定义它的命名空间内生效。如果需要跨命名空间的策略,需要使用 namespaceSelector。

7.示例:限制外部流量
假设我们希望限制外部流量只能访问特定的 Pod,可以使用以下 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-external-trafficnamespace: default
spec:podSelector:matchLabels:role: frontendpolicyTypes:- Ingressingress:- from:- ipBlock:cidr: 192.168.0.0/16

在这个例子中,只有来自 192.168.0.0/16 网段的外部流量可以访问带有 role: frontend 标签的 Pod。

8.示例:限制特定端口
假设我们希望限制 Pod 只能通过特定端口通信,可以使用以下 NetworkPolicy:

apiVersion: networking.k8s.io/v1  # 指定了 Kubernetes API 的版本
kind: NetworkPolicy			# :指定了资源类型
metadata:name: allow-specific-ports	# 定义了这个网络策略的名称namespace: default		# 定义了这个网络策略所在的命名空间
spec:podSelector:	# 定义了哪些 Pod 受此策略影响matchLabels:role: frontendpolicyTypes:	# :定义了策略的类型- Ingress- Egressingress:	# 定义了入站流量的规则。- from:	# 定义了允许流量的来源。- podSelector:	# 指定了流量来源的 Pod。这里通过 matchLabels 指定了带有 role: backend 标签的 Pod。matchLabels:role: backendports:	# 定义了允许的端口和协议。- protocol: TCP	# 指定了协议类型,这里是 TCP。port: 80	# 指定了端口号,这里是 80。# 解释:这个规则表示:只有带有 role: backend 标签的 Pod 可以通过 TCP 端口 80 向带有 role: frontend 标签的 Pod 发送流量。egress: # 定义了出站流量的规则。- to:	# 定义了允许流量的目的地。- podSelector:	# 指定了流量目的地的 Pod。这里通过 matchLabels 指定了带有 role: backend 标签的 Pod。matchLabels:role: backendports: # 定义了允许的端口和协议。- protocol: TCP # 指定了协议类型,这里是 TCP。port: 80 # 指定了端口号,这里是 80。
# 这个规则表示:带有 role: frontend 标签的 Pod 只能通过 TCP 端口 80 向带有 role: backend 标签的 Pod 发送流量。

在这个例子中,带有 role: frontend 标签的 Pod 只能通过 TCP 端口 80 与带有 role: backend 标签的 Pod 通信。

总结
NetworkPolicy 是 Kubernetes 中用于控制 Pod 之间网络通信的强大工具。通过合理配置 NetworkPolicy,可以实现细粒度的网络访问控制,增强集群的安全性。

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

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

相关文章

LAN(局域网)和WAN(广域网)

你的问题非常清晰!我来用一个直观的比喻实际拓扑图帮你彻底理解LAN(局域网)和WAN(广域网)如何协同工作,以及路由器在其中的位置。你可以把整个网络想象成一座城市: 1. 比喻:城市交通…

idea 插件开发自动发布到 nexus 私服中(脚本实例)

如下脚本内容为 idea 插件开发项目中的 build.gradle.kts 文件示例,其中自定了 updatePluginsXmlToNexus 和 uploadPluginToNexus 两个任务,一个用来自动修改 nexus 中的配置文件,一个用来自动将当前插件打包后的 zip 文件上传到 nexus 私服中…

SpringBoot-11-基于注解和XML方式的SpringBoot应用场景对比

文章目录 1 基于注解的方式1.1 @Mapper1.2 @select1.3 @insert1.4 @update1.5 @delete2 基于XML的方式2.1 namespace2.2 resultMap2.3 select2.4 insert2.5 update2.6 delete3 service和controller3.1 service3.2 controller4 注解和xml的选择如果SQL简单且项目规模较小,推荐使…

C++复习核心精华

一、内存管理与智能指针 内存管理是C区别于其他高级语言的关键特性,掌握好它就掌握了C的灵魂。 1. 原始指针与内存泄漏 先来看看传统C的内存管理方式: void oldWay() {int* p new int(42); // 分配内存// 如果这里发生异常或提前return&#xff0c…

期货反向跟单软件—提高盘手杠杆的方式及剖析

在期货反向跟单领域,期货跟单软件对盘手杠杆的调节,是整个策略运作的核心环节之一。其背后蕴含着科学的金融逻辑。​ 期货跟单软件提高盘手杠杆主要通过两种方式。第一种是降低期货保证金。在盘手资金总量固定的情况下,保证金降低&#xff0…

【计算机网络】基于UDP进行socket编程——实现服务端与客户端业务

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹: 【Linux笔记】——网络基础 🔖流水不争,争的是滔滔不息 一、UDPsocket编程UDPsocket编…

ae卡通打架烟雾特效

1、创建一个合成(合成1),右键创建形状图层,使用椭圆工具,长按shift键拖动鼠标左键画出圆形,同时按ctrlalthome三个键使圆形中心锚点对齐圆心,关闭描边,圆形图层填充白色。 2、选择形…

UE5 Va Res发送请求、处理请求、json使用

文章目录 介绍发送一个Get请求发送Post请求设置请求头请求体带添json发送请求完整的发送蓝图 处理收到的数据常用的json处理节点 介绍 UE5 自带的Http插件,插件内自带json解析功能 发送一个Get请求 只能写在事件图表里 发送Post请求 只能写在事件图表里 设置…

SQL 结构化模型设计与现代技术融合深度解读

摘要 本文系统展示了基于 JSON Schema 的 SQL 结构化模型设计,包括通用定义、四大基本操作(SELECT、INSERT、UPDATE、DELETE)的模型规范,以及面向现代场景的设计扩展。重点结合数据权限控制、乐观锁并发控制、表单自动化、自定义…

el-dialog 组件 多层嵌套 被遮罩问题

<el-dialog title"提示" :visible.sync"dialogBindUserVisible" width"30%" append-to-body :before-close"handleClose"> <span>这是一段信息</span> <span slot"footer" class"dialog-footer&q…

【KWDB 2025 创作者计划】_KWDB时序数据库特性及跨模查询

一、概述 数据库的类型多种多样&#xff0c;关系型数据库、时序型数据库、非关系型数据库、内存数据库、分布式数据库、图数据库等等&#xff0c;每种类型都有其特定的使用场景和优势&#xff0c;KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库…

学习心得(12-13)HTML 是什么 abort函数and自定义异常

一. abort函数 将后端的数据给到前端 二. 自定义异常 要结合abort函数使用 1.编写的时候都在abort的函数这个文件里面 错误信息在前端页面的展示&#xff1a; 如果想要在出现异常的时候返回一个页面&#xff1a; 1. 新建一个HTML文件 例如命名为404 2.将图库里的图片拖入…

理解全景图像拼接

1 3D到2D透视投影 三维空间上点 p 投影到二维空间 q 有两种方式&#xff1a;1&#xff09;正交投影&#xff0c;2&#xff09;透视投影。 正交投影直接舍去 z 轴信息&#xff0c;该模型仅在远心镜头上是合理的&#xff0c;或者对于物体深度远小于其到摄像机距离时的近似模型。…

Linux基本指令篇 —— whoami指令

whoami 是 Linux 和 Unix 系统中一个简单但实用的命令&#xff0c;全称 Who Am I&#xff08;我是谁&#xff09;。它的功能是显示当前登录用户的用户名。以下是关于 whoami 的详细解析&#xff1a; 目录 1. 基本用法 2. 命令特点 3. 实际应用场景 场景 1&#xff1a;脚本中…

华为OD机试真题——仿LISP运算(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

创建dummy

访客_dc1fc4 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int left0;int right0;int n nums.size(); int sum0;int ans100001; for(right0;right<n;right) { sumnums[right]; //每次更新右端点之后&#xff0c;立即向右移动…

面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)

全部内容梳理 目标检测的两个任务&#xff1a; 预测标签 边界框 语义分割 实力分割 一个是类别 一个是实例级别 分类任务把每个图像当作一张图片看待 所有解决方法是先生成候选区域 再进行分类 置信度&#xff1a; 包括对类别和边界框预测的自信程度 输出分类和IOU分数的…

需求管理工具使用不当,如何优化?

要优化需求管理工具的使用&#xff0c;需从选择合适工具、规范使用流程、加强用户培训、统一数据结构、定期审查与优化使用配置五个方面着手。其中&#xff0c;选择合适工具是前提。错误的工具选择往往会导致项目沟通效率低、需求追踪失效甚至造成交付物偏离客户预期。因此&…

openwrt虚拟机安装调试

分类 lienol lean immortalwrt 一、获取固件 &#xff08;1&#xff09;下载地址 1.官网构建下载 OpenWrt Firmware Selector 官网 OpenWrt Firmware Selector 2.第三方构建网站 ImmortalWrt Firmware Selector ImmortalWrt Firmware Selector 3.第三方构建下载 ht…

Apache OFBiz 17.12.01 的远程命令执行漏洞 -Java 反序列化 + XML-RPC 请求机制

目录 漏洞原理 &#x1f3af; 一、漏洞背景&#xff08;CVE-2020-9496&#xff09; ⚙️ 二、攻击原理简述 &#x1f9f1; 三、完整攻击流程步骤详解 &#x1f50e; 1. 信息收集 &#x1f6e0;️ 2. 工具准备 &#x1f9ea; 3. 构造初始 payload&#xff1a;下载恶意脚本…