K8S中ingress详解
Ingress介绍
-
Kubernetes 集群中,服务(Service)是一种抽象,它定义了一种访问 Pod 的方式,无论这些 Pod 如何变化,服务都保持不变。服务可以被映射到一个静态的 IP 地址(ClusterIP)、一个 NodePort(在集群的每个节点上的特定端口)、一个 LoadBalancer(通过云服务提供商的负载均衡器)或一个外部 IP。
-
Service的两种服务暴露方式,NodePort 和 LoadBalancer,确存在一些局限性:
-
NodePort:当一个服务被配置为 NodePort 类型时,它会在集群的所有节点上的一个静态端口上暴露服务。这种方式的缺点是,如果集群中有大量的服务,那么就需要占用大量的端口,而这些端口资源是有限的。
-
LoadBalancer:这种方式通过云服务提供商的负载均衡器来暴露服务。虽然它解决了 NodePort 方式中端口资源有限的问题,但是每个服务都需要一个单独的负载均衡器,这不仅增加了成本,而且管理起来也相对复杂。
-
-
为了解决这些问题,Kubernetes 引入了 Ingress 资源对象:
-
Ingress 是一种 API 对象,它管理外部访问到集群内服务的 HTTP 和 HTTPS 路由。它提供了一种规则,允许你将外部 HTTP/HTTPS 路由到集群内的多个服务。
-
Ingress 可以提供单一的 IP 地址,通过不同的 URL 路径或不同的端口来路由到不同的服务。
-
它只需要一个 NodePort 或者一个 LoadBalancer,就可以将多个服务暴露给外部网络,这样做既节省了资源,又简化了配置。
-
Ingress 还支持 SSL/TLS 终止,可以为不同的服务配置 SSL 证书。
-
它允许更复杂的路由规则,比如基于路径、主机名或 HTTP 头部的路由。
-
-
实际上,Ingress相当于一个7层的负载均衡器,是kubernetes对反向代理的一个抽象,它的工作原理类似于Nginx,可以理解成在Ingress里建立诸多映射规则,Ingress Controller通过监听这些配置规则并转化成Nginx的反向代理配置 , 然后对外部提供服务。在这里有两个核心概念:
-
ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则
-
ingress controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等等
-
-
Ingress(以Nginx为例)的工作原理:
-
定义路由规则:用户通过 Kubernetes API 创建 Ingress 规则,指定域名与集群内服务的映射关系。
-
感知规则变化:Ingress 控制器(如基于 Nginx)实时监控 Kubernetes API,以便发现 Ingress 规则的更新。
-
生成配置:一旦检测到变化,Ingress 控制器自动生成相应的 Nginx 配置,以实现定义的路由规则。
-
更新 Nginx 配置:新生成的 Nginx 配置被应用到运行中的 Nginx 实例,无需重启服务即可动态更新路由规则。
-
流量转发:Nginx 作为反向代理,根据更新的配置,将外部请求转发到集群内正确的服务。
-
SSL/TLS 终止(可选):如果配置了 SSL/TLS,Nginx 还可以在转发前终止加密连接,提高安全性和效率。
-
Ingress安装部署
[root@k8s-master ~]# vi deploy.yaml
[root@k8s-master ~]# kubectl label node k8s-node1 node-role=ingress
node/k8s-node1 labeled
[root@k8s-master ~]# kubectl label node k8s-node2 node-role=ingress
node/k8s-node2 labeled
[root@k8s-master ~]# kubectl apply -f deploy.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
daemonset.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
[root@k8s-master ~]# kubectl get pod
No resources found in default namespace.
[root@k8s-master ~]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-sgcg6 0/1 ContainerCreating 0 21s
ingress-nginx-admission-patch-2kdw2 0/1 CrashLoopBackOff 1 21s
ingress-nginx-controller-55776 0/1 ContainerCreating 0 21s
ingress-nginx-controller-vm965 0/1 ContainerCreating 0 21s
[root@k8s-master ~]# kubectl get pod -n ingress-nginx -w
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-sgcg6 0/1 ContainerCreating 0 24s
ingress-nginx-admission-patch-2kdw2 0/1 CrashLoopBackOff 1 24s
ingress-nginx-controller-55776 0/1 ContainerCreating 0 24s
ingress-nginx-controller-vm965 0/1 ContainerCreating 0 24s
ingress-nginx-admission-create-sgcg6 0/1 Completed 0 25s
ingress-nginx-admission-create-sgcg6 0/1 Completed 0 25s
ingress-nginx-admission-patch-2kdw2 1/1 Running 2 28s
ingress-nginx-admission-patch-2kdw2 0/1 Completed 2 29s
ingress-nginx-admission-patch-2kdw2 0/1 Completed 2 29s
ingress-nginx-controller-55776 0/1 Running 0 87s
ingress-nginx-controller-vm965 0/1 Running 0 90s
^C[root@k8s-master ~]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-sgcg6 0/1 Completed 0 95s
ingress-nginx-admission-patch-2kdw2 0/1 Completed 2 95s
ingress-nginx-controller-55776 0/1 Running 0 95s
ingress-nginx-controller-vm965 0/1 Running 0 95s
[root@k8s-master ~]# kubectl get pod -n ingress-nginx -w
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-sgcg6 0/1 Completed 0 105s
ingress-nginx-admission-patch-2kdw2 0/1 Completed 2 105s
ingress-nginx-controller-55776 1/1 Running 0 105s
ingress-nginx-controller-vm965 1/1 Running 0 105s
Ingress的HTTP代理
-
准备service和pod为了后面的实验比较方便,创建如下图所示的模型
[root@k8s-master ~]# vim tomcat-nginx.yaml
[root@k8s-master ~]# kubectl create ns test
namespace/test created
[root@k8s-master ~]# kubectl apply -f tomcat-nginx.yaml
deployment.apps/tomcat-deployment created
service/tomcat-service created[root@k8s-master ~]# kubectl get pod -n test -w
NAME READY STATUS RESTARTS AGE
tomcat-deployment-7db86c59b7-7zbnc 0/1 ContainerCreating 0 50s
tomcat-deployment-7db86c59b7-r5xsn 0/1 ContainerCreating 0 50s
tomcat-deployment-7db86c59b7-sphwk 0/1 ImagePullBackOff 0 50s
tomcat-deployment-7db86c59b7-sphwk 0/1 ErrImagePull 0 70s
tomcat-deployment-7db86c59b7-sphwk 0/1 ImagePullBackOff 0 82s
tomcat-deployment-7db86c59b7-r5xsn 1/1 Running 0 4m29s
tomcat-deployment-7db86c59b7-7zbnc 1/1 Running 0 4m29s
tomcat-deployment-7db86c59b7-sphwk 1/1 Running 0 5m7s
^C[root@k8s-master ~]# kubectl get deploy,pod -n test
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/tomcat-deployment 3/3 3 3 6m52sNAME READY STATUS RESTARTS AGE
pod/tomcat-deployment-7db86c59b7-7zbnc 1/1 Running 0 6m52s
pod/tomcat-deployment-7db86c59b7-r5xsn 1/1 Running 0 6m52s
pod/tomcat-deployment-7db86c59b7-sphwk 1/1 Running 0 6m52s
-
Ingress配置
[root@k8s-master ~]# cat ingress-dep_lb.yaml ---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-ingressnamespace: test
spec:ingressClassName: nginxrules:- host: www.test.comhttp:paths:- path: /pathType: Prefixbackend:service:name: svc-lbport:number: 80- host: tomcat.ctl.comhttp:paths:- path: /pathType: Prefixbackend:service:name: tomcat-serviceport:number: 80[root@k8s-master ~]# kubectl apply -f ingress-dep_lb.yaml
ingress.networking.k8s.io/nginx-ingress created
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-service LoadBalancer 10.96.166.18 <pending> 80:32593/TCP 10mNAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/nginx-ingress nginx www.test.com,tomcat.ctl.com 80 5s
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-service LoadBalancer 10.96.166.18 <pending> 80:32593/TCP 10mNAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/nginx-ingress nginx www.test.com,tomcat.ctl.com 192.168.58.232,192.168.58.233 80 42s[root@k8s-master ~]# kubectl get deploy,pod -n test
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/tomcat-deployment 3/3 3 3 14mNAME READY STATUS RESTARTS AGE
pod/tomcat-deployment-7db86c59b7-7zbnc 1/1 Running 0 14m
pod/tomcat-deployment-7db86c59b7-r5xsn 1/1 Running 0 14m
pod/tomcat-deployment-7db86c59b7-sphwk 1/1 Running 0 14m
[root@k8s-master ~]# kubectl get deploy,pod -n test -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/tomcat-deployment 3/3 3 3 14m tomcat tomcat:8.5-jre10-slim app=tomcat-podNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/tomcat-deployment-7db86c59b7-7zbnc 1/1 Running 0 14m 10.244.36.73 k8s-node1 <none> <none>
pod/tomcat-deployment-7db86c59b7-r5xsn 1/1 Running 0 14m 10.244.36.72 k8s-node1 <none> <none>
pod/tomcat-deployment-7db86c59b7-sphwk 1/1 Running 0 14m 10.244.169.131 k8s-node2 <none> <none>
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-service LoadBalancer 10.96.166.18 <pending> 80:32593/TCP 14mNAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/nginx-ingress nginx www.test.com,tomcat.ctl.com 192.168.58.232,192.168.58.233 80 4m34s
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.58.231 k8s-master
192.168.58.232 k8s-node1
192.168.58.233 k8s-node2
192.168.58.232 www.test.com
192.168.58.233 tomcat.ctl.com
Ingress的HTTPS代理
-
创建证书和密钥
[root@k8s-master ~]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=itopenlab.com"
Generating a 2048 bit RSA private key
.................................................................+++
.....+++
writing new private key to 'tls.key'
-----
[root@k8s-master ~]# kubectl create secret tls tls-secret --key tls.key --cert tls.crt
secret/tls-secret created
-
创建ingress-https.yaml
[root@k8s-master ~]# vim ingress-https.yaml
[root@k8s-master ~]# kubectl apply -f ingress-https.yaml
ingress.networking.k8s.io/ingress-https created
[root@k8s-master ~]# kubectl get ing ingress-https -n test
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-https <none> nginx.ctl.com,tomcat.ctl.com 80, 443 8s
[root@k8s-master ~]# kubectl describe ing ingress-https -n test
Name: ingress-https
Namespace: test
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:tls-secret terminates nginx.ctl.com,tomcat.ctl.com
Rules:Host Path Backends---- ---- --------nginx.ctl.com / nginx-service:80 (<error: endpoints "nginx-service" not found>)tomcat.ctl.com / tomcat-service:8080 (10.244.169.131:8080,10.244.36.72:8080,10.244.36.73:8080)
Annotations: <none>
Events: <none>
[root@k8s-master ~]# cat ingress-https.yaml apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-httpsnamespace: test
spec:tls:- hosts:- nginx.ctl.com- tomcat.ctl.comsecretName: tls-secret # 指定秘钥rules:- host: nginx.ctl.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-serviceport:number: 80- host: tomcat.ctl.comhttp:paths:- path: /pathType: Prefixbackend:service:name: tomcat-serviceport:number: 8080
[root@k8s-master ~]# kubectl get ing ingress-https -n test -o wide
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-https <none> nginx.ctl.com,tomcat.ctl.com 80, 443 105s
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-service LoadBalancer 10.96.166.18 <pending> 80:32593/TCP 36mNAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/ingress-https <none> nginx.ctl.com,tomcat.ctl.com 80, 443 2m1s
ingress.networking.k8s.io/nginx-ingress nginx www.test.com,tomcat.ctl.com 192.168.58.232,192.168.58.233 80 26m
[root@k8s-master ~]# curl https://nginx.ctl.com
^C
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-service LoadBalancer 10.96.166.18 <pending> 80:32593/TCP 37mNAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/ingress-https <none> nginx.ctl.com,tomcat.ctl.com 80, 443 3m37s
ingress.networking.k8s.io/nginx-ingress nginx www.test.com,tomcat.ctl.com 192.168.58.232,192.168.58.233 80 27m
相关文章:

K8S中ingress详解
Ingress介绍 Kubernetes 集群中,服务(Service)是一种抽象,它定义了一种访问 Pod 的方式,无论这些 Pod 如何变化,服务都保持不变。服务可以被映射到一个静态的 IP 地址(ClusterIP)、一…...

SpringBoot打包为JAR包或WAR 包,这两种打包方式在运行时端口将如何采用?又有什么不同?这篇文章将给你解惑
你们好,我是金金金。 前提 SpringBoot打包方式:不是jar就是war包 场景 写这篇文章也是我遇到一个很不理解的点,所以就去研究了一下 场景如下: 这是后端生产配置文件给项目设置的端口,然后我前端写的url是:我就很纳闷,前端写了域名以及后端服务上下文路径,咋没写端口呢,…...

zabbix6.0安装及常用监控配置
文章目录 部署zabbix-serverzabbix监控节点部署解决zabbix中文乱码创建主机组创建模版配置主机与模版关联 监控boot分区监控网卡流量出网卡流量监控进入和出的总流量监控内存监控服务器端口用户自定应监控key值 (监控mysql查询数量)zabbix触发器监控cpu监控入网卡流量 邮件告警…...

SQL-leetcode—1179. 重新格式化部门表
1179. 重新格式化部门表 表 Department: ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中,(id, month) 是表的联合主键。 这个表格有关…...

JavaWeb 学习笔记 XML 和 Json 篇 | 020
今日推荐语 愿你遇见好天气,愿你的征途铺满了星星——圣埃克苏佩里 日期 学习内容 打卡编号2025年01月23日JavaWeb笔记 XML 和 Json 篇020 前言 哈喽,我是菜鸟阿康。 以下是我的学习笔记,既做打卡也做分享,希望对你也有所帮助…...
在Raspbian上,如何获取树莓派的CPU当前频率
本文不用汇编实现,因为我是要用在 Go 里的,Go 并不支持内联汇编,要用汇编比较麻烦。而且项目并不是很在意性能,所以直接用命令获取内核准备好的。 在Raspbian上,CPU 信息存放在/sys/devices/system/cpu/中,…...
网络打印机的搜索与连接(一)
介绍 网络打印机就是可以通过网络连接上的打印机,这类打印机分2种:自身具有互联网接入功能可以分配IP的打印机我们称为网络打印机、另外一种就是被某台电脑连接上去后通过共享的方式共享到网络里面的我们称为共享打印机。现在还有一种可以通过互联网连接…...

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统
单纯仅靠LLM会产生误导性的 “幻觉”,训练数据会过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generati…...

【自然语言处理(NLP)】介绍、发展史
文章目录 介绍发展史1. 规则驱动时期(20世纪50年代-80年代)技术特点标志性成果 2. 统计方法兴起(1990年代-2000年代)技术特点标志性成果 3. 神经网络复兴(2010年代初至今)技术特点标志性成果 4. 集成与应用…...

1.CSS的三大特性
css有三个非常重要的三个特性:层叠性、继承性、优先级 1.1 层叠性 想通选择器给设置想听的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要是解决样式冲突的问题。 <!DOCTYPE html> <html lang"en&…...

【分布式日志篇】从工具选型到实战部署:全面解析日志采集与管理路径
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

基于springcloud汽车信息分析与可视化系统
基于Spring Cloud的汽车信息分析与可视化系统是一款旨在整合、分析汽车相关数据并以直观可视化方式呈现的应用系统。 一、系统架构 该系统基于先进的Spring Cloud架构构建,充分利用其分布式、微服务特性,确保系统具备高可用性、可扩展性和灵活性。Spri…...

TOGAF之架构标准规范-信息系统架构 | 数据架构
TOGAF是工业级的企业架构标准规范,信息系统架构阶段是由数据架构阶段以及应用架构阶段构成,本文主要描述信息系统架构阶段中的数据架构阶段。 如上所示,信息系统架构(Information Systems Architectures)在TOGAF标准规…...

Databend x 沉浸式翻译 | 基于 Databend Cloud 构建高效低成本的业务数据分析体系
「沉浸式翻译」是一个非常流行的双语对照网页翻译扩展工具,用户可以用它来即时翻译外文网页、PDF 文档、ePub 电子书、字幕等。它不仅可以实现原文加译文实时双语对照显示,还支持 Google、OpenAI、DeepL、微软、Gemini、Claude 等数十家翻译平台服务的自…...
cuda的并行运算介绍
cuda是如何使用GPU并行运算的: 以一个函数为例: duplicateWithKeys << <(P 255) / 256, 256 >> > (P,geomState.means2D,geomState.depths,geomState.point_offsets,binningState.point_list_keys_unsorted,binningState.point_list_…...

「全网最细 + 实战源码案例」设计模式——抽象工厂模式
核心思想 抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。抽象工厂模式解决了产品族的问题,可以管理和创建一组相关的产品。 结构 1. 抽象工厂 定义创建一些列…...
领域驱动设计(DDD)四 订单管理系统实践步骤
以下是基于 领域驱动设计(DDD) 的订单管理系统实践步骤,系统功能主要包括订单的创建、更新、查询和状态管理,采用 Spring Boot 框架进行实现。 1. 需求分析 订单管理系统的基本功能: 订单创建:用户下单创…...
leetcode 面试经典 150 题:简化路径
链接简化路径题序号71题型字符串解法栈难度中等熟练度✅✅✅ 题目 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下…...

基于 STM32 的智能农业温室控制系统设计
1. 引言 随着农业现代化的发展,智能农业温室控制系统对于提高农作物产量和质量具有重要意义。该系统能够实时监测温室内的环境参数,如温度、湿度、光照强度和土壤湿度等,并根据这些参数自动调节温室设备,如通风扇、加热器、加湿器…...

【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用
前言 🌟🌟本期讲解关于spring 事务传播机制介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...