当前位置: 首页 > news >正文

Kubernetes控制平面组件:API Server详解(二)

云原生学习路线导航页(持续更新中)

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes架构原则和对象设计(二)
    • Kubernetes架构原则和对象设计(三)
    • Kubernetes控制平面组件:etcd(一)
    • Kubernetes控制平面组件:etcd(二)
    • Kubernetes控制平面组件:API Server详解(一)
    • Kubernetes常见问题解答
    • 查看云机器的一些常用配置

本文是kubernetes的控制面组件API Server详解(二),首先总览了API Server的整个处理流程,然后对 max-in-flight限流限制、authorization授权鉴权机制、aggregator扩展apiserver机制、内置apiserver的请求转换处理和admission准入控制模块 分别进行了详细介绍

  • 希望大家多多 点赞 关注 评论 收藏,作者会更有动力继续编写技术文章

1.API Server处理流程概览

在这里插入图片描述

  • request-timeout:request进来,会先去做request-timeout
  • authenatication:进行身份认证
  • audit:认证通过后会进行 审计日志 Audit 的记录,主要是记录什么人做了什么修改操作,方便在出问题时定位请求的来源,比如对象被删时可以用来定责
  • impersonation:用于模拟用户身份的字段
    • 在request-header中有一个impersonation header,可以指定该值来模拟用户身份。
    • 比如a用户发起的一个请求,但是它可以通过 impersonation header 把这个请求模拟成b用户,Kubernetes会把该请求认为是b用户,即a用户代替b用户来做操作,且后续的鉴权将会按照b用户进行
    • 一个不太常用的功能
  • max-in-flight:用于做限流(正在飞的请求–正在运行的请求)
    • 可以配置 允许API Server同时处理多少请求,即允许有多少尚未返回的请求
  • authorization:鉴权
  • kubernetes aggregator:扩展API Server处理器
    • Kubernetes为 内置资源提供了 默认的 API Server处理器,可以处理pod、deployment等内置资源
    • 但如果你希望自己来处理资源,也可以自己编写一个API Server处理器,挂载上来
    • 那么在kubernetes aggregator这里,就会判断使用哪个处理器,进而往下走
  • resource handler
    • kubernetes内置apiserver处理器的核心逻辑,包括解码、版本转换、默认值填充、准入、校验、和etcd交互等
    • decoding:解码
    • request conversion & defaulting:当用户请求的 API 版本与最新版本不一致时,转成内部通用版本,然后进行默认值填充
    • admission:准入校验
    • rest logic:rest处理模块
      • storage conversion & defaulting:将请求转成rest请求,操作存储etcd
    • result conversion:处理响应
    • encoding:对响应编码

request-timeout、authenatication、audit、impersonation 模块,请见 Kubernetes控制平面组件:API Server详解(一)

2.max-in-flight 请求限流

  • Kubernetes控制平面组件:APIServer 限流机制详解

3.authorization授权鉴权

在这里插入图片描述

3.1.认证和授权概念辨析

  • 在 Kubernetes控制平面组件:API Server详解(一) 中,我们详细讲解了 apiserver 的认证机制,那么认证和授权有什么区别呢?
  • 认证(Authentication)
    • 目的:验证请求者的身份,侧重于身份的校验,拦截非法身份
    • 支持方式
      • 静态密码文件
      • X509证书
      • Bearer Token
      • ServiceAccount Token
      • Webhook 等
    • 失败响应:认证失败返回 401 Unauthorized
  • 授权鉴权(Authorization)
    • 目的:验证请求者 有没有权限 执行当前操作,此时已经知道请求者身份了,侧重于权限校验,拦截 用户越权 的行为
    • 三要素
      1. 操作主体(Subject)
      2. 目标资源(Resource)
      3. 操作动作(Verb)
    • 核心问题:谁(Who)能对什么资源(What)执行什么操作(How)
    • 失败响应:鉴权失败返回 403 Forbidden

3.2.API Server 支持的授权模式

以下是补充了缩写全称的表格:

模式全称特点适用场景
ABACAttribute-Based Access Control基于属性配置,需重启API Server简单测试环境
RBACRole-Based Access Control通过API对象动态配置生产环境主流方案
WebhookWebhook Authorization对接外部授权系统企业统一权限体系
NodeNode Authorization节点组件专用授权kubelet权限控制

3.3.RBAC 与 ABAC 对比

在这里插入图片描述

3.3.1.ABAC 特点

  • 使用方法
    # 需在 apiserver master 节点配置策略文件
    --authorization-policy-file=/etc/kubernetes/policy.json
    
  • 缺点
    • 静态文件方式定义授权策略,每次更改都需要重启API Server
    • 策略更新困难
    • 缺乏灵活性

3.3.2.RBAC 优势

  • 通过API对象管理权限(Role/ClusterRole),无需重启API Server即可更新授权策略
  • 支持动态更新
  • 细粒度权限控制
  • 支持命名空间隔离

3.4. authorization 4种授权模式详解

3.4.1.ABAC授权模式详解

3.4.2.RBAC授权模式详解

3.4.3.Webhook授权模式详解

3.4.4.Node授权模式详解

3.5.与权限相关的最佳实践

在这里插入图片描述

4.kubernetes aggregator 扩展 APIServer 处理器

4.1.APIServer扩展 基本原理

4.1.1.APIServer 扩展核心组件

  • Kubernetes Aggregator(聚合层)是 Kubernetes APIServer 的扩展机制,允许将自定义或第三方 APIServer 无缝集成到主 APIServer(kube-apiserver)中。
  • 核心组件包括:
    • APIService 对象:声明 API 组和版本的访问规则,并关联后端服务(Service)。
    • 聚合层(Aggregator):作为七层负载均衡,动态路由请求到扩展APIServer。
    • GenericAPIServer:提供通用 APIServer 功能(如认证、鉴权、路由),所有子 APIServer 均基于此构建。

4.1.2.APIServer扩展工作流程

  1. 请求入口:客户端通过主 APIServer 发起请求(如 /apis/custom.group/v1)。
  2. 路由决策:聚合层根据 APIService 配置匹配请求路径,转发到扩展 APIService 的 Service。
  3. 安全认证:主 APIServer 使用 TLS 证书与扩展 APIServer 双向认证,确保通信安全。
  4. 代理与响应:扩展 APIServer 处理请求后,结果通过主 APIServer 返回客户端。

4.2.自定义 APIServer 的开发步骤

4.2.1.开发准备

  • 技术选型:基于 k8s.io/apiserver 库构建,实现标准的 Kubernetes API 接口。
  • 核心接口:
    • REST.Storage:处理资源的增删查改操作,需实现 GetterLister 等接口。
    • Scheme 注册:定义资源的序列化规则(如 runtime.Object 结构体)。

4.2.2.代码结构

// 示例代码框架(基于 k8s.io/apiserver)
func main() {config := genericapiserver.NewConfig()  // 创建通用配置config.EnableMetrics = true// 注册自定义资源 Schemescheme := runtime.NewScheme()customv1.AddToScheme(scheme)// 构建 APIGroupInfoapiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(...)apiGroupInfo.VersionedResourcesStorageMap["v1"] = storageMap// 初始化 GenericAPIServerserver, _ := config.Complete().New("my-apiserver", genericapiserver.NewEmptyDelegate())server.InstallAPIGroup(&apiGroupInfo)server.PrepareRun().Run(stopCh)
}

4.2.3.关键组件实现

  • 存储层:对接数据库或自定义存储(需实现 etcd3.Store 接口)。
  • 认证与鉴权:
    • 复用 Kubernetes 的 RBAC 机制,通过 SubjectAccessReview 验证权限。
    • 使用 --requestheader-client-ca-file--proxy-client-cert-file 配置 TLS 证书。

4.3.与 kube-apiserver 的集成

4.3.1.创建 APIService 对象

# APIService 定义示例
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:name: v1.custom.group
spec:group: custom.groupversion: v1service:namespace: custom-systemname: custom-api-server  # 指向自定义 APIServer 的 Serviceport: 443caBundle: <base64-encoded-CA>  # 用于验证扩展 APIServer 的 CA

4.3.2.服务发现与负载均衡

  • Service 配置:需创建 ClusterIP 或 NodePort 类型的 Service,确保主 APIServer 可访问。
  • Endpoints 验证:通过 kubectl get endpoints 检查后端 Pod 状态。

4.3.3.权限配置

  • RBAC 规则:需为自定义 APIServer 分配 system:auth-delegator 角色,允许代理请求。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: custom-apiserver-auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:
- kind: ServiceAccountname: custom-apiservernamespace: custom-system

4.4.注意事项

1. 安全与证书管理

  • CA 一致性:主 APIServer 与扩展 APIServer 的证书必须由同一 CA 签发。
  • 证书轮换:定期更新 TLS 证书,避免过期导致通信中断。

2. 性能与调试

  • 请求代理开销:聚合层代理可能增加延迟,建议优化扩展 APIServer 处理逻辑。
  • 日志与监控:启用 APIServer 的 --v=4 日志级别,结合 Prometheus 监控指标。

3. 版本兼容性

  • 多版本共存:支持 v1v1beta1 等版本,通过 spec.versionPriority 控制优先级。
  • 废弃策略:逐步淘汰旧版本,使用 deprecated 注解标记。

4.5.实操案例:Metrics Server 的实现

4.5.1.案例背景

  • Metrics Server 是 Kubernetes 官方提供的聚合 APIServer,用于采集 Node 和 Pod 的 CPU/内存指标。

4.5.2.实现步骤

  1. APIService 注册:
    apiVersion: apiregistration.k8s.io/v1
    kind: APIService
    metadata:name: v1beta1.metrics.k8s.io
    spec:service:name: metrics-servernamespace: kube-systemgroup: metrics.k8s.ioversion: v1beta1
    
  2. 自定义 APIServer:实现 metrics/v1beta1 组资源的 GET /nodes/{node}/metrics 接口。
  3. 权限配置:为 metrics-server ServiceAccount 绑定 system:metrics-server 角色。

4.5.3.验证

kubectl top nodes  # 查看节点指标
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq  # 直接访问 API

5.resource handler 内置 APIServer 处理器

5.1.请求conversion & defaulting

5.1.1.基础概念

  1. Conversion(版本转换)
    定义:将不同 API 版本的资源对象转换为统一 内部版本(Internal Version) 的机制,确保多版本兼容性。例如,用户提交的 apps/v1beta1.Deployment 会被转换为 apps/v1.Deployment 的内部表示。
    核心目标:实现 API 版本的平滑升级和降级,避免因版本变更导致数据丢失或服务中断。

  2. Defaulting(默认值填充)
    定义:为资源对象中未显式指定的字段填充默认值的机制。例如,未设置 Pod 的 imagePullPolicy 时,默认填充 IfNotPresent
    核心目标:简化用户配置,确保资源的完整性和一致性,避免因字段缺失导致运行时错误。

5.1.2.设计理念

  1. 多版本兼容性
  • 向后兼容:通过版本转换支持旧版本 API 请求,允许用户逐步迁移到新版本。
  • 版本共存:API Server 可同时处理多个版本的资源对象(如 v1v1beta1)。
  1. 配置简洁性
  • 用户友好:通过默认值隐藏复杂配置细节,例如自动填充 ServiceClusterIPDeployment 的滚动更新策略。
  • 规范化:确保资源对象符合 Schema 定义,减少人工校验成本。
  1. 扩展性与解耦
  • 插件化机制:Conversion 和 Defaulting 均可通过扩展点(如 CustomResourceDefinition 或 Admission Webhook)实现自定义逻辑。
    • mutatingwebhookconfigurations:修改资源属性
    • validatingwebhookconfigurations:校验资源

5.1.3.实现原理

  1. Conversion 实现机制
  • 版本注册表:每个 API 组(如 appsbatch)注册其支持的版本及转换函数。
  • 转换链(Conversion Chain)
    • 步骤1:将用户提交的外部版本(如 v1beta1)转换为内部版本。
    • 步骤2:持久化到 etcd 时,转换为存储版本(Storage Version)。
    • 步骤3:响应时根据请求的 API 版本反向转换。
  • 转换函数:通过 conversion-gen 工具自动生成或手动实现字段映射逻辑。
  1. Defaulting 实现机制
  • Schema 定义:在资源的 OpenAPI Schema 中声明字段的 default 值(如 spec.replicas: 1)。
  • 准入控制阶段:在请求验证前,由 Mutating Admission Controller 或内置逻辑填充默认值。
  • 自定义默认值:通过编写 Admission Webhook 动态填充(如根据 Namespace 设置资源配额)。

5.1.4.处理流程

用户请求
版本转换 Conversion
是否需转换?
调用转换函数
生成内部版本
默认值填充 Defaulting
填充 Schema 定义的默认值
执行 Admission Control
验证 & 持久化到 etcd
  1. Conversion 流程
    • 用户请求携带 apiVersion 字段(如 apps/v1beta1)。
    • API Server 根据注册的转换函数,将对象转换为内部版本。
    • 存储到 etcd 时,转换为存储版本(由 --storage-versions 指定)。

  2. Defaulting 流程
    • 在验证阶段前遍历资源对象字段。
    • 若字段未设置且 Schema 中定义默认值,则自动填充。


5.1.5.参数配置

  1. Conversion 相关配置
    API 版本启用:通过 --runtime-config=apps/v1beta1=true 启用特定 API 版本。
    存储版本设置:在 CRD 中指定 spec.versions.storage: true 定义存储版本。

  2. Defaulting 相关配置
    Schema 默认值:在 CRD 的 OpenAPI Schema 中定义 default 字段:

    spec:versions:- name: v1schema:openAPIV3Schema:properties:spec:properties:replicas:type: integerdefault: 1
    

    Admission Webhook:配置 Mutating Webhook 实现动态默认值。

5.1.6.实操案例

  1. 自定义 Conversion 函数
    场景:将自定义资源 MyAppv1alpha1 升级到 v1
    步骤
    • 定义转换函数:

    func Convert_v1alpha1_MyApp_To_v1_MyApp(in *v1alpha1.MyApp, out *v1.MyApp, s conversion.Scope) error {out.Spec.Replicas = in.Spec.ReplicaCount  // 字段重命名映射return nil
    }
    

    • 注册转换函数到 scheme

    scheme.AddConversionFunc(&v1alpha1.MyApp{}, &v1.MyApp{}, Convert_v1alpha1_MyApp_To_v1_MyApp)
    

    • 更新 CRD 的 spec.versionsstorage 标志。

  2. 动态 Defaulting 示例
    场景:为所有新创建的 Pod 自动添加 env: prod 标签。
    步骤
    • 编写 Mutating Webhook:

    func mutatePod(ar v1.AdmissionReview) *v1.AdmissionResponse {pod := corev1.Pod{}if err := json.Unmarshal(ar.Request.Object.Raw, &pod); err != nil {return denyRequest(err)}if pod.Labels == nil {pod.Labels = make(map[string]string)}pod.Labels["env"] = "prod"return createPatchResponse(ar.Request.Object.Raw, pod)
    }
    

    • 配置 Webhook 的 ValidatingWebhookConfiguration,指定匹配规则为 CREATE Pod

5.1.7.优化与注意事项

  1. 性能优化
    Conversion 缓存:缓存常用版本的转换结果,减少重复计算。
    Defaulting 延迟加载:仅在必要时填充默认值,避免资源浪费。

  2. 兼容性风险
    版本废弃策略:通过 deprecated 注解标记旧版本,逐步淘汰。
    默认值变更:修改 Schema 默认值时需考虑已存在资源的影响。

  3. 调试工具
    查看内部版本:使用 kubectl get --raw /apis/<group>/<version>/<resource>?as=internal 查看转换后的内部对象。
    Dry-Run 模式:通过 kubectl apply --dry-run=server 验证默认值填充逻辑。

5.2.admission准入控制

  • 请见:Kubernetes控制平面组件:APIServer 准入控制机制详解

6.API Server代码学习

Kubernetes控制平面组件:API Server代码基础概念

7.应用案例:如何搭建一个多租户的kubernetes集群

在这里插入图片描述

  • 基于前面对kubernetes集群架构 + API Server的学习,现在应该具备设计一个多租户kubernetes集群的能力。下面介绍基本思路。
    • 1.以ns为隔离域的租户隔离设计
      • 首先通过准入控制的 Webhook + Controller,在ns create阶段自动为ns绑定用户权限,实现:只有指定用户才可以访问某个ns。具体实现如下:
      • 在ns创建时,通过一个mutatingwebhookconfigurations变形webhook插件,将用户信息写入ns的annotation
    • 2.做好用户访问的授权鉴权
      • 关闭匿名访问,只允许可信用户操作
      • 鉴权时,判断请求用户信息是否存在于ns的annotation,即可判断当前用户是否有权限访问该ns
      • 管理员可以控制指定用户的ns权限和可见范围,其实就是控制ns上anno中是否包含某个用户的信息
    • 3.做好ns的配额管理
      • 通过在ns下创建ResourceQuota,定义ns下资源的配额,比如最多允许的pod数量、cm数量、service/ingress数量等
      • 还可以编写一个Controller,监听ns create事件,自动创建配额。
  • 用户视角下的隔离性
    • 可见性隔离,用户只能看到自己创建的ns下面的应用和服务,没有其他ns权限
    • 资源隔离,用户只能使用自己ns下的资源配额之内的资源,其他的用不了;另外,特有node上可以通过 打上污点Taint 的方式,防止其他用户调度上来,实现资源层隔离
    • 应用访问隔离,用户可以对自己应用配置访问限制
  • 实现以上内容,集群其实就已经是一个多租户集群了

8.应用案例:如何与企业现有认证系统集成

在这里插入图片描述

相关文章:

Kubernetes控制平面组件:API Server详解(二)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

人工智能在智慧农业中的应用:从田间到餐桌的变革

农业是人类社会的基石&#xff0c;随着全球人口的增长和资源的日益紧张&#xff0c;传统农业面临着巨大的挑战。近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展为农业带来了新的机遇。智慧农业通过将AI技术与农业生产相结合&#xff0c;实现了从田间种植…...

多人3D游戏完整实现方案

以下是一份完整的代码实现方案,涵盖架构设计、核心模块实现和部署流程。我们以 多人3D游戏 为例,结合之前讨论的Nano服务端框架和Unity客户端: 技术栈 模块技术选型服务端Golang + Nano框架 + MongoDB客户端Unity 2022 + C# + Mirror Networking通信协议Protobuf + WebSock…...

FFUF指南

ffuf 的核心功能&#xff1a; 目录/文件发现&#xff1a; 通过暴力破解&#xff08;使用字典&#xff09;探测目标网站的隐藏目录或文件&#xff0c;例如&#xff1a; ffuf -w /path/to/wordlist.txt -u http://target.com/FUZZ 子域名枚举&#xff1a; 通过模糊测试发现目标…...

详细的PyCharm安装教程

详细的PyCharm安装教程 安装前准备 确认系统要求&#xff1a; Windows&#xff1a;Microsoft Windows 10 1809 64位或更高版本&#xff0c;Windows Server 2019 64位或更高版本。 macOS&#xff1a;12.0或更高版本。 Linux&#xff1a;满足以下要求的两个最新版本的Ubuntu LTS或…...

FPGA IO引脚 K7-认知4

UG475来知道bank, GTX, Pin数量&#xff0c; Package, Pinout 时钟 ​​SRCC​​&#xff08;Single-Region Clock Capable I/O&#xff09;和​​MRCC​​&#xff08;Multi-Region Clock Capable I/O&#xff09;是专用的时钟输入/输出引脚。 如 2.DQS...

C++——异常

1. C语言错误处理机制 我们在曾经介绍过C语言下的错误码。错误码我们过去经常见到&#xff0c;错误码通常是指errno变量中的值&#xff0c;它表示特定操作&#xff08;如系统调用或库函数&#xff09;发生错误的原因。errno是一个全局变量&#xff0c;当出现错误时会自动将错误…...

vue3 中 iframe 多页面切换导致资源刷新的问题解决

最近发现一个问题&#xff0c;我在使用 websocket 的时候&#xff0c;在主页面进行了 websocket 连接了之后&#xff0c;再使用 iframe 打开子页面的时候&#xff0c;通常会触发页面刷新&#xff0c;这样就导致 WebSocket 断开&#xff0c;这是因为切换 src 会重新加载 iframe …...

php多种方法实现xss过滤

1. 使用 htmlspecialchars() 函数 htmlspecialchars() 是一个PHP内置函数&#xff0c;用于将特殊字符转换为HTML实体&#xff0c;从而防止浏览器将其解释为HTML或脚本代码。 <?phpfunction sanitizeInput($input) {// 将特殊字符转换为HTML实体return htmlspecialchars($…...

蓝桥杯练习题2

动态规划 动态规划三大题型&#xff1a;计数问题、最值问题、存在性问题&#xff1b; 【最小权值】-- 最值问题 【题目分析】 import java.util.Arrays; Arrays类中的一个方法&#xff1a;Arrays.fill(int[] m,int n) //给 int 类型(或者char类型/Long类型...)的数组全部空间…...

Python遥感开发之Hurst指数的实现

Python遥感开发之Hurst指数的实现 主要讲解Python实现Hurst指数&#xff0c;实现遥感下的Hurst指数&#xff0c;对Hurst指数进行分类&#xff0c;以及结合slope指数实现对未来变化趋势的分析。 文章目录 Python遥感开发之Hurst指数的实现0 什么是Hurst指数1 Python实现Hurst指…...

opencv 给图片和视频添加水印

给图片和视频添加水印 1 给图片添加水印2 给视频添加水印 1 给图片添加水印 代码如下&#xff1a; 添加水印 imgcv2.imread(r../15day4.10/src/xiaoren.png) img2cv2.imread(r../15day4.10/src/bg.png) h,w,cimg.shapeRIO_img2img2[100:100h,200:200w]img3cv2.cvtColor(img,…...

国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)

文章目录 一、B接口协议图像数据上报通知接口介绍B.13.1 接口描述B.13.2 接口流程B.13.3 接口参数B.13.3.1 SIP头字段B.13.3.2 SIP响应码B.13.3.3 XML Schema参数定义 B.13.4 消息示例B.13.4.1 图像数据上报请求B.13.4.2 图像数据上报响应 二、B接口图像数据上报通知失败常见问…...

Redis(持久化)

目录 一 Redis持久化的方式 1. RDB(Redis Database) 2. AOF(Append Only File) 二 对比RDB/AOF 为什么要持久化 Redis是跑在内存上的&#xff0c;但内存上的数据是临时的&#xff0c;Redis服务挂了&#xff0c;数据也就丢失了&#xff0c;所以为了解决上述问题&#xff0c;R…...

Linux系统中的网络管理

1.RHEL9版本中&#xff0c;使用nm进行网络配置&#xff0c;ifcfg不再是网络配置文件的主存储&#xff0c;样式仍然可用&#xff0c;但它不再是NetworkManger存储新网络配置文件的默认位置&#xff0c;RHEL以key-file格式在etc/NetworkManger/system-connections/中存储新的网络…...

【深度学习—李宏毅教程笔记】Transformer

目录 一、序列到序列&#xff08;Seq2Seq&#xff09;模型 1、Seq2Seq基本原理 2、Seq2Seq模型的应用 3、Seq2Seq模型还能做什么&#xff1f; 二、Encoder 三、Decoder 1、Decoder 的输入与输出 2、Decoder 的结构 3、Non-autoregressive Decoder 四、Encoder 和 De…...

关于UE5的抗锯齿和TAA

关于闪烁和不稳定现象的详细解释 当您关闭抗锯齿技术时&#xff0c;场景中会出现严重的闪烁和不稳定现象&#xff0c;尤其在有细节纹理和小物体的场景中。这种现象的技术原因如下&#xff1a; 像素采样问题 在3D渲染中&#xff0c;每个像素只能表示一个颜色值&#xff0c;但…...

交换网络基础

学习目标 掌握交换机的基本工作原理 掌握交换机的基本配置 交换机的基本工作原理 交换机是局域网&#xff08;LAN&#xff09;中实现数据高效转发的核心设备&#xff0c;工作在 数据链路层&#xff08;OSI 模型第二层&#xff09;&#xff0c;其基本工作原理可概括为 “学习…...

AUTOSAR图解==>AUTOSAR_SWS_EFXLibrary

AUTOSAR 扩展定点数学函数库(EFX)分析 1. 概述 AUTOSAR (AUTomotive Open System ARchitecture) 是汽车电子控制单元(ECU)软件架构的开放标准。在AUTOSAR架构中&#xff0c;扩展定点数学函数库(Extended Fixed-point library, EFX)提供了一组优化的定点数学运算函数&#xff…...

六边形棋盘格(Hexagonal Grids)的坐标

1. 二位坐标转六边形棋盘的方式 1-1这是“波动式”的 这种就是把【方格子坐标】“左右各错开半个格子”做到的 具体来说有如下几种情况 具体到庙算平台上&#xff0c;是很巧妙的用一个4位整数&#xff0c;前两位为x、后两位为y来进行表示 附上计算距离的代码 def get_hex_di…...

李宏毅NLP-5-RNNTNeural TransducerMoChA

RNN Transducer(RNN-T) 循环神经对齐器&#xff08;RNA&#xff0c;Recurrent Neural Aligner&#xff09;对CTC解码器的改进&#xff0c;具体内容如下&#xff1a; “RNA”&#xff0c;全称 “Recurrent Neural Aligner”&#xff0c;引用来自 [Sak, et al., INTERSPEECH’17…...

GPT-SoVITS 使用指南

一、简介 TTS&#xff08;Text-to-Speech&#xff0c;文本转语音&#xff09;&#xff1a;是一种将文字转换为自然语音的技术&#xff0c;通过算法生成人类可听的语音输出&#xff0c;广泛应用于语音助手、无障碍服务、导航系统等场景。类似的还有SVC&#xff08;歌声转换&…...

洛谷的几道题

P1000 超级玛丽游戏 # P1000 超级玛丽游戏 ## 题目背景 本题是洛谷的试机题目&#xff0c;可以帮助了解洛谷的使用。 建议完成本题目后继续尝试 [P1001](/problem/P1001)、[P1008](/problem/P1008)。 另外强烈推荐[新用户必读帖](/discuss/show/241461)。 ## 题目描述 …...

利用yakit充实渗透字典

前言 在渗透侧测试结束&#xff0c;在我们的历史记录中会保存过程中的数据包。在其中有些特征&#xff0c;比如API、参数&#xff0c;可以活用于下次的渗透。 比如 fuzz变量&#xff0c;fuzz隐藏API…… 但是我们一个一个提取很麻烦&#xff0c;可以使用yakit的插件&#xf…...

精益数据分析(4/126):开启数据驱动的创业之旅

精益数据分析&#xff08;4/126&#xff09;&#xff1a;开启数据驱动的创业之旅 在创业的浪潮中&#xff0c;我们都怀揣着梦想&#xff0c;渴望找到那条通往成功的道路。作为一名在创业和数据分析领域摸爬滚打多年的“老兵”&#xff0c;我深知其中的艰辛与挑战。今天&#x…...

机器学习误差图绘

机器学习误差图绘制 绘图类 # Define the ModelComparisonPlot class class ModelComparisonPlot:def __init__(self, model_name):self.model_name model_namedef plot_comparison(self, y_val, y_pred, mse, mae, r2):# Create a figure with two subplotsfig, axes plt.…...

企业级RAG选择难题:数据方案的关键博弈

企业级RAG选择难题&#xff1a;数据方案的关键博弈 向量数据库&#xff1a;高效但易失语境图数据库与知识图谱&#xff1a;关系网络的力量企业级RAG数据方案的最佳实践 智能时代&#xff0c;企业数据每日剧增。员工寻找答案的效率直接影响工作流程&#xff0c;StackOverflow调查…...

JNI 学习

1. JNI 不属于 C&#xff0c;而是 JDK 的 日志失效&#xff0c;可以 adb kill-server adb kill-serveradb start-server 使用 jni final和 private变量都能修改...

PyTorch :优化的张量库

PyTorch 是一个基于 Python 的开源机器学习框架&#xff0c;由 Facebook 的 AI 研究团队&#xff08;现 Meta AI&#xff09;于 2016 年推出。它专为深度学习设计&#xff0c;但也可用于传统的机器学习任务。PyTorch 的核心优势在于​​灵活性​​、​​动态计算图​​和​​易…...

DevOps 进阶指南:如何让工作流更丝滑?

DevOps 进阶指南:如何让工作流更丝滑? 引言 在 DevOps 世界里,我们追求的是高效、稳定、自动化。但现实总是充满挑战:代码部署失败、CI/CD 过程卡顿、环境不一致……这些痛点让开发和运维团队疲惫不堪。今天,我就来聊聊如何优化 DevOps 工作流,通过实战案例和代码示例,…...

BT-Basic函数之首字母XY

BT-Basic函数之首字母XY 文章目录 BT-Basic函数之首字母XYXxd__ commands Yyes X xd__ commands 当使用外部设备时&#xff0c;开发人员需要在测试计划中添加适当的命令来控制这些设备。下表显示了一个典型的命令序列。 典型的命令序列 NO命令描述1xdload将DLL加载到内存中…...

6. 话题通信 ---- 使用自定义msg,发布方和订阅方cpp,python文件编写

1)在功能包下新建msg目录&#xff0c;在msg目录下新建Person.msg,在Person.msg文件写入&#xff1a; string name uint16 age float64 height 2)修改配置文件 2.1) 功能包下package.xml文件修改 <build_depend>message_generation</build_depend><exec_depend…...

Fastdata极数:全球AR/VR行业发展趋势报告2025

科技的快速发展孕育了一个新的数字前沿领域&#xff0c;那就是虚拟宇宙&#xff0c;也就是我们谈论的元宇宙&#xff08;Metaverse&#xff09;&#xff0c;虚拟宇宙最初构思于尼尔斯蒂芬森的科幻小说《雪崩》中&#xff0c;小说中虚拟宇宙由虚拟人物居住&#xff0c;并以数字方…...

背包 DP 详解

文章目录 背包DP01 背包完全背包多重背包二进制优化单调队列优化 小结 背包DP 背包 DP&#xff0c;说白了就是往一个背包里扔东西&#xff0c;求最后的最大价值是多少&#xff0c;一般分为了三种&#xff1a;01 背包、完全背包和多重背包。而 01 背包则是一切的基础。 01 背包…...

深入剖析 HashMap:内部结构与性能优化

深入剖析 HashMap&#xff1a;内部结构与性能优化 引言 HashMap 是 Java 集合框架中的核心类&#xff0c;广泛应用于数据存储和检索场景。本文将深入剖析其内部结构&#xff0c;包括数组、链表和红黑树的转换机制&#xff0c;帮助读者理解其工作原理和性能优化策略。 1. Hash…...

数据从辅存调入主存,页表中一定存在

在虚拟内存系统中&#xff0c;​数据从辅存调入主存时&#xff0c;页表中一定存在对应的页表项&#xff0c;但页表项的「存在状态」会发生变化。以下是详细分析&#xff1a; 关键逻辑 ​页表的作用 页表是虚拟内存的核心数据结构&#xff0c;记录了虚拟地址到物理地址的映射关系…...

藏品馆管理系统

藏品馆管理系统 项目简介 这是一个基于 PHP 开发的藏品馆管理系统&#xff0c;实现了藏品管理、用户管理等功能。 藏品馆管理系统 系统架构 开发语言&#xff1a;PHP数据库&#xff1a;MySQL前端框架&#xff1a;BootstrapJavaScript 库&#xff1a;jQuery 目录结构 book/…...

力扣算法ing(60 / 100)

4.19 回溯合集—93复原ip地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&…...

时态--06--现在完成時

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 现在完成時1.语法1.肯定句2.否定句3.疑问句4.have been/gone to5.现在分词 practice 现在完成時 1.语法 1.肯定句 2.否定句 3.疑问句 4.have been/gone to 5.现在分…...

Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock

在Java中&#xff0c;锁是实现多线程同步的核心机制。不同的锁适用于不同的场景&#xff0c;理解其实现原理和使用方法对优化性能和避免并发问题至关重要。 一、隐式锁&#xff1a;synchronized 关键字 实现原理 基于对象监视器&#xff08;Monitor&#xff09;&#xff1a;每…...

【教程】DVWA靶场渗透

【教程】DVWA靶场渗透 备注一、环境搭建二、弱口令&#xff08;Brute Force&#xff09;三、命令注入&#xff08;Command Injection&#xff09;四、CSRF&#xff08;Cross Site Request Forgery&#xff09;五、文件包含&#xff08;File Inclusion&#xff09;六、文件上传&…...

23种设计模式-创建型模式之原型模式(Java版本)

Java 原型模式&#xff08;Prototype Pattern&#xff09;详解 &#x1f9ec; 什么是原型模式&#xff1f; 原型模式用于通过复制已有对象的方式创建新对象&#xff0c;而不是通过 new 关键字重新创建。 核心是&#xff1a;通过克隆&#xff08;clone&#xff09;已有对象&a…...

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读前言autopad函数Conv类__init__成员函数forward成员函数forward_fuse成员函数 Bottleneck类__init__成员…...

PDF转excel+json ,vue3+SpringBoot在线演示+附带源码

在线演示地址&#xff1a;Vite Vuehttp://www.xpclm.online/pdf-h5 源码gitee前后端地址&#xff1a; javapdfexcel: javaPDF转excelhttps://gitee.com/gaiya001/javapdfexcel.git 盖亚/vuepdfhttps://gitee.com/gaiya001/vuepdf.git 后续会推出 前端版本跟nestjs版本 识别复…...

LeetCode 热题 100_乘积最大子数组(88_152_中等_C++)(动态规划)

LeetCode 热题 100_乘积最大子数组&#xff08;88_152&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;暴力破解法(双重循环)&#xff09;&#xff1a;思路二&#xff08;动态规划&#xff09;&#xff1a; …...

Nvidia显卡架构演进

1 简介 显示卡&#xff08;英语&#xff1a;Display Card&#xff09;简称显卡&#xff0c;也称图形卡&#xff08;Graphics Card&#xff09;&#xff0c;是个人电脑上以图形处理器&#xff08;GPU&#xff09;为核心的扩展卡&#xff0c;用途是提供中央处理器以外的微处理器帮…...

TCP/IP、UDP、HTTP、HTTPS、WebSocket 一文讲解

在当今互联网世界中&#xff0c;数据通信是所有应用运行的基础。无论是打开网页、发送消息还是视频通话&#xff0c;背后都依赖于各种网络协议的协同工作。其中&#xff0c;TCP/IP、UDP、HTTP、HTTPS 和 WebSocket 是最为核心的几种协议。本文将围绕它们的概念、特性和适用场景…...

[密码学基础]密码学发展简史:从古典艺术到量子安全的演进

密码学发展简史&#xff1a;从古典艺术到量子安全的演进 密码学作为信息安全的基石&#xff0c;其发展贯穿人类文明史&#xff0c;从最初的文字游戏到量子时代的数学博弈&#xff0c;每一次变革都深刻影响着政治、军事、科技乃至日常生活。本文将以技术演进为主线&#xff0c;…...

包含物体obj与相机camera的 代数几何代码解释

反余弦函数的值域在 [0, pi] 斜体样式 cam_pose self._cameras[hand_realsense].camera.get_model_matrix() # cam2world# 物体到相机的向量 obj_tcp_vec cam_pose[:3, 3] - self.obj_pose.p dist np.linalg.norm(obj_tcp_vec) # 物体位姿的旋转矩阵 obj_rot_mat self.ob…...

【C++算法】65.栈_删除字符中的所有相邻重复项

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 1047. 删除字符串中的所有相邻重复项 题目描述&#xff1a; 解法 利用string模拟栈 元素依次进栈&#xff0c;当进栈元素和栈顶元素一样的时候&#xff0c;就弹出栈顶字符…...