会HTML怎么做网站,wordpress前端文章编辑器,网站防护找谁做,上海啥情况neuvector之组的划分逻辑 原文链接,欢迎大家关注我的github账号 一、组的定义
NeuVector 会自动从正在运行的应用程序中创建组。这些组以前缀‘nv‘开头。您也可以使用 CRD 或 REST API 手动添加它们#xff0c;并且可以在任何模式下创建、发现、监视或保护。网络和响应规则需…neuvector之组的划分逻辑 原文链接,欢迎大家关注我的github账号 一、组的定义
NeuVector 会自动从正在运行的应用程序中创建组。这些组以前缀‘nv‘开头。您也可以使用 CRD 或 REST API 手动添加它们并且可以在任何模式下创建、发现、监视或保护。网络和响应规则需要这些组定义。对于自动创建的组(以“nv”开头的“学习”组) NeuVector 将学习网络和处理规则并在发现模式下添加它们。自定义组不会自动学习和填充规则。注意: nv组开始时默认为进程/文件保护启用零漂移。
二、组的类型
neuvector组的类型分为三种
自定义组 用户根据自定义的条件创建对应的组自定义组不支持模式策略等支持相应规则、DLP\WAF检测、当NeuVector 无法识别内部网络将其归类为“外部”网络时可以为其指定内部服务的 DNS 名称、IP 地址或地址范围作为新的组以避免被外部攻 击。 crd生成的组根据yaml文件内容生成对应的组系统生成的组neuvector自己学习生成的组
其中系统生成的组的类型可分为以下四种
nodes根据集群节点集合生成的组external外部组主要用于查看与外部通信的网络规则service组其中还有k8s的service也会生成相关组命名规则为nv.ip.service的名称.domain但是这种类型的组不具备策略 切换等操作界面显示组时也会对传入并且属于内部(没有选择器的)的service类型组进行隐藏容器与pod组根据组名分组容器的组名生成逻辑为groupNamenv.serviceName.domain; 其中domain为命名空间无命名空间则为空例如docker、containerd容器serviceName通过global.ORCH.GetService(info.ContainerMeta)方法获取对应的serviceName
三、代码中执行流程
neuvector组的生成流程图如下 四、关键函数解析
GetService方法执行流程如下图 GetService根据不同的平台调用不同的方法 当为k8s平台时
首先查找容器有没有为deploymentconfig的标签有则直接以deploymentconfig标签的值作为serviceName进行返回无则继续查看容器有没有为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} 或者.∗−[0−9]1,5−[a−z0−9]5的 pod名称满足则以最后一个“-“作为分割线将”-“之前的字符串作为serviceName进行返回 2.4 以上都不满足时判断pod名称是否存在”-“字符则以最后一个“-“作为分割线将”-“之前的字符串作为serviceName进行返回 2.5 以上都不满足时直接将pod名称作为serviceName进行返回当上述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;