94 、k8s之rbac

一、rbac----安全机制

赋权机制

集群是按照用户名进行登录,按照项目名称进行命名空间的分类。

配电云主站------62天 8个人 高温补贴

一主2从

user pdyzz

pdyzz

-n pdyzz

资源空间

pod数量

1.1、k8s的安全机制:

apiserver------>集群内和外部的通信都需要apiserver进行调度,所有的安全机制都是围绕apiserver展开的。

1.2、apiserver进行通信:

1、认证:Authentication

2、鉴权:Authorzation你在集群当中的权限的控制

3、准入控制admission control 你能做的哪些

1.3、认证:

1、token

token:Http token ,是一个很长的特殊编码方式的而且难以被模仿的特殊字符串,来表达客户端的一种方式。

每一个token都会对应一个用户,存储在apiserver能够访问的文件中。客户端发起对apiserver的请求时,在http header当中必须加入token。

2、http base认证

http base认证:用户名加密码进行认证

3、https证书认证

https证书认证:基于ca证书签名的客户端身份认证方式。最严格得到方式。

http token和http base都是服务端对客户端的单向认证,https是双向认证的方式。

1.4、认证的资源类型:

kubectl kubelet kube-proxy

kubectl对pod进行管理也需要认证

service Account:是为了方便访问pod中的容器,以及容器访问apiserver专门创建的。

service Acount---->每创建一个pod就会自动创建。

1、token:和apiserver认证的私钥

2、ca.crt:认证apiserver的证书

3、namespace:service Account的命名空间

[root@master01 opt]# kubectl exec -it nginx1-bd76c7b4-jp445 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-bd76c7b4-jp445:/# cd /var/run/secrets/kubernetes.io/serviceaccount/
root@nginx1-bd76c7b4-jp445:/var/run/secrets/kubernetes.io/serviceaccount# ls
ca.crt	namespace  token  ##每个pod都有

1.5、鉴权:

认证过后,就到了鉴权。

确定请求方有哪些资源的权限。

1.20版本,鉴权统一使用RBAC进行。

1、角色:

Role:指定命名空间的资源控制权限

ClusterRole:可以指定所有的命名空间的资源控制权限

2、角色绑定:

Rolebinding:将角色绑定到主体 用户-------subject

clusterRolebinding:将集群角色绑定到主体

3、主体

user:用户

service account 服务账号(集群的服务账号)

用户组 group

准入机制:

[root@master01 rabc]# kubectl explain role
KIND:     Role
VERSION:  rbac.authorization.k8s.io/v1[root@master01 opt]# mkdir rabc
[root@master01 opt]# cd rabc/
[root@master01 rabc]# vim test1.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: test1
#创建的角色名称namespace: default
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pod","services"]  
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list"]权限
-------------------------------
#rules.verbs有:"get", "list", "watch", "create", "update", "patch", "delete", "exec"
#rules.resources有:"services", "endpoints", "pods", "secrets", "configmaps", "crontabs", "deployments", "jobs", "nodes", "rolebindings", "clusterroles", "daemonsets", "replicasets", "statefulsets", "horizontalpodautoscalers", "replicationcontrollers", "cronjobs"
---------------------------------------------------只是类型,格式不对---------------------
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: test1
#创建的角色名称namespace: default
#这个是必须要有的字段,只能有一个命名空间
subject:
- kind: UserGroupServerAccount
rules:
#定义规则
- apiGroup: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pod","services"]  
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list"]
--------------------------------------

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@master01 rabc]# kubectl apply -f test1.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: test1
#创建的角色名称namespace: default
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pods","services"]
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: test2
#创建的角色名称namespace: default
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: Username: xy102apiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: test1apiGroup: rbac.authorization.k8s.io[root@master01 rabc]# useradd lucky
[root@master01 rabc]# passwd lucky 
更改用户 lucky 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@master01 rabc]# su - lucky
上一次登录:五 9月 13 10:15:33 CST 2024pts/2 上
[lucky@master01 ~]$ kubectl get pod
error: the server doesn't have a resource type "pod"
[lucky@master01 ~]$ kubectl get pods[root@master01 rabc]# cd /usr/local/bin/
[root@master01 bin]# ls
helm
[root@master01 bin]# rz -E
rz waiting to receive.
[root@master01 bin]# rz -E
rz waiting to receive.
[root@master01 bin]# rz -E
rz waiting to receive.
[root@master01 bin]# ls
cfssl  cfssl-certinfo  cfssljson  helm
#apiserver和用户之间连接的认证证书[root@master01 bin]# chmod +x /usr/local/bin/cfssl*
[root@master01 bin]# cd /opt/rabc/#客户端的签名证书cat > lucky-csr.json <<EOF
{"CN": "lucky","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "BeiJing","L": "BeiJing","O": "k8s","OU": "System"}]
}
EOF[root@master01 rabc]# cd /etc/kubernetes/pki/
[root@master01 pki]# ls
apiserver.crt                 ca.crt              front-proxy-ca.srl
apiserver-etcd-client.crt     ca.key              front-proxy-client.crt
apiserver-etcd-client.key     ca.srl              front-proxy-client.key
apiserver.key                 etcd                sa.key
apiserver-kubelet-client.crt  front-proxy-ca.crt  sa.pub
apiserver-kubelet-client.key  front-proxy-ca.key--------------错误--------------------------
[root@master01 pki]# cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/rbac/lucky-csr.json | cfssljson -bare lucky 
open /opt/rbac/lucky-csr.json: no such file or directory
Failed to parse input: unexpected end of JSON input
------------------------------------[root@master01 pki]# cd /opt/rabc/
[root@master01 rabc]# ls
lucky-csr.json  test1.yaml
[root@master01 rabc]# vim lucky-csr.json 
[root@master01 rabc]# vim lucky-csr.json {"CN": "lucky","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "BeiJing","L": "BeiJing","O": "k8s","OU": "System"}]
}[root@master01 pki]# cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/rabc/lucky-csr.json | cfssljson -bare lucky 
2024/09/13 11:27:03 [INFO] generate received request
2024/09/13 11:27:03 [INFO] received CSR
2024/09/13 11:27:03 [INFO] generating key: rsa-2048
2024/09/13 11:27:03 [INFO] encoded CSR
2024/09/13 11:27:03 [INFO] signed certificate with serial number 270213834320680597090887969272870496291196286104
2024/09/13 11:27:03 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").[root@master01 pki]# ls
apiserver.crt                 ca.key                  front-proxy-client.key
apiserver-etcd-client.crt     ca.srl                  lucky.csr
apiserver-etcd-client.key     etcd                    lucky-key.pem
apiserver.key                 front-proxy-ca.crt      lucky.pem
apiserver-kubelet-client.crt  front-proxy-ca.key      sa.key
apiserver-kubelet-client.key  front-proxy-ca.srl      sa.pub
ca.crt                        front-proxy-client.crt[root@master01 pki]# cd -
/opt/rabc
[root@master01 rabc]# vim rabc-config.shAPISERVER=$1
# 设置集群参数
export KUBE_APISERVER="https://$APISERVER:6443"
kubectl config set-cluster kubernetes \--certificate-authority=/etc/kubernetes/pki/ca.crt \--embed-certs=true \--server=${KUBE_APISERVER} \--kubeconfig=lucky.kubeconfig# 设置客户端认证参数
kubectl config set-credentials lucky \--client-key=/etc/kubernetes/pki/lucky-key.pem \--client-certificate=/etc/kubernetes/pki/lucky.pem \--embed-certs=true \--kubeconfig=lucky.kubeconfig# 设置上下文参数
kubectl config set-context kubernetes \--cluster=kubernetes \--user=lucky \--namespace=lucky-cloud \--kubeconfig=lucky.kubeconfig[root@master01 rabc]# chmod 777 rabc-config.sh 
[root@master01 rabc]# ls
lucky-csr.json  rabc-config.sh  test1.yaml[root@master01 rabc]# ./rabc-config.sh 192.168.168.81
Cluster "kubernetes" set.
User "lucky" set.
Context "kubernetes" created.[root@master01 rabc]# cd /opt/rabc/
[root@master01 rabc]# ls
lucky-csr.json  lucky.kubeconfig  rabc-config.sh  test1.yaml[root@master01 rabc]# kubectl config use-context kubernetes --kubeconfig=lucky.kubeconfig
Switched to context "kubernetes".
[root@master01 rabc]# mkdir /home/lucky/.kube
mkdir: 无法创建目录"/home/lucky/.kube": 文件已存在
[root@master01 rabc]# ls
lucky-csr.json  lucky.kubeconfig  rabc-config.sh  test1.yaml
[root@master01 rabc]# cp lucky.kubeconfig /home/lucky/.kube/config
[root@master01 rabc]# chown -R lucky:lucky  /home/lucky/.kube/##更改用户
[root@master01 rabc]# vim test1.yaml apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: test1
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pods","services"]
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: test2
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: Username: luckyapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: test1apiGroup: rbac.authorization.k8s.io[root@master01 rabc]# kubectl create ns lucky-cloud
namespace/lucky-cloud created
[root@master01 rabc]# kubectl apply -f test1.yaml 
role.rbac.authorization.k8s.io/test1 created
rolebinding.rbac.authorization.k8s.io/test2 created
[root@master01 rabc]# kubectl get role,rolebinding -n lucky-cloud 
NAME                                   CREATED AT
role.rbac.authorization.k8s.io/test1   2024-09-13T03:41:51ZNAME                                          ROLE         AGE
rolebinding.rbac.authorization.k8s.io/test2   Role/test1   42s[root@master01 rabc]# su - lucky
上一次登录:五 9月 13 11:43:13 CST 2024pts/1 上
[lucky@master01 ~]$ exit
登出
[root@master01 rabc]# kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3 -n lucky-cloud 
deployment.apps/nginx1 created[root@master01 rabc]# kubectl get pod -n lucky-cloud 
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-4q4g7   1/1     Running   0          74s
nginx1-654cb56c4-9qpdg   1/1     Running   0          74s
nginx1-654cb56c4-hzx8x   1/1     Running   0          74s[root@master01 rabc]# su - lucky 
上一次登录:五 9月 13 11:46:49 CST 2024pts/1 上
[lucky@master01 ~]$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-4q4g7   1/1     Running   0          114s
nginx1-654cb56c4-9qpdg   1/1     Running   0          114s
nginx1-654cb56c4-hzx8x   1/1     Running   0          114s[lucky@master01 ~]$ kubectl exec -it nginx1-654cb56c4-4q4g7 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Error from server (Forbidden): pods "nginx1-654cb56c4-4q4g7" is forbidden: User "lucky" cannot create resource "pods/exec" in API group "" in the namespace "lucky-cloud"##添加exec权限
[root@master01 rabc]# vim test1.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: test1
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pods","services"]
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list","exec"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: test2
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: Username: luckyapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: test1apiGroup: rbac.authorization.k8s.io[root@master01 rabc]# kubectl apply -f test1.yaml 
role.rbac.authorization.k8s.io/test1 configured
rolebinding.rbac.authorization.k8s.io/test2 unchanged[lucky@master01 ~]$ kubectl exec -it nginx1-654cb56c4-4q4g7 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Error from server (Forbidden): pods "nginx1-654cb56c4-4q4g7" is forbidden: User "lucky" cannot create resource "pods/exec" in API group "" in the namespace "lucky-cloud"##更改
[root@master01 rabc]# vim test1.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: test1
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pods","services","deployments","pods/exec","pods/log"]
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list","exec"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: test2
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: Username: luckyapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: test1apiGroup: rbac.authorization.k8s.io[root@master01 rabc]# kubectl apply -f test1.yaml
role.rbac.authorization.k8s.io/test1 configured
rolebinding.rbac.authorization.k8s.io/test2 unchanged[root@master01 rabc]# su - lucky 
上一次登录:五 9月 13 13:01:36 CST 2024pts/0 上
[lucky@master01 ~]$ kubectl logs -f nginx1-654cb56c4-4q4g7
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/09/13 03:47:32 [notice] 1#1: using the "epoll" event method
2024/09/13 03:47:32 [notice] 1#1: nginx/1.22.1
2024/09/13 03:47:32 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2024/09/13 03:47:32 [notice] 1#1: OS: Linux 3.10.0-957.el7.x86_64
2024/09/13 03:47:32 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
2024/09/13 03:47:32 [notice] 1#1: start worker processes
2024/09/13 03:47:32 [notice] 1#1: start worker process 29
2024/09/13 03:47:32 [notice] 1#1: start worker process 30
2024/09/13 03:47:32 [notice] 1#1: start worker process 31
2024/09/13 03:47:32 [notice] 1#1: start worker process 32[root@master01 rabc]# vim test1.yaml apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: test1
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限resources: ["pods","services","deployments","pods/exec","pods/log"]
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。verbs: ["get","watch","list","exec","create"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: test2
#创建的角色名称namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: Username: luckyapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: test1apiGroup: rbac.authorization.k8s.io[root@master01 rabc]# kubectl apply -f test1.yaml 
role.rbac.authorization.k8s.io/test1 configured
rolebinding.rbac.authorization.k8s.io/test2 unchanged
[root@master01 rabc]# su - lucky 
上一次登录:五 9月 13 13:03:22 CST 2024pts/0 上
[lucky@master01 ~]$ kubectl exec -it nginx1-654cb56c4-4q4g7 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-4q4g7:/# #rules.verbs有:"get", "list", "watch", "create", "update", "patch", "delete", "exec"
#rules.resources有:"services", "endpoints", "pods", "secrets", "configmaps", "crontabs", "deployments", "jobs", "nodes", "rolebindings", "clusterroles", "daemonsets", "replicasets", "statefulsets", "horizontalpodautoscalers", "replicationcontrollers", "cronjobs"

面试1

1、describe pod 查询容器的 container ID
2、到pod部署的节点,根据containerID获取容器在节点的进程号
3、根据进程号进入容器的网络命名空间

4、tcpdump -i 网卡

[root@master01 opt]# kubectl create deployment test1 --image=nginx:1.22 --replicas=1
deployment.apps/test1 created[root@master01 opt]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP             NODE     NOMINATED NODE   READINESS GATES
hpa-test2-0             1/1     Running   9          25h     10.244.2.20    node02   <none>           <none>
nfs1-76f66b958-68wpl    1/1     Running   0          7d4h    10.244.2.173   node02   <none>           <none>
nginx1-bd76c7b4-jp445   1/1     Running   0          21h     10.244.1.11    node01   <none>           <none>
test1-86776958-swshz    1/1     Running   0          2m57s   10.244.1.15    node01   <none>           <none>[root@master01 opt]# kubectl describe pod test1-86776958-swshz 
Name:         test1-86776958-swshz
Namespace:    default
Priority:     0
Node:         node01/192.168.168.82
Start Time:   Fri, 13 Sep 2024 13:57:52 +0800
Labels:       app=test1pod-template-hash=86776958
Annotations:  <none>
Status:       Running
IP:           10.244.1.15
IPs:IP:           10.244.1.15
Controlled By:  ReplicaSet/test1-86776958
Containers:nginx:Container ID:   docker://c4f09342136d40a3134c3d76cec8678d0514e9e78320fcaac707a5bee29ad5fdImage:          nginx:1.22Image ID:       docker-pullable://192.168.168.71/test1/nginx@sha256:9081064712674ffcff7b7bdf874c75bcb8e5fb933b65527026090dacda36ea8bPort:           <none>Host Port:      <none>State:          RunningStarted:      Fri, 13 Sep 2024 13:57:54 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-4s6fz (ro)
Conditions:##查看进程号
[root@node01 ~]# docker inspect --format '{{.State.Pid}}' c4f09342136d40a3134c3d76cec8678d0514e9e78320fcaac707a5bee29ad5fd
97062##进入这个容器的网络命名空间
[root@node01 ~]# nsenter -n -t 97062
[root@node01 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
3: eth0@if276: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default link/ether 82:ac:76:b0:45:30 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.244.1.15/24 brd 10.244.1.255 scope global eth0valid_lft forever preferred_lft forever[root@node01 ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes[root@master01 opt]# curl 10.244.1.15##查看抓包情况

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423563.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML+CSS - 网页布局之网格布局

1. dispaly设置 display是 CSS 中用于设置元素的显示方式的属性。它决定了元素如何被渲染到页面上。不同的display值会改变元素的显示行为&#xff0c;包括布局、排版以及对其他元素的影响。 其中网格容器是最常用的几种方式之一&#xff0c;在文档中创建类似于网格的效果&…

【Go】Go语言中延迟函数、函数数据的类型、匿名函数、闭包等高阶函数用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Mysql | 知识 | 理解是怎么加锁的

文章目录 一、怎么加行级锁的&#xff1f;二、唯一索引加锁2.1 唯一索引等值查询1、记录存在的情况2、记录不存在的情况 2.2 唯一索引范围查询a. 针对「大于」的范围查询b. 针对「大于等于」的范围查询的情况。c. 「小于」范围查询&#xff0c;记录「不存在」表中的情况d. 「小…

音乐革命:揭秘树莓派如何重塑 Korg 合成器的未来

采用快速紧凑的 Raspberry Pi 计算模块3&#xff08;Raspberry Pi Compute Module 3&#xff09;的简易设置&#xff0c;为Korg备受推崇的高端乐器提供了一种经济高效的解决方案。 解决方案&#xff1a;Compute Module 3 企业规模&#xff1a;大型企业 行业&#xff1a;音乐…

uniapp小程序,使用腾讯地图获取定位

本篇文章分享一下在实际开发小程序时遇到的需要获取用户当前位置的问题&#xff0c;在小程序开发过程中经常使用到获取定位功能。uniapp官方也提供了相应的API供我们使用。 官网地址&#xff1a;uni.getLocation(OBJECT)) 官网获取位置的详细介绍这里就不再讲述了&#xff0c;大…

【LeetCode】每日一题 2024_9_14 从字符串中移除星号(模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 今天的题目曾经的我做过了 . . . 又是复习的一天 题目&#xff1a;从字符串中移除星号 代码与解题思路 func removeStars(s string) string {// 本题的核心&#xff1a;生成的输入保证总是可以执行题面中…

大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【绿盟科技盟管家-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

秒懂:父子进程与bash(命令行参数)的关系

情景解析&#xff1a; 执行以下代码&#xff1a; #include<string.h> #include<unistd.h> int g_val 100000;int main() {int key7;printf("I am father process, pid: %d, ppid: %d, g_val: %d\n", getpid(), getppid(), g_val);sleep(5);pid_t id f…

现代 Web 开发全攻略:Node.js、npm、Webpack、Vue.js 和 Element-UI 的实战指南

现代 Web 开发全攻略&#xff1a;Node.js、npm、Webpack、Vue.js 和 Element-UI 的实战指南 一 . Node.js1.1 什么是 Node.js ?1.2 Node.js 的安装1.3 快速入门1.3.1 控制台输出1.3.2 使用函数1.3.3 模块化编程 二 . npm 包管理器2.1 什么是 npm ?2.2 npm 命令2.2.1 初始化工…

护眼灯品牌排行第一名出炉!盘点2024年世界公认十大护眼灯

中国拥有全球最多的近视人口&#xff0c;我国学生的近视发病率位居世界第二&#xff0c;人数更是居于首位。如今&#xff0c;越来越多的孩子出现近视现象&#xff0c;许多家长认为这是由于繁重的课业和不健康的用眼习惯所致&#xff0c;但实际上&#xff0c;他们往往忽视了一个…

数据分析-前期数据处理

今天找到一份关于医学体检的数据&#xff0c;在数据分析前期工作需要对数据做处理&#xff0c;在这里我们对原始数据做一些处理&#xff0c;将数据处理为可分析的标准数据。下一篇文章做数据的分析。数据想要获取的话可以到我的资源下载。1 数据读取 import pandas as pd data…

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一&#xff1a;利用cmd启动SQL server服务 3.方法二&#xff1a;利用SQL Server配置管理器启动SQL server服务 4.方法三&#xff1a;在服务管理器中启动SQL server服务 二、建立数据库…

震撼!AI实时生成游戏,每秒20帧,谷歌扩散模型最新突破一夜爆火,附论文介绍和GitHub代码

震撼&#xff01;AI实时生成游戏&#xff0c;每秒20帧&#xff0c;谷歌扩散模型最新突破一夜爆火&#xff0c;附论文介绍和GitHub代码。 “比Sora还震撼”&#xff0c;AI可以实时生成游戏了&#xff01; 谷歌DeepMind打造出了首个完全AI驱动的实时游戏引擎——GameNGen。 在单…

SpringBoot集成MyBatis-PlusDruid

目录 MyBatis-Plus简介 实例演示 创建Springboot项目 初始化Springboot项目 添加关键依赖 application.properties添加相关配置 启动类 编写实体类 编写mapper接口 条件构造器 分页插件 自定义 SQL 映射 MyBatis-Plus简介 MyBatis-Plus简介‌MyBatis-Plus‌&…

RDD2022 道路瑕疵检测数据集

RDD2022 道路瑕疵数据集 txt标签或者xml标签 一共23767张图片 D00 D01 D20 D40四类 D00纵向裂缝 D10横向裂缝 D20网状裂缝 D40坑洞。 RDD2022 道路瑕疵检测数据集介绍 数据集概述 RDD2022&#xff08;Road Defect Detection 2022&#xff09;是一个专门用于道路瑕疵检测的数…

力扣之1777.每家商店的产品价格

文章目录 1. 1777.每家商店的产品价格1.1 题干1.2 建表1.3 题解1.4 结果截图 1. 1777.每家商店的产品价格 1.1 题干 表&#xff1a;Products -------------------- | Column Name | Type | -------------------- | product_id | int | | store | enum | | price | int | ---…

HarmonyOS 是如何实现一次开发多端部署 -- HarmonyOS自学1

一次开发多端部署遇到的几个关键问题 为了实现“一多”的目标&#xff0c;需要解决如下三个基础问题&#xff1a; 问题1&#xff1a;页面如何适配 不同设备间的屏幕尺寸、色彩风格等存在差异&#xff0c;页面如何适配。 问题2&#xff1a;功能如何兼容 不同设备的系统能力…

《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现

目录 一、图像直方图 1、什么是图像直方图 2、作用 1&#xff09;分析图像的亮度分布 2&#xff09;判断图像的对比度 3&#xff09;检测图像的亮度和色彩偏移 4&#xff09;图像增强和调整 5&#xff09;阈值分割 3、举例 二、直方图用法 1、函数用法 2、参数解析…

C++——深部解析哈希

好久不见给大家分享一张图片吧 目录 前言 二、库文件 1、哈希冲突 2 哈希函数 3、闭散列 三 、闭散列的实现和底层逻辑 1、哈希表&#xff08;闭散列&#xff09;的定义 2、哈希表&#xff08;闭散列&#xff09;的插入 3、哈希表&#xff08;闭散列&#xff09;的查找 4.哈希表…