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,可以实现细粒度的网络访问控制,增强集群的安全性。
相关文章:
k8s-NetworkPolicy
在 Kubernetes 中,NetworkPolicy 是一种资源对象,用于定义 Pod 之间的网络通信策略。它允许你控制哪些 Pod 可以相互通信,以及如何通信。通过使用 NetworkPolicy,可以实现更细粒度的网络访问控制,增强集群的安全性。 1…...

spring-ai 集成 mcp 之投机取巧
主旨 这篇文章主旨就一点,罗列spring-ai对mcp集成导致出现的一系列问题 分析 由于mcp未问世之前,就早就已经有了工具调用,源码如下: public interface ToolCallback {/*** Definition used by the AI model to determine when a…...

大语言模型的完整训练周期从0到1的体系化拆解
以下部分内容参考了AI。 要真正理解大语言模型(LLM)的创生过程,我们需要将其拆解为一个完整的生命周期,每个阶段的关键技术相互关联,共同支撑最终模型的涌现能力。以下是体系化的训练流程框架: 阶段一&am…...

历年北京邮电大学保研上机真题
2025北京邮电大学保研上机真题 2024北京邮电大学保研上机真题 2023北京邮电大学保研上机真题 在线测评链接:https://pgcode.cn/problem?classification1 32位二进制串加法 题目描述 输入一个32位的二进制01串,输出这个数1和3后的32位二进制串。 输入…...
elementUI 中el-date-picker和el-select的样式调整
1. el-date-picker <el-date-picker class"select1" size"small" v-model"timeRangeArr" type"daterange" align"right" unlink-panels range-separator"至" start-placeholder"开始日期" end-pla…...

《仿盒马》app开发技术分享-- 定位获取(端云一体)
开发准备 上一节我们实现了地址管理页面的数据查询和展示,接下来我们要实现的功能是地址添加相关的,我们想实现的功能是地图选点,那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息,然…...

黑马点评--基于Redis实现共享session登录
集群的session共享问题分析 session共享问题:多台Tomcat无法共享session存储空间,当请求切换到不同Tomcat服务时,原来存储在一台Tomcat服务中的数据,在其他Tomcat中是看不到的,这就导致了导致数据丢失的问题。 虽然系…...

Mujoco 学习系列(二)基础功能与xml使用
这篇文章是 Mujoco 学习系列第二篇,主要介绍一些基础功能与 xmI 使用,重点在于如何编写与读懂 xml 文件。 运行这篇博客前请先确保正确安装 Mujoco 并通过了基本功能与GUI的验证,即至少完整下面这个博客的 第二章节 内容: Mujoc…...

比特授权云外壳加密支持Android 15!
在信息化时代,多数软件供应商需要适配安卓系统,以扩大市场、满足用户需求并提升竞争力。APK作为Android应用的安装包,包含代码、资源、配置文件等运行所需组件,用于在设备端分发和安装应用。企业在分发软件时,需要通过…...

uniapp使用sse连接后端,接收后端推过来的消息(app不支持!!)
小白终成大白 文章目录 小白终成大白前言一、什么是SSE呢?和websocket的异同点有什么?相同点不同点 二、直接上实现代码总结 前言 一般的请求就是前端发 后端回复 你一下我一下 如果需要有什么实时性的 后端可以主动告诉前端的技术 我首先会想到 webso…...

历年复旦大学保研上机真题
2025复旦大学保研上机真题 2024复旦大学保研上机真题 2023复旦大学保研上机真题 在线测评链接:https://pgcode.cn/problem?classification1 最大公共子串 题目描述 输入 3 个子串,输出这 3 个子串的最大公共子串。 输入格式 输入包含 3 个子串&…...

黑马点评-实现安全秒杀优惠券(使并发一人一单,防止并发超卖)
一.实现优惠券秒杀 1.最原始代码: Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {Resourceprivate ISeckillVoucherService seckillVoucherService;Resourcepriv…...

解决论文中字体未嵌入的问题
文章总览:YuanDaiMa2048博客文章总览 解决论文中字体未嵌入的问题 问题描述解决方案:使用 Adobe PDF 打印机嵌入字体(WPS版)步骤一:打开 PDF 文件步骤二:选择打印到 Adobe PDF步骤三:修改 Adobe…...

leetcode 131. Palindrome Partitioning
目录 一、题目描述 二、方法1、回溯法每次暴力判断回文子串 三、方法2、动态规划回溯法 一、题目描述 分割回文子串 131. Palindrome Partitioning 二、方法1、回溯法每次暴力判断回文子串 class Solution {vector<vector<string>> res;vector<string>…...
Android本地语音识别引擎深度对比与集成指南:Vosk vs SherpaOnnx
技术选型对比矩阵 对比维度VoskSherpaOnnx核心架构基于Kaldi二次开发ONNX Runtime + K2新一代架构模型格式专用格式(需专用工具转换)ONNX标准格式(跨框架通用)中文识别精度89.2% (TDNN模型)92.7% (Zipformer流式模型)内存占用60-150MB30-80MB迟表现320-500ms180-300ms多线程…...

审计报告附注救星!实现Word表格纵向求和+横向计算及其对应的智能校验
在审计工作中,Word附注通常包含很多表格。为了确保附注数字的准确性,我们需要对这些表格进行数字逻辑校验,主要包含两个维度:在纵向上验证合计项金额是否正确;在横向上检查“年末金额年初金额本期增加-本期减少”的勾稽…...

人工智能数学基础实验(四):最大似然估计的-AI 模型训练与参数优化
一、实验目的 理解最大似然估计(MLE)原理:掌握通过最大化数据出现概率估计模型参数的核心思想。实现 MLE 与 AI 模型结合:使用 MLE 手动估计朴素贝叶斯模型参数,并与 Scikit-learn 内置模型对比,深入理解参…...

告别延迟!Ethernetip转modbustcp网关在熔炼车间监控的极速时代
熔炼车间热火朝天,巨大的热风炉发出隆隆的轰鸣声,我作为一名技术操控工,正密切关注着监控系统上跳动的各项参数。这套基于EtherNET/ip的监控系统,是我们车间数字化改造的核心,它将原本分散的控制单元整合在一起&#x…...
Kotlin协程优化Android ANR问题
引言 在Android开发中,ANR(Application Not Responding)是用户体验的致命杀手。当主线程被耗时操作阻塞超过阈值(5秒前台/10秒后台),系统会直接弹窗提示应用无响应。本文将深入剖析如何通过Kotlin协程将耗…...

Visual Studio Code插件离线安装指南:从市场获取并手动部署
Visual Studio Code插件离线安装指南:从市场获取并手动部署 一、场景背景二、操作步骤详解步骤1:访问官方插件市场步骤2:定位目标版本步骤3:提取关键参数步骤4:构造下载链接步骤5:下载与安装 三、注意事项 …...
构建安全AI风险识别大模型:CoT、训练集与Agent vs. Fine-Tuning对比
构建安全AI风险识别大模型:CoT、训练集与Agent vs. Fine-Tuning对比 安全AI风险识别大模型旨在通过自然语言处理(NLP)技术,检测和分析潜在的安全威胁,如数据泄露、合规违规或恶意行为。本文从Chain-of-Thought (CoT)设计、训练集构建、以及Agent-based方法与**AI直接调优…...

计算机视觉---YOLOv1
YOLOv1深度解析:单阶段目标检测的开山之作 一、YOLOv1概述 提出背景: 2016年由Joseph Redmon等人提出,全称"You Only Look Once",首次将目标检测视为回归问题,开创单阶段(One-Stage)…...
无法同步书签,火狐浏览器修改使用国内的账号服务器
自动更新版本后,变为国际服版本的了,点击右上角无法登录firefox,也无法同步书签,现在国际服的火狐浏览器修改使用国内的账号服务器,需要先在搜索框输入 about:config 中改变三项配置,然后重启浏览器,才能正常使用国内的火狐账号服务器 ident…...
动态防御体系实战:AI如何重构DDoS攻防逻辑
1. 传统高防IP的静态瓶颈 传统高防IP依赖预定义规则库,面对SYN Flood、CC攻击等常见威胁时,常因规则更新滞后导致误封合法流量。例如,某电商平台遭遇HTTP慢速攻击时,静态阈值过滤无法区分正常用户与攻击者,导致订单接…...
Kotlin Native与C/C++高效互操作:技术原理与性能优化指南
一、互操作基础与性能瓶颈分析 1.1 Kotlin Native调用原理 Kotlin Native通过LLVM编译器生成机器码,与C/C++的互操作基于以下核心机制: CInterop工具:解析C头文件生成Kotlin/Native绑定(.klib),自动生成类型映射和包装函数双向调用约定: Kotlin调用C:直接通过生成的绑…...

爬虫核心概念与工作原理详解
爬虫核心概念与工作原理详解 1. 什么是网络爬虫? 网络爬虫(Web Crawler)是一种按照特定规则自动抓取互联网信息的程序或脚本,本质是模拟人类浏览器行为,通过HTTP请求获取网页数据并解析处理。 形象比喻:如…...
Flink架构概览,Flink DataStream API 的使用,FlinkCDC的使用
一、Flink与其他组件的协同 Flink 是一个分布式、高性能、始终可用、准确一次(Exactly-Once)语义的流处理引擎,广泛应用于大数据实时处理场景中。它与 Hadoop 生态系统中的组件可以深度集成,形成完整的大数据处理链路。下面我们从…...

vue3前端后端地址可配置方案
在开发vue3项目过程中,需要切换不同的服务器部署,代码中配置的服务需要可灵活配置,不随着run npm build把网址打包到代码资源中,不然每次切换都需要重新run npm build。需要一个配置文件可以修改服务地址,而打包的代码…...
Es6中怎么使用class实现面向对象编程
在 JavaScript 中,面向对象的类可以通过 class 关键字来定义。以下是一个简单的示例,展示了如何定义一个类、创建对象以及添加方法: 基础类定义 // 定义一个类 class MyClass { // 构造函数,用于初始化对象的属性 constructor(pa…...

digitalworld.local: FALL靶场
digitalworld.local: FALL 来自 <digitalworld.local: FALL ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.4 3&…...