94 、k8s之rbac

news2025/1/11 0:21:22

一、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.yaml


apiVersion: 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: User
        Group
        ServerAccount
rules:
#定义规则
- apiGroup: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限
  resources: ["pod","services"]  
#给主体也就是用户可以在指定的命名空间内对哪些资源对象进行操作。
  verbs: ["get","watch","list"]
--------------------------------------



在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@master01 rabc]# kubectl apply -f test1.yaml

apiVersion: 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: User
  name: xy102
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: 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.sh

APISERVER=$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: User
  name: lucky
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: 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:51Z

NAME                                          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.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","exec"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test2
#创建的角色名称
  namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: User
  name: lucky
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: 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: User
  name: lucky
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: 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: User
  name: lucky
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: 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=test1
              pod-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://c4f09342136d40a3134c3d76cec8678d0514e9e78320fcaac707a5bee29ad5fd
    Image:          nginx:1.22
    Image ID:       docker-pullable://192.168.168.71/test1/nginx@sha256:9081064712674ffcff7b7bdf874c75bcb8e5fb933b65527026090dacda36ea8b
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 13 Sep 2024 13:57:54 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_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 0
    inet 10.244.1.15/24 brd 10.244.1.255 scope global eth0
       valid_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.coloradmin.cn/o/2131598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S3C2440开发板点亮LED灯+PWM定时器

目录 GPIO引脚和寄存器概述 点亮LED灯步骤 1.配置GPIO 2.点亮LED 设置引脚为输出 控制引脚电平 完整代码 PWM GPIO引脚和寄存器概述 GPIO端口&#xff1a; S3C2440的GPIO引脚可被配置为输入或输出&#xff08;控制LED的引脚通常配置为输出模式&#xff09;。寄存器&#…

从LoRA到QLoRA:量化技术如何改变预训练模型的微调方式

在现代人工智能的发展中&#xff0c;预训练语言模型&#xff08;LLM&#xff09;已成为各种自然语言处理任务中的关键技术。这些模型通常具有数十亿甚至数千亿的参数&#xff0c;因此需要巨大的计算和存储资源来进行微调。QLoRA提出了一种新方法&#xff0c;使得在单个48GB的GP…

“这年头,只依赖上班,是赚不到钱的——揭秘如何利用AI开启赚钱新模式“

苹果&#xff0c;在AI时代终于要有大动作了。 反观国内华为&#xff0c;前段时间刚上线的新款平板MatePad Air也大放异彩&#xff0c;搭载AI助手&#xff0c;创新生产力。 像我这写文案的时常灵感枯竭&#xff0c;打开电脑却迟迟下不了手…而华为小艺帮写功能只需要输入指令就…

【C\C++】Eigen初体验(VS Code编译)

Eigen Eigen 是一个高效的 C 库&#xff0c;专注于线性代数运算。PCL 使用 Eigen 来处理矩阵和向量运算&#xff0c;特别是在点云数据的变换、配准和特征计算等方面。Eigen 提供了高效的矩阵运算功能&#xff0c;使得 PCL 在处理大规模点云数据时能够保持高性能。 Eigen 使用…

如何使用Chainlit让所有网站快速嵌入一个AI聊天助手Copilot

Copilot 副驾驶 Software Copilot 是嵌入到您的应用/产品中的一种新型助手。它们旨在通过提供情境指导并代表用户采取行动来帮助用户充分利用您的应用。 支持的功能 信息流媒体元素声音的询问用户聊天记录聊天资料反馈✅✅✅✅✅❌✅✅ 嵌入 Copilot 首先&#xff0c;确保您…

团队协作必备:2025年10大企业知识库管理系统工具推荐

2025年团队协作知识库工具合集TOP 10 在团队协作和知识管理日益重要的今天&#xff0c;选择一款高效、灵活的知识库工具对于提升工作效率至关重要。以下是精心挑选的2025年团队协作知识库工具合集TOP 10&#xff0c;每款工具都具备独特的功能和优势&#xff0c;以满足不同团队…

基于鸿蒙API10的RTSP播放器(一:基本界面的实现)

ijkplayer简介&#xff1a; ijkplayer 本身是一个开源的 Android 媒体播放库&#xff0c;它主要用于播放视频和音频文件&#xff0c;现在已有前辈将其引入到鸿蒙当中&#xff0c;通过XComponent组件完成适配。向开源致敬&#xff01; 支持格式&#xff1a; 它支持多种格式&…

wine 麒麟系统运行Windows编译的exe

启动终端 首先,我们需要打开终端程序。 在终端中,输入以下命令: sudo apt-get update这个命令通常会要求输入密码,输入你的密码后,就可以继续执行了。 如果你想要切换到 root 用户,可以通过以下方法: su 用户名然后输入 root 用户的密码。 如果你想要重置 root 用户…

网站如何防范BOT流量?

随着互联网的快速发展&#xff0c;BOT流量已成为网络安全领域的一大隐患。BOT&#xff0c;即自动化程序&#xff0c;它们在网络中执行各种任务&#xff0c;包括数据抓取、恶意抢购、暴力破解等。这些行为不仅威胁到网站的正常运营&#xff0c;还可能造成数据泄露、经济损失等严…

day20JS-axios数据通信

1. 什么是axios axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端&#xff0c;简单的理解就是ajax的封装&#xff0c;只不过它是Promise的实现版本。 特性&#xff1a; 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转…

零宽字符应用场景及前端解决方案

零宽字符&#xff08;Zero Width Characters&#xff09;是一类在文本中不可见但具有特定功能的特殊字符。称为零宽字符&#xff0c;也叫幽灵字符。它们在显示时不占据任何空间&#xff0c;但在文本处理和显示中发挥着重要作用。这些字符主要包括零宽度空格、零宽度非连接符、零…

【C++ 高频面试题】STL 你了解多少呢?vector 的底层实现原理

文章目录 1. 常见的 STL 容器2.vector 和 list 的区别3. vector 的底层原理4. push_back() 和 emplace_back() 区别 1. 常见的 STL 容器 &#x1f34e;①序列容器 vector&#xff08;向量&#xff09;&#xff1a;是一个动态数组实现&#xff0c;提供高效的随机访问和在尾部进行…

基于R语言结构方程模型分析与实践技术应用

结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0c;利用图形化模型方式清晰展示研究系统中变量间的因果网络关系&#xff0c;…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

【算法专场】分治(上)

目录 前言 什么是分治&#xff1f; 75. 颜色分类 算法分析 算法步骤 算法代码 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法步骤 算法代码 215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法步骤 ​编辑…

【Redis入门到精通一】什么是Redis?

目录 Redis 1. Redis的背景知识 2.Redis特性 3.Redis的使用场景 4.Ubuntu上安装配置Redis Redis Redis在当今编程技术中的地位可以说非常重要&#xff0c;大多数互联网公司内部都在使用这个技术&#xff0c;熟练使用Redis已经成为开发人员的一个必备技能。本章将带领读者…

yolov5实战全部流程

本科生阶段除了在中等以上的985和某些特定的CS强项院校&#xff0c;无意愿研究生学习的本科生是不建议学习人工智能这一专业的&#xff0c;保研学生也许可以在实验室打工推荐信学习接触到此类事件&#xff0c;此项blog主要是对yolov5的实践性项目&#xff0c;yolov5作为最具有代…

python 函数 封装

封装 函数的参数是&#xff1a;变量 def 函数(参数):print(参数)if __name__ __main__:函数(参数)函数(参数2)函数的参数是&#xff1a; 字典 import requests# 定义一个字典 data {} 地址 "https://webdriveruniversity.com/" 请求方法 getdata["url"…

【数据结构】选择题错题集

这里注意原本p后面也是有节点的。 这里只有遍历前面的链表找到尾节点连接即可。 快排是交换排序。 不要想象只有这两个节点&#xff0c;还有其他节点省略了。 筛选法就是向下调整算法。用向下调整建堆从最后一个节点的父亲开始。 这里错位相减法是乘4&#xff0c;所以最后要除三…

超详细!外婆都能看懂的Stable Diffusion入门教程,AI绘画SD零基础入门到精通教程!

一、前言 如今的AI绘画界有两大最强工具&#xff0c;一个是Midjourney &#xff0c;一个是StableDiffusion。Midjourney生成图片的质量非常高&#xff0c;可问题就是 Midjourney 的图片怎么精准的控制&#xff0c;或者是不改变某个物体的情况下更换背景等等&#xff0c;实在是…