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

K8S Ingress 常用配置

目录

      • 介绍
      • ingress 安装 基本使用请查看
      • 域名重定向
      • 前后端分离配置
      • 默认证书配置
      • 指定证书配置
      • 白名单配置
      • 黑名单配置
        • Annotations 配置
        • ConfigMap 配置
      • 匹配请求头
      • 速率限制
        • 限制客户端的最大连接数
        • 限制每秒钟段并发连接数
        • 限制每分钟段并发请求
        • 突发访问限制
        • 限制传输速度
        • 速率限制白名单
      • 灰度发布
        • 基于权重配置
        • 基于 Header 控制流量走向
        • 基于 Cookie 控制流量走向
      • 自定义错误页面
      • 基本认证


介绍

本次所有操作都是在K8S 1.26.14 上面操作,太老的版本不知道会不会有问题。
更多 Ingress 配置请查看ingress-nginx 官网

ingress 安装 基本使用请查看

点击跳转

域名重定向

配置成功以后再次访问会直接跳转到百度首页。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoringannotations:## 配置域名重定向,将百度的域名改成自己业务需要的即可nginx.ingress.kubernetes.io/permanent-redirect: https://www.baidu.com
spec:ingressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefixtls:- hosts:- prometheus.monitoring.cnsecretName: prometheus.monitoring.cn

修改域名重定向的同时还可以修改状态码,默认是301,本次修改成308.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoringannotations:## 配置域名重定向,将百度的域名改成自己业务需要的即可nginx.ingress.kubernetes.io/permanent-redirect: https://www.baidu.com## 修改状态码nginx.ingress.kubernetes.io/permanent-redirect-code: '308'
spec:ingressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefixtls:- hosts:- prometheus.monitoring.cnsecretName: prometheus.monitoring.cn

再次访问的时候可以看到状态码已经修改了(在网页调试里面查看)

前后端分离配置

部署好以后用这个域名访问即可prometheus.monitoring.cn/test,在nginx上面这个配置就是地址重写。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoringannotations:nginx.ingress.kubernetes.io/use-regex: "true"  ## 启用正则表达式匹配路径nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:ingressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /test(/|$)(.*)pathType: ImplementationSpecifictls:- hosts:- prometheus.monitoring.cnsecretName: prometheus.monitoring.cn

默认证书配置

测试环境可以用openssl 生成一个证书即可,正常生产环境是需要购买的证书才可以的要不浏览器会提示不安全。
比如申请的域名是以 *.monitoring.cn 的证书 就可以设置默认域名。

在 K8S上面创建证书。

## 创建证书
kubectl create secret tls monitoring.cn --key monitoring.cn.key --cert monitoring.cn_bundle.pem -n ingress-nginx## 查看创建的证书
[root@master01 ~]# kubectl get secrets -n ingress-nginx
NAME                                  TYPE                 DATA   AGE
monitoring.cn                          kubernetes.io/tls    2      65s

修改 ingress-nginx 配置

kubectl edit daemonsets.apps -n ingress-nginx ingress-nginx-controller### 找到这一行spec:containers:- args:- /nginx-ingress-controller###  在此处添加 “- --default-ssl-certificate=ingress-nginx/monitoring.cn”   等号后面写命名空间/后面加上名字 (不是非得创建到 ‘ingress-nginx’理论上那个命名空间都可以)- --default-ssl-certificate=ingress-nginx/monitoring.cn- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller- --election-id=ingress-nginx-leader

保存退出即可。

使用方法:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoring
spec:ingressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefix

NGINX 将提供默认证书,但不会强制 HTTPS 重定向。就是用HTTP访问也行HTTPS访问也行。

如果需要强制转换HTTPS访问 在后面添加 tls 即可

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoring
spec:ingressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefixtls:- hosts:- prometheus.monitoring.cn

指定证书配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoring
spec:ingressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefixtls:- hosts:- prometheus.monitoring.cnsecretName: prometheus.monitoring.cn  ## 这行要是注释了就是用默认的证书,没注释就是使用指定证书。

白名单配置

白名单建议使用 annotations 配置,这个只对的单个Ingress生效。

添加 nginx.ingress.kubernetes.io/whitelist-source-range 注释以实现白名单。未授权的 IP 访问会提示 403。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoringannotations:   ## 多个IP 用逗号隔开。nginx.ingress.kubernetes.io/whitelist-source-range: 192.168.1.175
spec:tls:- hosts:- prometheus.monitoring.cningressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefix

黑名单配置

黑名单建议使用 ConfigMap 配置,此配置对整个集群段 Ingress 都生效。

Annotations 配置

这个注释可以指定具体的IP地址也可以写IP段的地址以逗号分隔,举例:192.168.1.0/24,192.168.1.2

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoringannotations: ## 添加这个注释以开启黑名单设置nginx.ingress.kubernetes.io/denylist-source-range: 172.31.163.46
spec:tls:- hosts:- prometheus.monitoring.cningressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefix
ConfigMap 配置

注意:此操作全局生效,修改完保存即可生效,老版本的 Ingress-nginx 可能需要重启pod。

kubectl edit cm -n ingress-nginx ingress-nginx-controller
apiVersion: v1
data:allow-snippet-annotations: "true"## 添加如下配置即可,IP 段也可以添加用逗号隔开即可。denylist-source-range: 172.31.163.46
kind: ConfigMap
metadata:annotations:meta.helm.sh/release-name: ingress-nginxmeta.helm.sh/release-namespace: ingress-nginxlabels:app.kubernetes.io/component: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/managed-by: Helmapp.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxapp.kubernetes.io/version: 1.8.1helm.sh/chart: ingress-nginx-4.7.1name: ingress-nginx-controllernamespace: ingress-nginx

匹配请求头

当请求头匹配到是用手机访问段就跳转到百度。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: prometheus-ingressnamespace: monitoringannotations:nginx.ingress.kubernetes.io/server-snippet: |set $agentflag 0;if ($http_user_agent ~* "(Mobile)" ){set $agentflag 1;}if ( $agentflag = 1 ) {return 301 https://www.baidu.com;}
spec:tls:- hosts:- prometheus.monitoring.cningressClassName: nginxrules:- host: prometheus.monitoring.cnhttp:paths:- backend:service:name: prometheus-k8sport:name: webpath: /pathType: Prefix

速率限制

本次仅展示部分 Ingress 配置。

限制客户端的最大连接数

nginx.ingress.kubernetes.io/limit-connections 是用于限制每个客户端与后端服务的最大并发连接数。当前设置段同一客户端最大连接数是10,个这种限制可以帮助防止某些类型的 DoS攻击。超出这个限制的连接请求将被 NGINX 阻止,返回 HTTP 503 错误。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/limit-connections: "10"
spec:
限制每秒钟段并发连接数

nginx.ingress.kubernetes.io/limit-rps 是用于限制每秒钟每个客户端 IP 地址可以发送到后端服务的请求数量,当前设置为每秒并发五个连接。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/limit-rps: "5"
spec:rules:
限制每分钟段并发请求

这个和每秒的那个限制基本一致。当前配置是每分钟允许同一个客户端并发100个请求。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/limit-rpm: "100"
spec:
突发访问限制

nginx.ingress.kubernetes.io/limit-burst-multiplier 是用于控制请求速率限制中的突发请求数。它在配置 limit-rps(每秒请求数限制)或 limit-rpm(每分钟请求数限制)时一起使用,以允许短时间内超过设定请求速率的突发请求。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/limit-rps: "10"nginx.ingress.kubernetes.io/limit-burst-multiplier: "2"
spec:

工作原理:

  • nginx.ingress.kubernetes.io/limit-rps: “10”:每个客户端 IP 每秒最多允许 10 个请求。
  • nginx.ingress.kubernetes.io/limit-burst-multiplier: “2”:允许的突发请求数是 10 的两倍,即 20 个请求。

这意味着在一个短时间窗口内,最多可以处理 20 个请求(超过 limit-rps 限制的 10 个正常请求数),之后请求速率将受 limit-rps 的限制。

限制传输速度

nginx.ingress.kubernetes.io/limit-rate-after 是用于控制在限制速率(Rate Limiting)生效之前将以当前带宽的最大速率,这项设置与 nginx.ingress.kubernetes.io/limit-rate 配合使用,用于管理响应速率的上限。

注意:此功能必须在启用代理缓冲的情况下使用。如果需要全局配置修改ConfigMap即可。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/proxy-buffering: "on"     # 启用代理缓冲(默认情况是禁用段的)nginx.ingress.kubernetes.io/proxy-buffers: "8 16k"    # 8 个 16KB 缓冲区nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"  # 初始缓冲区大小 16KBnginx.ingress.kubernetes.io/limit-rate: "1024"        # 每秒最多传输 1024 字节(1KB)nginx.ingress.kubernetes.io/limit-rate-after: "5120"  # 传输超过 5120 字节后开始限速(5k)
spec:

也可以直接使用这条 "nginx.ingress.kubernetes.io/limit-rate: “1024”,既每秒传输1Kb(必须启用代理缓冲)

工作原理:

  • 客户端在请求前 5120 字节的数据时,数据会以网络能够支持的最高速率传输。
  • 当传输的数据量超过 5120 字节后,速率限制生效,传输速率限制为 1024 字节/秒(1KB/秒)。
速率限制白名单

nginx.ingress.kubernetes.io/limit-whitelist 是用于指定不受速率限制(rate limiting)影响的客户端 IP 地址或 IP 地址范围。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/limit-rate: "1024" # 每秒传输限制 1KBnginx.ingress.kubernetes.io/limit-whitelist: "192.168.1.0/24,10.0.0.1" # 白名单
spec:

白名单中的 IP 不受每秒传输1Kb速度的限制。

灰度发布

基于权重配置

nginx.ingress.kubernetes.io/canary-weight:基于整数百分比的随机请求应路由到金丝雀入口中指定的服务。权重为 0 表示此金丝雀规则不会将任何请求发送到金丝雀入口中的服务。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test01name: test01namespace: appsannotations:nginx.ingress.kubernetes.io/canary: "true"## 有百分之10的流量回到这个服务,剩下百分之90的流量到下面的那个服务。nginx.ingress.kubernetes.io/canary-weight: "10"
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test01port:number: 80path: /pathType: Prefix
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test02name: test02namespace: apps
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test02port:number: 80path: /pathType: Prefix
基于 Header 控制流量走向
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test01name: test01namespace: appsannotations:nginx.ingress.kubernetes.io/canary: "true"nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"nginx.ingress.kubernetes.io/canary-by-header-value: "always"
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test01port:number: 80path: /pathType: Prefix
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test02name: test02namespace: apps
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test02port:number: 80path: /pathType: Prefix

测试方法
不添加请求头的时候是访问 test02 。

[root@master01 ~]# curl example.com
test022222

添加请求头的时候是访问 test01(请求时候命令行里面的键值对必须和 Ingress 里面的对应上)。

[root@master01 ~]# curl -H "X-Canary: always" example.com
test0111111
基于 Cookie 控制流量走向

nginx.ingress.kubernetes.io/canary-by-cookie:用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务的 cookie。当 cookie 值设置为 时always,它将被路由到 Canary。当 cookie 设置为 时never,它将永远不会被路由到 Canary。对于任何其他值,将忽略 cookie,并根据优先级将请求与其他 Canary 规则进行比较。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test01name: test01namespace: appsannotations:nginx.ingress.kubernetes.io/canary: "true"nginx.ingress.kubernetes.io/canary-by-cookie: "canary-user"
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test01port:number: 80path: /pathType: Prefix
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test02name: test02namespace: apps
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test02port:number: 80path: /pathType: Prefix

测试方法
将 cookie 的值设置为always是将访问test01,将值设置为never将访问 test02.

[root@master01 ~]# curl -b "canary-user=always" example.com
test0111111

或者(不写cookie 或者值乱写也是访问test02)

[root@master01 ~]# curl -b "canary-user=never" example.com
test022222

Canary 规则按优先顺序进行评估。优先顺序如下:canary-by-header -> canary-by-cookie -> canary-weight

自定义错误页面

定义服务托管页面后段程序(为了演示使用 nginx 部署)。
部署自定义页面 配置文件。

apiVersion: v1
kind: ConfigMap
metadata:name: custom-error-pagesnamespace: apps
data:404.html: |<html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1><p>The page you are looking for was not found.</p></body></html>502.html: |<html><head><title>502 Bad Gateway</title></head><body><h1>502 Bad Gateway</h1><p>There was a problem with the upstream server.</p></body></html>503.html: |<html><head><title>503 Service Unavailable</title></head><body><h1>503 Service Unavailable</h1><p>The service is currently unavailable. Please try again later.</p></body></html>

部署 nginx Deployment 服务

apiVersion: apps/v1
kind: Deployment
metadata:name: error-pagesnamespace: apps
spec:replicas: 1selector:matchLabels:app: error-pagestemplate:metadata:labels:app: error-pagesspec:containers:- name: nginximage: nginx:alpinevolumeMounts:- name: error-pagesmountPath: /usr/share/nginx/htmlvolumes:- name: error-pagesconfigMap:name: custom-error-pages
---
apiVersion: v1
kind: Service
metadata:name: error-pagesnamespace: apps
spec:ports:- port: 80selector:app: error-pages

部署 Ingress (同一个命名空间直接写SVC名字即可,要是不同的命名空间情网下看。)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test02name: test02namespace: appsannotations:nginx.ingress.kubernetes.io/custom-http-errors: "404,500"nginx.ingress.kubernetes.io/default-backend: 'error-pages'
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test02port:number: 80path: /pathType: Prefix

不同命名空间配置

apiVersion: v1
kind: Service
metadata:name: error-pagesnamespace: apps
spec:type: ExternalNameexternalName: error-pages.apps.svc.cluster.localports:- port: 80

基本认证

创建用户名和密码

htpasswd -c auth user## 没有这个命令直接yum安装
yum install -y httpd-tools

创建 secret

kubectl create secret generic auth-secret --from-file=auth -apps

创建Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: test02name: test02namespace: appsannotations:nginx.ingress.kubernetes.io/auth-type: "basic"   ## 指定使用基本身份验证nginx.ingress.kubernetes.io/auth-secret: "auth-secret"  ## 指定刚刚创建的 secretnginx.ingress.kubernetes.io/auth-realm: "Authentication Required"  ## 对话框面熟文字(就是在网页弹出的那个输入密码那个对话框的面熟问题,写什么都可以。)
spec:ingressClassName: nginxrules:- host: example.comhttp:paths:- backend:service:name: test02port:number: 80path: /pathType: Prefix

在页面访问会提示输入账号密码。
官网还有更多Ingress 配置,我这里只列出了经常能用到的。
Ingress-Nginx 官方文档

相关文章:

K8S Ingress 常用配置

目录 介绍ingress 安装 基本使用请查看域名重定向前后端分离配置默认证书配置指定证书配置白名单配置黑名单配置Annotations 配置ConfigMap 配置 匹配请求头速率限制限制客户端的最大连接数限制每秒钟段并发连接数限制每分钟段并发请求突发访问限制限制传输速度速率限制白名单 …...

【K8S】K8S架构及相关组件

文章目录 1 K8S总体架构2 相关组件2.1 控制面板组件2.2 节点组件2.3 附加组件 写在最后 1 K8S总体架构 K8S&#xff0c;全称Kubernetes&#xff0c;是一个开源的容器部署和管理平台&#xff0c;由Google开发&#xff0c;后捐献给云原生计算基金会&#xff08;CNCF&#xff09;…...

【MATLAB第108期】基于MATLAB的fast、vbsa、dynia、eet、glue、pawn、rsa敏感性分析模型合集(无目标函数)【更新中】

【MATLAB第108期】基于MATLAB的fast、vbsa、dynia、eet、glue、pawn、rsa敏感性分析模型合集&#xff08;无目标函数&#xff09;【更新中】 一、FAST&#xff08;Fourier Amplitude Sensitivity Test&#xff09; FAST&#xff08;Fourier Amplitude Sensitivity Test&#…...

【K8S】为什么需要Kubernetes?

文章目录 1 什么是Kubernetes&#xff1f;2 三种常见的应用部署方式2.1 传统部署2.2 虚拟化部署2.3 容器化部署 3 Kubernetes的特点写在最后 1 什么是Kubernetes&#xff1f; Kubernetes是 一个开源的&#xff0c;用于管理云平台中多个主机上的容器化应用&#xff0c;Kubernet…...

【Linux】Linux中查找字符串中的命令

在Linux中&#xff0c;查找字符串的命令通常使用grep。grep是一个强大的工具&#xff0c;用于在文件中搜索指定模式的字符串。以下是一些基本用法&#xff1a; 1.在文件中查找字符串 grep "字符串" 文件名例如&#xff0c;查找文件example.txt中包含“hello”的行&…...

最新HTML设计搜索表单

设计搜索表单 页眉中包含表单&#xff0c;表单中只需包含label和Input. 实现如下效果&#xff1a;文本框动态变宽效果 代码&#xff1a;6.2.4.设计搜索表单.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title></t…...

JavaScript constructor原型原型继承

constructor 在 JavaScript 中&#xff0c;构造函数是一种特殊的函数&#xff0c;使用 new 关键字来调用&#xff0c;用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。 例如&#xff1a; function Person(name, age) {this.name name;this.age a…...

使用Python+moviepy保存截取视频画面

一、 使用VideoFileClip对象的的save_frame函数保存截取的第1帧画面 from moviepy.editor import * mvVideoFileClip(/home/Download/leaves.mp4) mv.save_frame(/home/Download/fst.jpg) # 默认保存截取的第1帧画面 二、 使用VideoFileClip对象的的save_frame函数保存截…...

【DOCKER】显示带UI的软件

1. Linux 1.1 宿主机开放X server权限 xhost 1.2 启动容器 docker run -it --rm --privilegedtrue --useru20 --workdir/home/u20 \ -e DISPLAYhost.docker.internal:0 u20:dev1.3 测试 # 安装测试软件 sudo apt-get -y install x11-apps# 显示测试程序 xclock2. Windows …...

Atcoder Beginner Contest 366

传送门 A - Election 2 时间限制&#xff1a;2秒 内存限制&#xff1a;1024MB 分数&#xff1a;100分 问题描述 在 AtCoder 市举行市长选举。候选人是 Takahashi 和 Aoki。 目前有 N 张有效选票投给了这两个候选人&#xff0c;并且计票正在进行中。这里&#xff0…...

【hexo博客问题】

windows下使用gitbash即可使用 其他bash会产生权限问题 npm install失败 $ npm install npm error code ENOENT npm error syscall open npm error path F:\pf_project\blog_pf\package.json npm error errno -4058 npm error enoent Could not read package.json: Error: E…...

用数组模拟栈和队列

栈 先进后出 //stk 表示定义的栈 //tt表示栈顶的下标 int stk[N], tt 0;//在栈顶上加入一个新的元素 stk[ tt] x;//弹出 tt --;//判断栈是否为空 if (tt > 0) 不为空 else empty//取出栈顶 stk[tt];1.题目 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一个…...

Django内置后端和自定义后端

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 5.2.3 内置…...

嵌入式人工智能(OpenCV-基于树莓派的人脸识别与入侵检测)

1、人脸识别 人脸识别是一种技术&#xff0c;通过检测、跟踪和识别人脸上的关键特征&#xff0c;以确认人脸的身份。它通常用于安保系统、身份验证、社交媒体和人机交互等领域。 人脸识别技术的基本原理是先通过图像处理和计算机视觉算法&#xff0c;提取人脸的特征点和特征描…...

如何选择适合的香港云服务器提供商?

稳定性和可靠性 确保提供商有高水平的服务器正常运行时间&#xff0c;并提供可靠的数据备份和恢复选项。 网络速度和延迟 选择能够提供快速和低延迟网络连接的服务商&#xff0c;尤其是对于目标用户位于中国大陆的企业而言。 客户支持 查看提供商是否提供24/7的客户支持&#x…...

安卓Android JAVA校招/实习面试合集:多线程、强软弱虚引用、进程、内存管理、Activity、Fragment......

本人今年&#xff08;2023年&#xff09;参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&a…...

Jeecgboot 字典值自动转化:DictAspect类方法改造,支持IPage、List、Object、Map类自动转化,附有源码

改造的是DictAspect类&#xff1a; 原来使用的 parseDictText(Object result)方法&#xff0c;针对返回对象为Result 的IPage的分页列表数据进行动态字典注入&#xff0c;当单个对象查询&#xff0c;列表查询&#xff0c;或者多个数据放到Map中时&#xff0c;就不会自动转化&am…...

DVWA DOM Based Cross Site Scripting (DOM型 XSS)

DVWA DOM Based Cross Site Scripting (DOM型 XSS) 文章目录 DVWA DOM Based Cross Site Scripting (DOM型 XSS)XSS跨站原理DOM型 LowMediumHighImpossible XSS跨站原理 当应用程序发送给浏览器的页面中包含用户提交的数据&#xff0c;但没有经过适当验证或转义时&#xff0c;就…...

LinkedList集合及迭代器的源码分析

一.介绍: 二.LinkedList集合特有的API: 三.迭代器的源码分析: package com.itheima.a03myarraylist;import java.util.ArrayList; import java.util.Iterator;public class A01_ArrayListDemo1 {public static void main(String[] args) {ArrayList<String> listnew Arr…...

Go调度器

线程数过多,意味着操作系统会不断地切换线程,频繁的上下文切换就成了性能瓶颈.Go提供一种机制 可以在线程中自己实现调度,上下文切换更轻量,从而达到线程数少,而并发数并不少的效果,而线程中调度的就是Goroutine 调度器主要概念: 1.G:即Go协程,每个go关键字都会创建一个协程…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...