03.neuvector之组的划分逻辑

news2025/1/23 13:02:40

neuvector之组的划分逻辑

原文链接,欢迎大家关注我的github账号

一、组的定义

NeuVector 会自动从正在运行的应用程序中创建组。这些组以前缀‘nv‘开头。您也可以使用 CRD 或 REST API 手动添加它们,并且可以在任何模式下创建、发现、监视或保护。网络和响应规则需要这些组定义。对于自动创建的组(以“nv”开头的“学习”组) ,NeuVector 将学习网络和处理规则,并在发现模式下添加它们。自定义组不会自动学习和填充规则。注意: nv组开始时默认为进程/文件保护启用零漂移。

二、组的类型

neuvector组的类型分为三种:

  • 自定义组: 用户根据自定义的条件创建对应的组,自定义组不支持模式策略等;(支持相应规则、DLP\WAF检测、当NeuVector 无法识别内部网络,将其归类为“外部”网络时,可以为其指定内部服务的 DNS 名称、IP 地址或地址范围作为新的组,以避免被外部攻
    击。 )
  • crd生成的组:根据yaml文件内容生成对应的组;
  • 系统生成的组:neuvector自己学习生成的组

其中系统生成的组的类型可分为以下四种:

  1. nodes:根据集群节点集合生成的组
  2. external:外部组,主要用于查看与外部通信的网络规则
  3. service组:其中还有k8s的service也会生成相关组,命名规则为nv+.+ip.+service的名称+.+domain,但是这种类型的组不具备策略
    切换等操作,界面显示组时也会对传入并且属于内部(没有选择器的)的service类型组进行隐藏;
  4. 容器与pod组:根据组名分组,容器的组名生成逻辑为groupName=nv+.+serviceName+.+domain; 其中domain为命名空间,无命名空间则为空(例如docker、containerd容器);serviceName通过global.ORCH.GetService(&info.ContainerMeta)方法获取对应的serviceName;

三、代码中执行流程

neuvector组的生成流程图如下:

image.png

四、关键函数解析

GetService方法执行流程如下图 :

image.png

GetService根据不同的平台调用不同的方法:
当为k8s平台时:

  1. 首先查找容器有没有为deploymentconfig的标签,有则直接以deploymentconfig标签的值作为serviceName进行返回;
  2. 无则继续查看容器有没有为io.kubernetes.pod.name的标签,有的情况下分以下五种情况:
    2.1 如果k8s的flavor为rancher,并且这个容器的pod命名空间为"cattle-system",则判断这个pod的前缀和rancher相关的pod名称前缀
    (“rancher-agent-”,“core-services-dns-”,“core-services-metadata-”,“core-services-healthcheck-”,“core-services-network-manager-”)
    匹配,如果前缀匹配的话,将前缀作为serviceName进行返回;
    2.2 当2.1不满足时,查看容器是否有"pod-template-hash"的标签, 有则去掉pod名称的hash值然后作为serviceName进行返回;( pod.
    name比如采用如下格式: calico-node-m308t,其中-hash值是m308t,如果存在哈希标签,则删除它。serviceName为calico-node)
    2.3主要路径: 当2.1、2.2不满足时,判断pod名称是否满足正则表达式"^.*-[a-f0-9]{6,10}-[a-z0-9]{5} " 或者 " . ∗ − [ 0 − 9 ] 1 , 5 − [ a − z 0 − 9 ] 5 "或者"^.*-[0-9]{1,5}-[a-z0-9]{5} "或者".[09]1,5[az09]5"的
    pod名称,满足则以最后一个“-“作为分割线,将”-“之前的字符串作为serviceName进行返回;
    2.4 以上都不满足时,判断pod名称是否存在”-“字符,则以最后一个“-“作为分割线,将”-“之前的字符串作为serviceName进行返回;
    2.5 以上都不满足时,直接将pod名称作为serviceName进行返回;
  3. 当上述1、2都不满足时,直接调用baseDriver.GetService(meta)方法;
    3.1查看容器是否带有"com.docker.compose.project"、“com.docker.compose.service"标签也就是是否为docker compose方式部署 ,是则将(project + “.” + service)作为serviceName进行返回,其中service为"com.docker.compose.service"标签的值,project值为"Docker.Trusted.Registry"或者"Docker.UCP”
    3.2 无则查看容器是否带有"com.docker.swarm.service.name"也就是docker swarm方式部署,是则直接以标签的值作为serviceName进行返回;
    3.3 以上都不满足时,直接调用container.TrimContainerImageRepo(container.TrimContainerImageVersion(meta.Image)方法的返回值作为serviceName进行返回, 方法大概逻辑为去掉镜像的仓库前缀以及版本标签(以docker/controller:latest为例, serviceName为docker:controller);

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

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

相关文章

Pandas:Python可视化神器

大家好,数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,可以帮助我们更好的给他人解释现象,做到一图胜千文的说明效果。 常见的数据可视化库有: matplotlib 是最常见的2维库,可以算作可…

如何基于 Gin 封装出属于自己 Web 框架?

思路 在基于 Gin 封装出属于自己的 Web 框架前,你需要先了解 Gin 的基本用法和设计理念。 然后,你可以通过以下步骤来封装自己的 Web 框架: 封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己…

MySQl Mybatis

一、MySQL 1.1 概述 1.1.1 MySQL安装 1.1.2 数据模型 1.1.3 SQL简介 1.2 DDL 1.2.1 数据库操作 1.2.2 图形化工具 1.2.3 表结构操作 (一)创建 (二)数据类型 (1)数值类型 age tinyint unsigned——加上…

分布式链路追踪专栏,分布式链路追踪:Skywalking集群管理设计

SkyWalking 是一个开源 APM 系统,包括针对 Cloud Native 体系结构中的分布式系统的监视,跟踪,诊断功能。核心功能如下: 服务、服务实例、端点指标分析; 根本原因分析,在运行时分析代码; 服务拓…

从零开始搭建ubuntu 16.04 pwndocker环境

1.安装VMware-tools 1.1遇到问题 在使用 VMware Workstation时遇到了VMware Tools不能安装的问题,具体表现为:在要安装VMware Tools的虚拟机上右键 ----》安装VMware Tools(T)… 为灰色,不能够点击。 1.2解决方案    1. 关闭虚拟机&…

[学习笔记]刘知远团队大模型技术与交叉应用-汇总

参考资料: 视频:【清华NLP】刘知远团队大模型公开课全网首发|带你从入门到实战 课程计划 L1-NLP&Big Model Basics [学习笔记]刘知远团队大模型技术与交叉应用L1-NLP&Big Model Basics L2-Neural Network Basics [学习笔记]刘知…

力扣刷题(两数相加)

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

【读书笔记】《重构_改善既有代码的设计》重构的方法论

重构的方法论 标题:【读书笔记】【读书笔记】《重构_改善既有代码的设计》重构的方法论 时间:2024.01.14 作者:耿鬼不会笑 重构是什么? 什么是重构: “重构”这个词既可以用作名词也可以用作动词。 重构(名词&…

如何在Python交互模式中运行py文件

Python是一种流行的编程语言,具有交互式的开发体验。除了编写和运行Python代码,Python还提供了交互式模式,允许用户在命令行界面中逐行输入和执行Python代码。在本文中,我们将介绍如何在Python的交互模式中运行.py文件&#xff0c…

室内定位相关中文期刊/学报笔记

这里写目录标题 文章最重要的部分通信学报1. 2023 基于扩散模型的室内定位射频指纹数据增强方法2. 2023 基于 CHAN 的改进卡尔曼滤波室内定位算法3. 2022 基于自适应蝙蝠算法的室内 RFID 定位算法4. 2017 基于核函数特征提取的室内定位算法研究5. 2021 基于CSI张量分解的室内Wi…

高级分布式系统-第11讲 现场总线技术

现场总线概述 国际电工委员会制定的国际标准IEC61158对现场总线(fieldbus)的定义是: 安装在制造或过程区域的现场装置与控制室内的自动控制装置之间的数字式、串行、多点通信的数据总线。 新型的现场总线控制系统突破了DCS系统中通信由专用网…

数据结构:堆和堆排序

数据结构:堆和堆排序 文章目录 数据结构:堆和堆排序1.二叉树的存储结构1.顺序结构2.链式结构 2.堆3.堆的实现4.堆排序(选择排序中的一类)1. 基本思想2.代码实现 1.二叉树的存储结构 1.顺序结构 顺序结构存储就是使用数组来表示一…

C语言经典算法之直接排序算法

目录 前言 一、代码实现 二、时空复杂度 时间复杂度: 空间复杂度: 前言 建议:1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候,自己手动一步一步地运行算法。 tips:希尔排序算…

【数据结构 | 直接插入排序】

直接插入排序 思路直接插入排序 思路 扑克牌是我们几乎每个人都可能玩过的游戏。最基本的扑克玩法都是一边摸牌,边理牌。假如我们拿到了这样一手牌,如下图所示: 理牌的方法都是不用教的。将3和4移动到5的左侧,再将2移动到最左侧&…

Centos安装Datax

Centos7安装DataX 一、DataX简介二、DataX的数据源支持三、安装DataX1、下载DataX2、解压3、检验是否安装成功4、使用 四、实践案例1、环境信息2、编写同步的配置文件(user_info.json)3、执行同步4、验证同步结果 一、DataX简介 DataX 是阿里云 DataWorks数据集成 的开源版本&a…

Spring来了,春天还会远吗?

结束了JVM的学习后,要进入的是JavaEE进阶的学习了。JavaEE进阶学习内容很多很丰富,并且也很有难度。今天我们就从Spring开始讲起。 目录 框架的好处 怎么学框架 Spring核心与设计思想 容器 IoC Spring IoC DI(Dependency Injection&a…

GAN生成对抗网络介绍

GAN简介 GAN 全称是Generative Adversarial Networks,即生成对抗网络。 “生成”表示它是一个生成模型,而“对抗”代表它的训练是处于一种对抗博弈状态中的。 一个可以自己创造数据的网络! 判别模型与生成模型 判别模型(Discr…

Uniapp软件库源码-全新带勋章等

测试环境:php7.1。ng1.2,MySQL 5.6 常见问题: 配置好登录后转圈圈,检查环境及伪静态以及后台创建好应用 上传图片不了,检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图,在前端uitl文件夹里面…

第9章-第2节-Java中的反射机制

1、概念: 反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为 java…

记录汇川:H5U于Factory IO测试13

主程序: 子程序: IO映射 子程序: 辅助出料 子程序: 模式选择 子程序: 示教程序 子程序: 手动程序 子程序: 统计程序 子程序: 异常报警 子程序: 自动程序: F…