循序渐进kubernetes-RBAC(Role-Based Access Control)
文章目录
- 概要
- Kubernetes API
- 了解 Kubernetes 中的 RBAC
- Roles and Role Bindings:
- ClusterRoles and ClusterRoleBindings
- 检查访问权限:
- 外部用户
- 结论
概要
Kubernetes 是容器化应用的强大引擎,但仅仅关注部署和扩展远远不够,集群的安全同样至关重要。这时,角色权限控制(Role-Based Access Control,RBAC)就派上了用场。本文将深入了解 Kubernetes RBAC,帮助您构建精细化的安全策略,并通过实例详细展示其工作原理。
Kubernetes API
在介绍 RBAC 之前,需要明确授权模型在整个架构中的位置。
以下是向 Kubernetes 集群提交一个 Pod 的示例:
cat <<EOF |kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: web
spec:serviceAccountName: johncontainers:- image: nginxname: nginxports:- containerPort: 8080
EOF
部署Pod 到集群:
kubectl apply -f pod.yaml
运行 kubectl apply 时,会依次执行以下步骤:
- 从 KUBECONFIG 文件中读取配置信息。
- 查询 API 以发现可用的 API 和对象。
- 在客户端验证资源,检查是否存在明显错误。
- 将包含资源定义的请求发送到 kube-apiserver。
当 kube-apiserver 接收到请求时,不会立即将其存储到 etcd 中。
首先,会对请求的合法性进行验证,即对请求进行身份认证。
通过身份认证后,还会检查请求是否具备创建资源的权限。
身份和权限是两个独立的概念。
即使拥有集群访问权限,也不一定能够创建或读取所有资源。
授权通常通过基于角色的访问控制(RBAC)实现。
RBAC 提供细粒度的权限控制,用于限制用户或应用程序的操作范围。
从实际操作的角度来看,API 服务器按以下顺序执行操作:
- A. 验证用户身份
如果身份验证失败,返回 401 Unauthorized 并拒绝请求。
如果身份验证通过,进入下一阶段。 - B. 检查用户权限
如果用户无权访问资源,返回 403 Forbidden 并拒绝请求。
如果用户具备权限,继续处理请求。
通过 RBAC 角色实现用户与权限的解耦
RBAC 是一种基于组织中用户角色分配资源访问权限的模型。
为更直观地理解其工作原理,可以设想从零设计一个授权系统。
要确保用户对特定资源具有写入权限,可以采用一种简单的实现方式,即创建一个包含三列的列表,例如:
| User | Permission | Resource |
| ------ | ---------- | -------- |
| John | read+write | app1 |
| Emily | read | app2 |
| Michael| read | app2 |
在此示例中:
John 拥有对 app1 的读写权限,但无法访问 app2。
Emily 和 Michael对 app2 仅拥有读取权限,但无法访问 app1。
当用户和资源数量较少时,这种表格形式可以正常使用,但随着规模扩大,可能会显现一些局限性。
例如,如果将 Michael和 Emily 归为同一团队,并授予其对 app1 的读取权限,表中将需要新增以下条目:
| User | Permission | Resource |
| ------ | ---------- | ---------- |
| John | read+write | app1 |
| Emily | read | app2 |
| Michael| read | app2 |
| Emily | read | app1 |
| Michael| read | app1 |
这种设计难以直接体现 Emily和 Michael因同属一个团队而拥有相同访问权限的关系。
可以通过在表中添加“Team”列来解决此问题,但更优的方式是拆分这些关系:
- 定义一个通用的权限容器,即角色(Role)。
- 不直接将权限分配给用户,而是将权限包含在反映其在组织中角色的角色中。
- 最后,将角色与用户关联起来。
可以通过以下方式进行改进:
- 不再使用单一表格,而是将结构拆分为两个表格:
- 第一个表格将权限映射到角色。
- 第二个表格将角色与身份关联起来。
| Role | Permission | Resource |
| ------ | ---------- | ---------- |
|admin | read+write | app1 |
|viewer | read | app2 || User | Role |
| ------ | ----------|
|John | admin |
|Emily | viewer |
|Michael | viewer |
当需要将 Mo 设置为 app1 的管理员时,可以通过以下方式将角色分配给用户:
| User | Role |
| ------ | ----------------|
|John | admin |
|Emily | reviewer |
|Michael | viewer,admin |
通过使用角色将用户与权限解耦,可以简化大型组织中涉及众多用户和权限的安全管理。
了解 Kubernetes 中的 RBAC
Kubernetes (K8s) 中的 RBAC(基于角色的访问控制)是一种安全机制,用于定义和实施对集群中各类资源的细粒度访问控制策略,是管理和保护 Kubernetes API 服务器及集群资源访问的重要组成部分。
RBAC 通过定义角色(Role)和角色绑定(Role Binding),用于指定对特定 Kubernetes 资源(如 Pod、Service、ConfigMap)及命名空间级别允许执行的action(verbs)。以下是 RBAC 的一些核心概念:
- 角色(Roles):角色是定义在特定命名空间内,允许对某个资源执行的操作集合。例如,可以创建一个角色,允许在特定命名空间中对 Pod 执行读取和列出操作。
- 角色绑定(Role Bindings):角色绑定将角色与一个或多个用户、组或服务账户关联,指定哪些主体可以执行角色中定义的操作。例如,可以将角色绑定到特定用户或用户组。
- 集群角色(ClusterRoles):与角色仅限于单一命名空间不同,集群角色不受命名空间限制。集群角色定义了对集群级资源(如节点或持久卷)执行的操作。
- 集群角色绑定(ClusterRoleBindings):集群角色绑定将集群角色与用户、组或服务账户关联,类似于角色绑定。它们确定哪些主体可以访问所有命名空间中的集群级资源。
通过使用 RBAC,可以创建一个细粒度的访问控制系统,符合组织的安全需求。这确保了用户、应用程序和服务拥有执行任务所需的适当访问权限,同时保持 Kubernetes 集群的整体安全。
基于角色的访问控制(Role-Based Access Control)是防止未经授权访问的保护屏障!这种安全机制可以为 Kubernetes 资源创建高度精细的访问策略。通过它,可以为用户、应用程序和服务分配恰到好处的权限,同时确保集群的安全性不受威胁。
Roles and Role Bindings:
角色(Roles)用于为命名空间中的特定资源定义访问策略。角色绑定(Role Bindings)将角色与用户、用户组或服务账户关联,明确访问权限的分配关系。
示例:
1.首先创建一个service account
cat <<EOF|kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:name: johnnamespace: web
EOF
2.定义一个名为“pod-reader-role”的角色。
cat <<EOF |kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: webname: pod-reader-role
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]
说明:
此 YAML 文件定义了一个名为 “pod-reader-role” 的角色,适用于 “web” 命名空间,授权对 “pods” 执行 “get” 和 “list” 操作。
3.定义一个名为“pod-reader-role-binding”的角色绑定,并将其绑定到“web”命名空间中的服务用户“john”。
cat <<EOF |kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: pod-reader-role-bindingnamespace: web
subjects:
- kind: ServiceAccountname: johnapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-reader-roleapiGroup: rbac.authorization.k8s.io
EOF
说明:
该 YAML 文件创建了一个名为 “pod-reader-role-binding” 的角色绑定(Role Binding),将 “pod-reader-role” 角色与 “web” 命名空间中的用户 “john” 关联起来。用户 “john” 现在拥有了 “pod-reader-role” 的权限。
ClusterRoles and ClusterRoleBindings
集群角色(ClusterRoles)和集群角色绑定(ClusterRoleBindings)将 RBAC 扩展至整个集群,允许对集群级资源的访问权限进行管理。
1.定义一个名为“node-reader-cluster-role”的clusterrole
cat <<EOF |kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: node-reader-cluster-role
rules:
- apiGroups: [""]resources: ["nodes"]verbs: ["get", "list"]
EOF
说明:
ClusterRole 定义了集群范围内的权限,用于控制对 Kubernetes 集群中资源的访问。上面的 YAML 文件定义了一个名为 “node-reader-cluster-role” 的 ClusterRole,允许对 “nodes” 资源执行 “get” 和 “list” 操作,用于读取节点信息。
2.定义一个名为“node-reader-cluster-binding”的集群角色绑定,并将其绑定到服务用户“admin”。
cat <<EOF |kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: node-reader-cluster-binding
subjects:
- kind: ServiceAccountname: adminapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: node-reader-cluster-roleapiGroup: rbac.authorization.k8s.io
EOF
说明:
在这个 YAML 文件中,名为“node-reader-cluster-binding”的集群角色绑定将“node-reader-cluster-role”集群角色与集群级的用户“admin”关联起来。通过这个绑定,用户“admin”获得了“node-reader-cluster-role”集群角色中定义的权限,从而能够在整个集群中管理节点。
检查访问权限:
配置 RBAC 后,可通过 kubectl auth can-i 命令验证权限,确保角色具备所需的操作权限。
示例:
- 验证 “john” 是否有权限在 “webapp” 命名空间中列出 pods
$ kubectl auth can-i list pods --as=system:serviceaccount:web:john -n web
yes
2.执行list pods验证
$ kubectl exec -it -n web nginx -- bash
$ curl -k -s -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default.svc/api/v1/namespaces/web/pods|jq '.items[].metadata.name'
"my-pod"
"nginx"
"redis-77598f9f86-g4dqg"
"redis-77598f9f86-hpmsh"
"service-python-7f7c9d4fc4-jhp4d"
"webserver-5f9579b5b5-4vj77"
"webserver-5f9579b5b5-qw2m4"
外部用户
1.创建user
在 Kubernetes 中,User 和 ServiceAccount 是独立的概念。一个 User 通常由外部身份管理系统(如 LDAP、OIDC)认证,而 ServiceAccount 是 Kubernetes 内置的一种资源,用于为应用程序或 Pod 提供身份。它们没有直接的关联机制,但可以通过为 User 和 ServiceAccount 配置相同的 RoleBinding 或 ClusterRoleBinding,让它们具有相同的权限,从而达到“关联”目的。
cat <<EOF |kubectl apply -f -
> apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: shared-access-bindingnamespace: web
subjects:
- kind: Username: john # External userapiGroup: rbac.authorization.k8s.io
- kind: ServiceAccountname: john # ServiceAccountnamespace: web
roleRef:kind: Rolename: pod-reader-roleapiGroup: rbac.authorization.k8s.io
> EOF
2.验证权限
$ kubectl auth can-i list pods --as=john -n web
yes
3.执行list pods验证
$ sa_john_token=$(kubectl create token john -n web)
$ echo $sa_john_token
eyJhbGciOiJSUzI1NiIsImtpZCI6ImxMVXQ2cTI1cnJFeWVEa0hpWW9SS2oxemRwUVBPWWY3Y0NPZDEtWXViajAifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzM3NzA0NzUxLCJpYXQiOjE3Mzc3MDExNTEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZjhjYzY3ZWQtYWQ2Mi00OGQ5LTgyNDQtMjg5NDExYTEwODBiIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJ3ZWIiLCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiam9obiIsInVpZCI6IjQxMWU5NzU5LTI0ZDItNDEyMy04MTNmLTEyNTdjYzhmNzE4ZCJ9fSwibmJmIjoxNzM3NzAxMTUxLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6d2ViOmpvaG4ifQ.PZPhGJ9djwI0DaTgHGqoQ0nrov2Cokw1WObL42H-TOcRE9SCAgHaxGgIkjAqgJYja5djmjk-SNneSoPD1jq9PTp2NaXBxCfLMHHCfe2QyN0eB3DiV7SFQ2IWZVBFYa6c8ufNFdm85oOPzmcXZDU-T59xpOR6OqgREWhSAQ4LRyFDC-TAqXf1YncKV2i2rItn1OlgNENdqwD2dBYVM9CZvlCt5za7ZwfYcUve1DD9_rZK0VC1Jnc_I8zf8M7mOrucAiZOLXcaFBfFNMPIWa1t1k2EWbnkt8kLFmDkESJ2S1oMHdbpKPZzspFGAtJDMKMHa9W1T3A92kPz_uSGPkRgVg
$ curl -k -s -H "Authorization: Bearer $sa_john_token" https://172.19.6.5:6443/api/v1/namespaces/web/pods | jq '.items[].metadata.name'
"my-pod"
"nginx"
"redis-77598f9f86-g4dqg"
"redis-77598f9f86-hpmsh"
"service-python-7f7c9d4fc4-jhp4d"
"webserver-5f9579b5b5-4vj77"
"webserver-5f9579b5b5-qw2m4"
结论
Kubernetes RBAC 是实现集群访问控制的重要机制。通过合理配置 Role、RoleBinding、ClusterRole 和 ClusterRoleBinding,可以有效管理用户权限与系统安全之间的关系。定期测试和验证权限配置,有助于保持 Kubernetes 环境的稳定性和安全性。
相关文章:
循序渐进kubernetes-RBAC(Role-Based Access Control)
文章目录 概要Kubernetes API了解 Kubernetes 中的 RBACRoles and Role Bindings:ClusterRoles and ClusterRoleBindings检查访问权限:外部用户结论 概要 Kubernetes 是容器化应用的强大引擎,但仅仅关注部署和扩展远远不够,集群的安全同样至…...
在Scene里面绘制编辑工具
功能要求 策划要在scene模式下编辑棋子摆放。用handle.GUI绘制来解决了。 问题 在scene模式下编辑产生的数据,进入游戏模式后就全不见了。改为executeAlways也没用。我的解决办法是把编辑数据序列化保存到本地。在OnEnable的时候再读取。但是我忽然想到ÿ…...
深入探索 Vue 3 Markdown 编辑器:高级功能与实现
目录 1. 为什么选择 Markdown 编辑器?2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…...
动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...
具身智能研究报告
参考: (1)GTC大会&Figure:“具身智能”奇点已至 (2)2024中国具身智能创投报告 (3)2024年具身智能产业发展研究报告 (4)具身智能行业深度:发展…...
LabVIEW春节快乐
尊敬的LabVIEW开发者与用户朋友们: 灵蛇舞动辞旧岁,春风送暖贺新年!值此癸巳蛇年新春佳节来临之际,向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福:愿您与家人在新的一年里平安顺遂、阖家幸福,事业如…...
MybatisX插件快速创建项目
一、安装插件 二、创建一个数据表测试 三、IDEA连接Mysql数据库 四、选择MybatiX构造器 五、配置参数 六、项目结构...
技术周总结 01.13~01.19 周日(Spring Visual Studio git)
文章目录 一、01.14 周二1.1)问题01:Spring的org.springframework.statemachine.StateMachine 是什么,怎么使用?:如何使用StateMachine: 1.2)问题02:Spring StateMachine 提供了一系列高级特性 …...
【C++】List的模拟实现
文章目录 1.ListNode 结构体2.List成员变量与typedef3.迭代器iterator4.begin()、end()、size()、empty()、构造函数5. insert()、erase()6.push_back()、pop_back()、push_front()、pop_front()7.拷贝构造、赋值、析构8.总代码 以后有时间会更新其它成员函数 1.ListNode 结构…...
剑指 Offer II 002. 二进制加法
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20002.%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95/README.md 剑指 Offer II 002. 二进制加法 题目描述 给定两个 01 字符串 a 和 b ,请计算…...
(15)基于状态方程的单相自耦变压器建模仿真
1. 引言 2. 单相降压自耦变压器的状态方程 3. 单相降压自耦变压器的simulink仿真模型 4. 实例仿真 5. 总结 1. 引言 自耦变压器的原边和副边之间存在直接的电气连接,所以功率是通过感应和传导从原边转移到副边的,这与双绕组变压器不同,后者的原边和副边是电气隔离的。从…...
03.01、三合一
03.01、[简单] 三合一 1、题目描述 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数…...
.git/hooks/post-merge 文件的作用
.git/hooks/post-merge 文件是 Git 版本控制系统中的一个钩子(hook)脚本,其作用是在合并(merge)操作完成后自动执行一些特定的操作。以下是关于 .git/hooks/post-merge 文件作用的详细解释: 作用 自动化任…...
SpringBoot项目创建
一、创建新的工程 二、配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…...
评估训练模型所需的算力
1.模型规模(核心因素) 1.1 参数量决定算力下限: 10亿参数模型:需约1-10 PetaFLOP/s-days(等效1万亿次浮点运算持续1天) 千亿参数(如GPT-3):约3,000-5,000 PetaFLOP/s-days 万亿参数模型:超过50,000 PetaFLOP/s-days 1.2 显存需求公式: 显存(GB) ≈ (参数量 20 by…...
Tez 0.10.1安装
个人博客地址:Tez 0.10.1安装 | 一张假钞的真实世界 具体安装步骤参照官网安装手册即可。此处只对官网手册进行补充。 从官网下载apache-tez-0.10.1-bin.tar.gz进行安装未成功,出现下面的异常。最终按照官网源代码编译的方式安装测试成功。 环境 Had…...
代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分
类似于回溯算法中的拆分回文串题目是要求拆分字符串,问这些字符串是否出现在字典里。但这道题可以反着来考虑,从字典中的单词能不能组成所给定的字符串 如果这样考虑, 这个字符串就背包,容器字典中的单词就是一个一个物品问题就转…...
selenium clear()方法清除文本框内容
在使用Selenium进行Web自动化测试时,清除文本框内容是一个常见的需求。这可以通过多种方式实现,取决于你使用的是哪种编程语言(如Python、Java等)以及你的具体需求。以下是一些常见的方法: 1. 使用clear()方法 clear…...
新增文章功能
总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 之前又偷懒几天。回老家没事干,玩也玩不好,一玩老是被家里人说。写代码吧还是,他们都看不懂&a…...
【设计测试用例自动化测试性能测试 实战篇】
🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 设计测试用例…...
【算法与数据结构】动态规划
目录 基本概念 最长递增子序列(中等) 最大子数组和(中等) 基本概念 重叠子问题 一个问题可以被分解为多个子问题,并且这些子问题在求解过程中会被多次重复计算。例如,在计算斐波那契数列时,…...
扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)
在数字化时代,音频内容的重要性不言而喻。无论是在线课程、有声读物,还是各种多媒体应用,音频都是传递信息、增强体验的关键元素。扣子平台的音频功能,为开发者和内容创作者提供了一个强大而灵活的工具,让音频的使用和…...
【CS61A 2024秋】Python入门课,全过程记录P4(Week7 Generators开始,更新于2025/1/29)
文章目录 关于基本介绍👋新的问题更好的解决方案Week7Mon Generators阅读材料Lab 05: Iterators, MutabilityQ1: WWPD: List-MutationQ2: Insert Items 关于 个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&…...
JUC--ConcurrentHashMap底层原理
ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同?ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…...
【Linux网络编程】网络层说明
目录 前言: 1,网络层介绍 2,IP协议 3,IP协议的格式 4,网段划分 5,特殊的IP地址 6,私有IP地址和公网IP地址 前言: 网络层对于程序员来说不太重要,这方面知识大致了…...
002-基于Halcon的图像几何变换
本节将简要介绍Halcon中有关图像几何变换的基本算子及其应用,主要涉及五种常见的二维几何变换形式:平移、镜像、旋转、错切和放缩。这几种变换可归结为一类更高级更抽象的空间变换类型,即仿射变换(Affine transformationÿ…...
unity学习22:Application类其他功能
目录 1 是否允许后台运行 1.1 Application.runInBackground,显示是否允许后台运行 1.2 设置的地方 2 打开URL 2.1 Application.OpenURL("") 打开超链接 3 退出游戏 3.1 Application.Quit() 退出游戏 4 场景相关 5 返回游戏状态 6 控制游戏的行…...
配置cursor进行Java springboot项目开发
本文用于记录如何配置cursor进行Java SpringBoot项目开发,因为项目团队同事基本都是在使用idea开发工具,所以在尝试cursor新ide的时候发现还是有一些小坑要处理一下的。 首先为了后续在多个不同的java项目之间进行切换的时候不想翻来覆去的总配置指定jdk…...
ChirpIoT技术的优势以及局限性
ChirpIoT是一种由上海磐启微电子开发的国产无线射频通讯技术,ChirpIoT技术基于磐启多年对雷达等线性扩频信号的深入研究,并在此基础上对线性扩频信号的变化进行了改进,实现了远距离传输的一种无线通信技术。相关产品型号有E29-400T22D、E290-…...
ODP(OBProxy)路由初探
OBProxy路由策略 Primary Zone 路由 官方声明默认情况,会将租户请求发送到租户的 primary zone 所在的机器上,通过 Primary Zone 路由可以尽量发往主副本,方便快速寻找 Leader 副本。另外,设置primary zone 也会在一定成都上减少…...
【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?
人大毕竟是老牌985,复试难度不会太低!建议同学认真复习!没有机试还是轻松一些的! 一、复试内容 由公告可见,复试包含笔试及面试,没有机试! 二、参考书目 官方无给出参考书目,可参照…...
阿里云域名备案
一、下载阿里云App 手机应用商店搜索"阿里云",点击安装。 二、登录阿里云账号 三、打开"ICP备案" 点击"运维"页面的"ICP备案"。 四、点击"新增网站/App" 若无备案信息,则先新增备案信息。 五、开始备案...
实现基础的shell程序
1. 实现一个基础的 shell 程序,主要完成两个命令的功能 cp 和 ls 1.1.1. cp 命令主要实现: ⽂件复制⽬录复制 1.1.2. ls 命令主要实现: ls -l 命令的功能 1.1. 在框架设计上,采⽤模块化设计思想,并具备⼀定的可扩…...
yolov5错误更改与相关参数详解(train.py)
1.错误更改 main中相关参数 if __name__ __main__:parser argparse.ArgumentParser()parser.add_argument(--weights, typestr, default, helpinitial weights path)parser.add_argument(--cfg, typestr, defaultmodels/yolov5s.yaml, helpmodel.yaml path)parser.add_arg…...
(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源
文章目录 Springboot 整合多动态数据源 这里有mysql(分为master 和 slave) 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码,不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql(分为maste…...
20.Word:小谢-病毒知识的科普文章❗【38】
目录 题目 NO1.2.3文档格式 NO4.5 NO6.7目录/图表目录/书目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完,确定之后记得保存最后所有操作完记得再次删除空行 题目 NO1.2.3文档格式 样式的应用 选中应用段落段落→开始→选择→→检查→应用一个一个应用ctr…...
arkui-x跨平台与android java联合开发
华为鸿蒙系统采用的是arkts,支持跨平台crossplatform 即前端为arkts,arkui-x框架,后端为其他的语言框架。 本篇示例后端采用的是java,android studio工程。 主要方式是前端鸿蒙完成界面元素、布局等效果,后面androi…...
G. Rudolf and CodeVid-23
题目链接:Problem - G - Codeforces 题目大意: 一种病有 n≤10 种症状。 一种病情可以用一个长度为 n 的01 串表示,其中第 i 个字符表示是否出现该种症状。 现有 m(∑m≤103) 种药,每种药用两个无交集的 01 串表示。第一个 01…...
基于STM32的智能宠物喂食器设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 定时喂食模块远程控制与视频监控模块食物存量检测与报警模块语音互动与用户交互模块数据记录与智能分析模块 控制算法 定时与手动投喂算法食物存量检测与低存量提醒算法数据记录与远程反馈算法 代码实现 喂食控制代码存量检测…...
css中的animation
css的animation animation是一个综合属性,是animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state, and animation-timeline这些属性的简写 不过在…...
[内网安全] 内网渗透 - 学习手册
这是一篇专栏的目录文档,方便读者系统性的学习,笔者后续会持续更新文档内容。 如果没有特殊情况的话,大概是一天两篇的速度。(实验多或者节假日,可能会放缓) 笔者也是一边学习一边记录笔记,如果…...
VMware 中Ubuntu无网络连接/无网络标识解决方法【已解决】
参考文档 Ubuntu无网络连接/无网络标识解决方法_ubuntu没网-CSDN博客 再我们正常使用VMware时,就以Ubuntu举例可能有时候出现无网络连接,甚至出现无网络标识的情况,那么废话不多说直接上教程 环境:无网络 解决方案&#…...
区块链在能源行业的创新
技术创新 1. 智能合约与自动化交易 智能合约是区块链技术的核心组件之一,它允许在没有中介的情况下自动执行合同条款。在能源行业,这可以用于自动化电力交易、支付流程以及管理复杂的供应链。例如,当太阳能板产生的电量达到预设值时&#x…...
skynet 源码阅读 -- 核心概念服务 skynet_context
本文从 Skynet 源码层面深入解读 服务(Service) 的创建流程。从最基础的概念出发,逐步深入 skynet_context_new 函数、相关数据结构(skynet_context, skynet_module, message_queue 等),并通过流程图、结构…...
前端react后端java实现提交antd form表单成功即导出压缩包
前端(React Ant Design) 1. 创建表单:使用<Form>组件来创建你的表单。 2. 处理表单提交:在onFinish回调中发起请求到后端API,并处理响应。 import React from react; import { Form, Input, Button } from ant…...
2025 = 1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3
【算法代码】 #include <bits/stdc.h> using namespace std;int year2025; int main() {cout<<year<<" ";int i1;while(year) {cout<<i<<"^3";if(i<9) cout<<" ";year-pow(i,3);i;}return 0; }/* 202…...
程序代码篇---C++常量引用
文章目录 前言第一部分:C常量常量变量const与指针1.指向常量的指针2.常量指针3.指向常量的常量指针 常量成员函数const_cast运算符总结 第二部分:C引用引用的基本概念引用的声明引用的使用引用的特性1.不可变性2.无需解引用3.内存地址 引用的用途1.函数参…...
DeepSeek-R1本地部署笔记
文章目录 效果概要下载 ollama终端下载模型【可选】浏览器插件 UIQ: 内存占用高,显存占用不高,正常吗 效果 我的配置如下 E5 2666 V3 AMD 590Gme 可以说是慢的一批了,内存和显卡都太垃圾了,回去用我的新设备再试试 概要 安装…...
golang通过AutoMigrate方法自动创建table详解
一.AutoMigrate介绍 1.介绍 在 Go 语言中,GORM支持Migration特性,支持根据Go Struct结构自动生成对应的表结构,使用 GORM ORM 库的 AutoMigrate 方法可以自动创建数据库表,确保数据库结构与定义的模型结构一致。AutoMigrate 方法非常方便&am…...
如何看待 OpenAI 的12天“shipmas”发布计划?
openAI的“Shipmas”并非单纯的营销活动,而是在用户增长、技术创新和市场竞争中的综合布局和战略体现。 史上最寒酸的发布会?继十月马斯克在好莱坞电影城高调发布特斯拉三款最新产品(无人出租车、无人巴士、人形机器人)后,十二月,OpenAI CEO 奥特曼宣布 OpenAI 将连续12…...