k8s--集群内的pod调用集群外的服务
关于如何让同一个局域网内的Kubernetes服务的Pod访问同一局域网中的电脑上的服务。
可能的解决方案包括使用ClusterIP、NodePort、Headless Service、HostNetwork、ExternalIPs,或者直接使用Pod网络。每种方法都有不同的适用场景,需要逐一分析。
例如,ClusterIP是默认的,只能在集群内部访问,所以可能需要其他方式。NodePort会在每个节点上开放端口,用户可以通过节点的IP访问服务,但需要注意防火墙规则。HostNetwork让Pod共享节点的网络,可以直接访问节点的IP,但可能有安全隐患。ExternalIPs允许服务绑定外部IP,但需要确保IP在集群节点上可用。直接使用Pod网络的话,需要知道Pod的IP,但Pod重启后IP会变,这可能不太稳定。
另外,用户可能需要了解如何配置服务的Endpoints来指向外部服务的IP和端口,这样可以通过Kubernetes的服务发现机制来访问外部服务。这对于需要服务名解析的情况很有用,比如创建一个没有选择器的Service,然后手动定义Endpoints指向外部服务的地址。
还需要考虑网络策略和防火墙的问题,确保Kubernetes集群的节点和外部服务的电脑之间的网络是通的,端口没有被防火墙阻止。如果使用Calico等网络插件,可能需要调整网络策略。
然后,用户可能需要具体的步骤,比如如何创建Service和Endpoints,如何配置ExternalIPs或者HostNetwork。要给出示例的YAML配置,方便用户参考。
另外,用户可能不了解kube-proxy和网络插件的工作原理,是否需要深入解释?可能不需要太深入,但需要说明不同方法背后的原理,比如HostNetwork直接使用宿主机的网络命名空间,ExternalIPs需要由kube-proxy管理。
最后,可能需要总结各个方法的适用场景,帮助用户根据具体需求选择。比如如果外部服务变动频繁,使用Endpoints和Service可能更好;如果只是临时测试,用HostNetwork或NodePort更简单。
总结一下,我需要分步骤解释各种方法,给出配置示例,并提醒需要注意的网络连通性和安全问题。确保用户能够理解并选择适合他们的方案。
要让 Kubernetes 集群中的 Pod 访问同一局域网内的外部服务(例如你的物理机或虚拟机上的服务),可以通过以下几种方法实现。以下是具体步骤和注意事项:
方法 1:通过 Kubernetes Service 的 ExternalName
或手动 Endpoints
将外部服务抽象为 Kubernetes Service,使 Pod 通过 Service 名称访问外部服务。
步骤 1:创建指向外部服务的 Service
# external-service.yaml
apiVersion: v1
kind: Service
metadata:name: external-service
spec:type: ClusterIP # 或 ExternalNameports:- protocol: TCPport: 80 # Service 监听的端口targetPort: 8080 # 外部服务的端口
---
# 如果是手动指定 Endpoints(推荐):
apiVersion: v1
kind: Endpoints
metadata:name: external-service
subsets:- addresses:- ip: 192.168.1.100 # 外部服务的局域网 IPports:- port: 8080 # 外部服务的端口
步骤 2:Pod 通过 Service 名称访问
在 Pod 中通过 external-service
这个 DNS 名称访问:
curl http://external-service:80
方法 2:直接通过局域网 IP 访问
如果外部服务的 IP 是固定的,Pod 可以直接通过局域网 IP 访问(需确保网络策略允许)。
步骤 1:确认 Pod 网络与局域网互通
• 确保 Kubernetes 集群的网络插件(如 Calico、Flannel)允许 Pod 与外部网络通信。
• 检查防火墙规则是否放行流量(尤其是 Node 的防火墙)。
步骤 2:在 Pod 中直接访问外部服务
curl http://192.168.1.100:8080
方法 3:使用 HostNetwork
模式
让 Pod 共享宿主机的网络命名空间,直接使用宿主机的 IP 和端口(慎用,存在安全隐患)。
步骤 1:配置 Pod 使用 HostNetwork
# pod.yaml
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:hostNetwork: true # 共享宿主机网络containers:- name: mycontainerimage: nginx
步骤 2:访问外部服务
Pod 会直接使用宿主机的 IP(即 192.168.1.x
),可以直接访问同一局域网的服务。
方法 4:配置 ExternalIPs
将外部服务的 IP 绑定到 Kubernetes Service,通过 Service 访问。
步骤 1:创建带有 externalIPs
的 Service
# external-ip-service.yaml
apiVersion: v1
kind: Service
metadata:name: external-ip-service
spec:ports:- protocol: TCPport: 80targetPort: 8080externalIPs:- 192.168.1.100 # 外部服务的 IP
步骤 2:通过 Service 的 ExternalIP 访问
在 Pod 中访问 192.168.1.100:80
,流量会被转发到外部服务的 8080
端口。
方法 5:使用 NodePort 暴露外部服务
如果外部服务本身是 Kubernetes 集群外的服务,可以通过 NodePort 将流量转发到外部 IP。
步骤 1:创建 NodePort Service
apiVersion: v1
kind: Service
metadata:name: nodeport-external-service
spec:type: NodePortports:- port: 80targetPort: 8080nodePort: 30000 # 手动指定 NodePort 范围(默认 30000-32767)
步骤 2:通过任意节点的 IP + NodePort 访问
在 Pod 中访问 http://<任意节点IP>:30000
,流量会通过 kube-proxy 转发到外部服务。
关键注意事项
-
网络策略:
• 确保 Kubernetes 节点的防火墙允许 Pod 与外部服务的通信。
• 如果使用网络插件(如 Calico),检查是否配置了允许出站流量的 NetworkPolicy。 -
DNS 解析:
• 如果外部服务有域名,确保 Pod 的 DNS 配置(如/etc/resolv.conf
)能解析该域名。 -
服务发现:
• 推荐使用方法 1(Service + Endpoints),因为可以利用 Kubernetes 的服务发现机制。 -
安全风险:
• 避免在生产环境使用hostNetwork: true
,可能导致端口冲突或安全漏洞。
总结
• 推荐方案:使用方法 1(Service + Endpoints)或方法 4(ExternalIPs),保持 Kubernetes 原生配置。
• 临时测试:使用方法 3(HostNetwork)或直接通过 IP 访问。
根据你的具体场景(如是否需要服务发现、是否允许直接暴露 IP)选择最合适的方案。
异常:
我个人的场景是跑了一个后但服务的pod,但是数据库,redis在我自己的电脑上,在公司我的电脑和集群的电脑是可以直接通信的,所以使用方法1来解决。但是似乎当我后端的pod重启之后,给外部服务创建的endpoint的以下部分就没有了
subsets:- addresses:- ip: 192.168.1.100 # 外部服务的局域网 IPports:- port: 8080 # 外部服务的端口
解决办法
:不要在service中加上selector
首先,用户提到当手动创建Endpoints时,subsets下的地址和端口可能会消失。这可能涉及到几个常见的问题。我需要回忆一下Kubernetes中Service和Endpoints的工作原理。Service通常由标签选择器(selector)自动关联到Pod,生成对应的Endpoints。但当Service没有selector时,用户需要手动创建Endpoints,这正是用户的情况,因为他们要指向外部IP。
- 可能的原因一:
Endpoints的metadata.name是否与Service的名称完全一致
?Kubernetes通过名称来关联Service和Endpoints,如果名称不匹配,Endpoints不会被正确关联,导致Service没有对应的Endpoints,因此subsets可能显示为空或者被系统自动清理。 - 可能的原因二:是否有其他控制器或进程
在修改Endpoints
?例如,某些情况下,如果Service被错误地配置了selector,Kubernetes会尝试自动管理Endpoints,覆盖用户手动创建的配置。用户可能在创建Service时不小心添加了selector,导致系统自动生成Endpoints,覆盖了手动配置。 - 可能的原因三:
Endpoints的配置
是否正确?比如缩进错误、端口定义不正确等YAML格式问题,可能导致Endpoints对象虽然被创建,但无法被正确识别,从而被系统忽略或删除。 - 可能的原因四:是否存在其
他资源冲突
?例如,同名的Endpoints被其他资源管理,或者用户误删了Endpoints对象。
在 Kubernetes 中,当通过 Service + Endpoints 方式将外部服务引入集群时,如果 Endpoints
中的 subsets
配置(如 IP 和端口)自动消失,通常是由以下原因导致的:
1. Service 意外配置了 Selector
如果 Service 中错误地配置了 selector
字段,Kubernetes 会认为该 Service 需要自动关联 Pod,并尝试根据 selector
自动生成和管理 Endpoints
。此时手动创建的 Endpoints
会被系统覆盖,导致 subsets
消失。
验证方法:
kubectl describe service <service-name>
检查输出中是否有 Selector
字段。如果存在类似以下内容,说明配置错误:
Selector: app=my-app # 非空表示 Service 关联了 Pod
修复方法:
确保 Service 没有 selector
字段:
apiVersion: v1
kind: Service
metadata:name: external-postgres
spec:ports:- protocol: TCPport: 5433targetPort: 5433# 注意:此处不能有 selector!
2. Endpoints 名称与 Service 名称不匹配
Kubernetes 要求 Endpoints
的 metadata.name
必须与 Service 的名称完全一致,否则两者无法关联,导致手动创建的 Endpoints
失效。
验证方法:
kubectl get endpoints <endpoints-name> -o yaml
检查 metadata.name
是否与 Service 名称一致。
修复方法:
确保 Endpoints
的 metadata.name
与 Service 名称一致:
apiVersion: v1
kind: Endpoints
metadata:name: external-postgres # 必须与 Service 名称相同
subsets:- addresses:- ip: 10.210.200.77ports:- port: 5433
3. Endpoints YAML 格式错误
Endpoints
的 YAML 格式必须严格符合规范。常见的错误包括:
• 错误地在 Endpoints
中添加了 spec
字段(实际不需要)。
• subsets
的缩进或层级错误。
错误的配置示例:
apiVersion: v1
kind: Endpoints
metadata:name: external-postgres
spec: # 错误!Endpoints 不需要 spec 字段subsets:- addresses:- ip: 10.210.200.77ports:- port: 5433
正确的配置:
apiVersion: v1
kind: Endpoints
metadata:name: external-postgres
subsets: # 直接定义 subsets,无需 spec- addresses:- ip: 10.210.200.77ports:- port: 5433
4. 其他控制器或工具干扰
某些 Kubernetes 组件或第三方工具(如服务网格、监控组件)可能会监听并修改 Endpoints
。例如:
• Istio:如果启用了自动 Sidecar 注入,可能会修改 Endpoints
。
• Kubernetes 事件控制器:某些异常事件可能导致 Endpoints
被重置。
验证方法:
检查 Endpoints
的变更历史:
kubectl get endpoints <endpoints-name> -o yaml --watch
修复方法:
• 如果使用了服务网格,检查其文档是否需要特殊配置。
• 通过 kubectl edit endpoints <name>
手动修复 subsets
,观察是否再次被修改。
5. 网络策略或防火墙拦截
虽然与 Endpoints
配置无关,但如果 Kubernetes 节点无法访问外部服务的 IP 和端口,某些网络插件可能会错误地清理 Endpoints
(极少见,但需排除)。
验证方法:
在 Kubernetes 节点上测试外部服务的连通性:
# 在节点上执行
nc -zv 10.210.200.77 5433
nc -zv 10.210.200.77 6379
操作步骤总结
-
检查 Service 是否配置了 Selector:
kubectl describe service external-postgres
-
检查 Endpoints 名称和格式:
kubectl get endpoints external-postgres -o yaml
-
重新应用正确的配置:
kubectl apply -f external-postgres.yaml
-
监控 Endpoints 变更:
kubectl get endpoints external-postgres -w
最终解决方案
如果以上步骤仍无法解决,提供一个完整的正确配置模板:
Service 定义(external-postgres.yaml):
apiVersion: v1
kind: Service
metadata:name: external-postgres
spec:ports:- protocol: TCPport: 5433targetPort: 5433
Endpoints 定义(external-postgres-endpoints.yaml):
apiVersion: v1
kind: Endpoints
metadata:name: external-postgres # 必须与 Service 同名
subsets:- addresses:- ip: 10.210.200.77 # 外部服务 IPports:- port: 5433 # 外部服务端口
应用配置:
kubectl apply -f external-postgres.yaml
kubectl apply -f external-postgres-endpoints.yaml
关键验证命令
• 查看 Service 和 Endpoints 是否关联成功:
kubectl get svc,ep -l <service-name>
• 查看 Endpoints 详细信息:
kubectl get endpoints external-postgres -o yaml
通过以上步骤,Endpoints
中的 subsets
应能正确持久化,不会自动消失。
相关文章:
k8s--集群内的pod调用集群外的服务
关于如何让同一个局域网内的Kubernetes服务的Pod访问同一局域网中的电脑上的服务。 可能的解决方案包括使用ClusterIP、NodePort、Headless Service、HostNetwork、ExternalIPs,或者直接使用Pod网络。每种方法都有不同的适用场景,需要逐一分析。 例如&…...
高性能边缘计算网关-高算力web组态PLC网关
高性能EG8200Pro边缘计算算力网关-超强处理能力 样机申请测试:免费测试超30天(https://www.iotrouter.com/prototype/) 产品主要特点和特色功能 设备概览与连接能力 设备型号:EG8200P。主要特点: 支持多种工业协议&am…...
计算机视觉总结
以下是针对上述问题的详细解答,并结合代码示例进行说明: 1. 改进YOLOv5人脸检测模块,复杂光照场景准确率从98.2%提升至99.5% 优化具体过程: 光照补偿:在数据预处理阶段,采用自适应光照补偿算法,对图像进行实时增强,以减少光照变化对人脸检测的影响。数据增强:在训练…...
【Golang】defer与recover的组合使用
在Go语言中,defer和recover是两个关键特性,通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例: 1. defer 的应用场景 defer用于延迟执行函数调用,确保在函数退出前执行特定操作。主要用途包括ÿ…...
Beyond Compare 4注册激活方法
Beyond Compare 4 注册码 --- BEGIN LICENSE KEY --- H1bJTd2SauPv5Garuaq0Ig43uqq5NJOEw94wxdZTpU-pFB9GmyPk677gJ vC1Ro6sbAvKR4pVwtxdCfuoZDb6hJ5bVQKqlfihJfSYZt-xVrVU270Ja hFbqTmYskatMTgPyjvv99CF2Te8ecYs2SPxyZAF0YwOCNOWmsyqN5y9t q2Kw2pjoiDs5gIH-uw5U49JzOB6otS7kT…...
[C++游戏开发基础]:构造函数浅析,8000+字长文
构造函数 构造函数是一种特殊的成员函数,在创建非聚合类类型对象后会自动被调用。当定义一个非聚合类类型对象时,编译器会检查是否能找到一个可以访问的构造函数,该构造函数与调用者提供的初始化值(如果有的情况下)相匹配。 如果找到一个可访问的匹配构造函数,将为…...
【Go】切片
知识点关键概念切片声明var slice []int初始化切片slice : []int{1,2,3}make() 创建切片make([]int, len, cap)获取长度和容量len(slice), cap(slice)追加元素slice append(slice, value)切片截取slice[start:end](返回子切片)拷贝切片copy(dest, src)&…...
MySQL 设置允许远程连接完整指南:安全与效率并重
一、为什么需要远程连接MySQL? 在分布式系统架构中,应用程序与数据库往往部署在不同服务器。例如: Web服务器(如NginxPHP)需要连接独立的MySQL数据库数据分析师通过BI工具直连生产库多服务器集群间的数据同步 但直接…...
Cursor IDE 入门指南
什么是 Cursor? Cursor 是一款集成了 AI 功能的现代代码编辑器,基于 VSCode 开发,专为提高开发效率而设计。它内置强大的 AI 助手功能,能够理解代码、生成代码、解决问题,帮助开发者更快、更智能地完成编程任务。 基础功能 1.…...
32.[前端开发-JavaScript基础]Day09-元素操作-window滚动-事件处理-事件委托
JavasScript事件处理 1 认识事件处理 认识事件(Event) 常见的事件列表 认识事件流 2 事件冒泡捕获 事件冒泡和事件捕获 事件捕获和冒泡的过程 3 事件对象event 事件对象 event常见的属性和方法 事件处理中的this 4 EventTarget使用 EventTarget类 5 事件委托模式 事件委托&am…...
【工具变量】中国各地级市是否属于“信息惠民国家试点城市”匹配数据(2010-2024年)
数据来源:国家等12部门联合发布的《关于加快实施信息惠民工程有关工作的通知》 数据说明:内含原始文件和匹配结果,当试点城市在2014年及以后,赋值为1;试点城市在2014年之前或该城市从未实施信息惠民试点工程&#x…...
windows安装配置FFmpeg教程
1.先访问官网:https://www.gyan.dev/ffmpeg/builds/ 2.选择安装包Windows builds from gyan.dev 3. 下滑找到release bulids部分,选择ffmpeg-7.0.2-essentials_build.zip 4. 然后解压将bin目录添加path系统变量:\ffmpeg-7.0.2-essentials_bui…...
Wispr Flow,AI语言转文字工具
Wispr Flow是什么 Wispr Flow 是AI语音转文本工具,基于先进的AI技术,帮助用户在任何应用程序中实现快速语音转文字。 Wispr Flow支持100多种语言,具备自动编辑、上下文感知和低音量识别等功能,大幅提升写作和沟通效率。Wispr Fl…...
风暴潮、潮汐潮流模拟:ROMS模型如何精准预测海洋现象?
海洋数值模拟的崛起与 ROMS 的关键角色 🌊在海洋科学的浪潮中,海洋数值模拟正以迅猛之势崛起,成为科研与实际应用领域不可或缺的利器。ROMS(Regional Ocean Modeling System)作为其中的佼佼者,凭借其高效、…...
【Rust】集合的使用——Rust语言基础16
文章目录 1. 前言2. Vector2.1. 构建一个 vector2.2. 获取 vector 中的元素2.3. 遍历 vector2.4. 使用枚举来储存多种类型 3. String3.1. 新建字符串3.2. 更新字符串3.3. 字符串的内部结构3.3.1. 字符串如何访问内部元素?3.3.2. 字节、标量值和字形簇 3.4. 字符串 s…...
Kafka集成Debezium监听postgresql变更
下载postgres的插件:https://debezium.io/documentation/reference/2.7/install.html 2.7版本支持postgresql12数据库。 debezium-connector-postgres-2.7.4.Final-plugin.tar.gz 上传插件并解压 mkdir /usr/local/kafka/kafka_2.12-2.2.1/connector cd /usr/local…...
自动学习和优化过程,实现更加精准的预测和决策的智慧交通开源了
智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过高效的实时视…...
第2.2节 Android Jacoco插件覆盖率采集
JaCoCo(Java Code Coverage)是一款开源的代码覆盖率分析工具,适用于Java和Android项目。它通过插桩技术统计测试过程中代码的执行情况,生成可视化报告,帮助开发者评估测试用例的有效性。在github上开源的项目ÿ…...
从零开始:使用 Cython + JNI 在 Android 上运行 Python 算法
1. 引言 在 Android 设备上运行 Python 代码通常面临性能、兼容性和封装等挑战。尤其是当你希望在 Android 应用中使用 Python 编写的计算密集型算法时,直接运行 Python 代码可能导致较高的 CPU 占用和较差的性能。为了解决这个问题,我们可以使用 Cytho…...
开源软件许可证冲突的原因和解决方法
1、什么是开源许可证以及许可证冲突产生的问题 开源软件许可证是一种法律文件,它规定了软件用户、分发者和修改者使用、复制、修改和分发开源软件的权利和义务。开源许可证是由软件的版权所有者(通常是开发者或开发团队)发布的,它…...
stratis,容器podman
一、stratis 1.stratis可以实现动态的在线扩容,lvm虽然也可以实现在线扩容,但是是需要人为的手动扩容。 2.stratis不需要手动格式化,自动会创建文件系统(默认是xfs) 1. 安装stratis软件包 yum list | grep stratis…...
解决用three.js展示n个叠加的stl模型文件错位的问题
加载stl时可以明显看到下面有一部分模型是错位的。 将stl文件格式转化为glb 使用免费将 STL 转换为 GLB - ImageToStl 模型就没有错位了 代码如下 <template><div ref"threeContainer" class"three-container"></div></template&…...
从零开始实现 C++ TinyWebServer 数据库连接池 SqlConnectPool详解
文章目录 数据库连接池是什么?Web Server 中为什么需要数据库连接池?SqlConnectPool 成员变量实现 Init() 函数实现 ClosePool() 函数SqlConnectRAII 类SqlConnectPool 代码SqlConnectPool 测试 从零开始实现 C TinyWebServer 项目总览 项目源码 数据库连…...
利用ffmpeg库实现音频AAC编解码
AAC(Advanced Audio Coding)是一种音频编码技术,出现于1997年,基于MPEG-2的音频编码技术。AAC具有高效的数据压缩能力和较高的音质,适用于各种音频应用场景。例如,在智能设备中,AAC技术被广泛…...
Vue + CSS实现渐变栅格进度条
进度条作为可视化大屏系统中展示数据状态的关键元素,其视觉效果直接影响用户的使用体验,而传统的进度条往往呈现出固定的样式,缺乏视觉吸引力。在这种场景下,一种基于Vue和CSS实现渐变栅格进度条的方法应运而生,该方法…...
算法模型从入门到起飞系列——背包问题(探索最大价值的掘金之旅)
文章目录 前言一、背包问题溯源(动态规划)1.1 动态规划的概念1.2 动态规划的基本步骤1.3 动态规划的实际应用 二、背包问题2.1 背包问题衍生2.2 0-1背包2.2.1 0-1背包描述2.2.2 0-1背包图解2.2.3 0-1背包代码刨析 2.3 完全背包2.3.1 完全背包描述2.3.2 完…...
蓝桥杯—迷宫(bfs)
一.题目 分析:最短路径问题,给定一个迷宫,从左上角走到右下角,要求路径最短,并且要求字典序最小,也就是按照D,L,R,U,的搜索顺序去搜索,否则路径不是唯一的&am…...
【Android】安卓 Java下载ZIP文件并解压(笔记)
写在前面的话 在这篇文章中,我们将详细讲解如何在 Android 中通过 Java 下载 ZIP 文件并解压,同时处理下载进度、错误处理以及优化方案。 以下正文 1.权限配置 在 AndroidManifest.xml 中,我们需要添加相应的权限来确保应用能够访问网络和设…...
清晰易懂的 PHP 安装与配置教程
初学者也能看懂的 PHP 安装与配置教程 本教程将手把手教你如何在 Windows 系统上安装 PHP,并配置 Composer(PHP 的依赖管理工具)的缓存位置,即使你是零基础小白,也能轻松完成! 一、准备工作 操作系统&…...
Ceph集群2025(Squid版)快速对接K8S cephFS文件存储
ceph的块存储太简单了。所以不做演示 查看集群 创建一个 CephFS 文件系统 # ceph fs volume create cephfs01 需要创建一个子卷# ceph fs subvolume create cephfs01 my-subvol -----------------#以下全部自动创建好 # ceph fs ls name: cephfs01, metadata pool: c…...
Linux进程控制(四)之进程程序替换
文章目录 进程程序替换单进程版程序替换替换原理多进程版程序替换替换函数函数解释小知识 命名理解 进程程序替换 如果要让子进程执行与父进程完全不同的代码,就要进行进程程序替换。 单进程版程序替换 执行一个可执行文件 makefile mycommand:mycommand.cgcc -…...
python-selenium 爬虫 由易到难
本质 python第三方库 selenium 空值 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动(不容易遇到版本或者兼容性的问题) 驱动下载网址:链接: link 1、实战1 (1)安装 selenium 库 pip install selenium&#…...
希尔排序
希尔排序是一种改进的插入排序算法,它通过将原始数据分成多个子序列来改善插入排序的性能,每个子序列的元素间隔为 d(增量)。随着算法的进行,d 逐渐减小,最终减为 1,此时整个序列就被排序好了。…...
Pydantic Mixin:构建可组合的验证系统体系
title: Pydantic Mixin:构建可组合的验证系统体系 date: 2025/3/22 updated: 2025/3/22 author: cmdragon excerpt: Pydantic的Mixin模式通过继承组合实现校验逻辑复用,遵循以Mixin后缀命名、不定义初始化方法等设计原则。支持基础校验模块化封装与多策略组合,如电话号码…...
策略模式 vs. 工厂模式:对比与分析
相同点 解耦思想 两者都通过接口/抽象类将实现与调用方解耦,降低模块间的直接依赖。 符合开闭原则 新增策略或产品时,只需扩展新类,无需修改已有代码。 封装变化 策略模式封装算法的变化,工厂模式封装对象创建的变化。 不同…...
RK3568 I2C底层驱动详解
前提须知:I2C协议不懂的话就去看之前的内容吧,这个文章需要读者一定的基础。 RK3568 I2C 简介 RK3568 支持 6 个独立 I2C: I2C0、I2C1、I2C2、I2C3、I2C4、I2C5。I2C 控制器支持以下特性: ① 兼容 i2c 总线 ② AMBA APB 从接口 ③ 支持 I2C 总线主模式…...
【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证
背景: vllm推理框架启动模型不具备api-key验证。需借助fastapi可以实现该功能 代码实现: rom fastapi import FastAPI, Header, HTTPException, Request,Response import httpx import logging# 创建 FastAPI 应用 app FastAPI() logging.basicConfig(…...
hadoop-HDFS操作
1. 使用的是hadoop的用户登录到系统,那么 cd ~ 是跳转到/home/hadoop下。 2. 在操作hdfs时,需要在hadoop用户下的/usr/local/hadoop,此时是在根目录下。 cd /usr/local/hadoop或者cd / cd usr/local/hadoop 3. 回到Linux的操作目录 我们把…...
Mysql 安装教程和Workbench的安装教程以及workbench的菜单栏汉化
Mysql 安装教程和Workbench的安装教程 详细请参考我的文件 Mysql 安装教程和Workbench的安装教程 或者下载我的资源Mysql 安装教程和Workbench的安装教程 汉化菜单 英文版菜单文件:下载链接 汉化版菜单文件:下载链接 默认情况下,安…...
失物招领|校园失物招领系统|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)
校园失物招领系统目录 目录 基于Springboot的校园失物招领系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、 管理员功能实现 (1) 失物招领管理 (2) 寻物启事管理 (3) 公告管理 (4) 公告类型管理 2、用户功能实现 (1) 失物招领 (2) 寻物启事 (3) 公告 …...
一条不太简单的TEX学习之路
目录 rule raisebox \includegraphics newenviro 、\vspace \stretch \setlength 解释: 总结: 、\linespread newcommand \par 小四 \small simple 、mutiput画网格 解释: 图案解释: xetex pdelatex etc index 报…...
如何为AI开发选择合适的服务器?
选择适合的服务器可以为您的AI项目带来更高的效率,确保最佳性能、可扩展性和可靠性,从而实现无缝的开发与部署。 选择适合的AI开发服务器可能并不容易。您需要一台能够处理大量计算和大型数据集的服务器,同时它还需要符合您的预算并易于管理…...
doris:审计日志
Doris 提供了对于数据库操作的审计能力,可以记录用户对数据库的登陆、查询、修改操作。在 Doris 中,可以直接通过内置系统表查询审计日志,也可以直接查看 Doris 的审计日志文件。 开启审计日志 通过全局变量 enable_audit_plugin 可以随时…...
CSS中的transition与渐变
目录 一、CSS transition 1. 核心属性 简写语法 2. 子属性详解 2.1 transition-property 2.2 transition-duration 2.3 transition-timing-function 2.4 transition-delay 3. 使用场景示例 3.1 悬停效果(Hover) 3.2 展开/收起动画 3.3 动态移…...
AI + 医疗 Qwq大模型离线本地应用
通义千问Qwq-32b-FP16可用于社区医院、乡镇卫生院、诊所等小型医疗机构,替代专业合理用药系统,作为药品知识库,实现以下功能: 药品信息智能查询:检索药品的详细说明书、适应症、禁忌症、不良反应及药物相互作用等关键信…...
大数据环境搭建
目录 一:虚拟机:VirtualBox 二:Shell工具:MobaXterm 三:安装脚本 四:JDK和Hadoop 4.1:安装 4.2:启动 4.3:Hadoop可视化访问 4.4:关机 一:虚拟机:VirtualBox Virt…...
七天免登录 为什么不能用seesion,客户端的http请求自动携带cookei的机制(比较重要)涉及HTTP规范
如果是七天免登录,和session肯定没关系,因为session不能持久化,主要是客户端一旦关闭,seesion就失效了/// 所以必须是能持久化的,这就清晰了,要莫在的服务器保存,要摸在客户端设置 cook机制 1. 使用Cookie实现七天免登录 前端(登…...
从PGC到AIGC:海螺AI多模态内容生成系统的技术革命
一、内容生产的范式迁移:从PGC到AIGC的进化之路 在数字内容生产的历史长河中,人类经历了三次重大范式转变:专业生成内容(PGC)的工业化生产、用户生成内容(UGC)的全民创作浪潮,以及当…...
常考计算机操作系统面试习题(三上)
目录 1. 为何要引入与设备的无关性?如何实现设备的独立性? 2. 页面置换先进先出算法 3. 页面置换先进先出算法,4个页框 4. 进程优先级调度算法 5. 短作业优先调度策略 6. 平均内存访问时间计算 7. 页式存储和段式存储的物理地址计算 …...
数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码
数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码 #include <stdio.h> #include <stdlib.h>typedef int ElemType;typedef struct node{ElemType data;struct node *next, *prev; }Node;//初化链表…...