当前位置: 首页 > 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关键字都会创建一个协程…...

当node节点kubectl 命令无法连接到 Kubernetes API 服务器

1.问题 当node节点当node节点kubectl 命令无法连接到 Kubernetes API 服务器 [rootnode1 ~]# kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port?2. 确认 kubeconfig 文件 确保节点上有有效的 kubeco…...

直接通过类CURL方式,与GRPC方法交互的命令行工具

大家好&#xff0c;今天给大家分享的是一个命令行工具grpcurl&#xff0c;它能够直接与 gRPC 服务进行交互。 项目介绍 您可以把grpcurl想象成是 curl 的 gRPC 版本&#xff0c;但是功能更加强大。 由于 gRPC 服务之间的通信使用的是 Protocol Buffers (Protobuf) 格式的二进…...

Hive3:数据的加载与导出

一、加载数据 在创建表之后&#xff0c;表中没有数据&#xff0c;我们不可能insert存入数据。 而是&#xff0c;通过数据加载&#xff0c;将HDFS中的数据关联到Hive表中。 建表 CREATE TABLE myhive.test_load(dt string comment 时间&#xff08;时分秒&#xff09;, user_…...

React事件绑定的方式有哪些?区别?

React 中事件绑定的方式主要有以下几种&#xff1a; 直接在 JSX 中绑定事件&#xff1a; <button onClick{handleClick}>Click me</button> 这是最常见和推荐的方式。事件名&#xff08;如 onClick&#xff09;作为 JSX 的属性&#xff0c;值为一个函数&#xff0c…...

ibis:极具潜力的Python数据分析新框架

今天要给大家介绍的Python框架叫做ibis&#xff0c;没错&#xff0c;跟著名连锁酒店宜必思同名&#xff0c;其作者是创造了pandas、Arrow等著名框架的Wes McKinney。 ibis的核心理念是用同一套数据框操作API&#xff0c;统一操纵各种主流的数据运算框架&#xff0c;使得用户可以…...

SQL Zoo 8+.NSS Tutorial

以下数据来自SQL Zoo 1.at Edinburgh Napier University&#xff0c;studying (8) Computer Science&#xff0c;Show the the percentage who STRONGLY AGREE.&#xff08;在爱丁堡纳皮尔大学&#xff0c;学习“计算机科学”&#xff0c;显示STRONGLY AGREE的百分比&#xff0…...

conda pack迁移环境

文章目录 下载conda pack打包已有环境还原环境 因为有的服务器没有网络&#xff0c;如果想要安装自己的虚拟环境&#xff0c;就需要在有网络的服务器安装好环境后迁移到没有网络的服务器。conda-pack是一个命令行工具&#xff0c;用于打包 conda 环境&#xff0c;pip inatall和…...

UML建模案例分析-活动图商业建模

概述 活动图主要用来描述如何完成工作以及做什么工作。可以用活动图来描述操作、类或 用例&#xff0c;但是它们只能显示工作流。可以用活动图来进行商业建模&#xff0c;在模型中&#xff0c;工作、工 人、组织、对象被显示。 案例 在商业建模时&#xff0c;下列方面是模型要…...

C++标准模板(STL)- 低层内存管理 - 解分配函数 (operator delete, operator delete[])

低层内存管理 new 表达式是创建拥有动态存储期对象或对象数组的仅有方式&#xff0c;即它们拥有不受制于创建所它们在的作用域的生存期。 new 表达式通过调用分配函数获得存储。 delete 表达式销毁最终导出对象或通过 new 表达式创造的数组&#xff0c;然后调用解分配函数。默认…...

LeetCode 热题 HOT 100 (025/100)【宇宙最简单版】

【二叉树】No. 0124 二叉树中的最大路径和 【困难】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你…...