【云原生】RBAC授权详解

使用 RBAC签权

文章目录

  • 使用 RBAC签权
    • 一、RBAC介绍
      • 1.1、介绍
      • 1.2、RBAC四种对象
    • 二、Role和ClusterRole
    • 三、RoleBinding和ClusterRoleBinding
    • 四、示例Role
      • 4.1、创建Kubernetes用户
      • 4.2、Role示例
      • 4.3、RoleBinding
      • 4.4、验证
      • 4.5、退回管理员权限用户
    • 五、示例ClusterRole
      • 5.2、创建Kubernetes用户
      • 5.3、ClusterRole示例
      • 5.3、ClusterRoleBinding
      • 5.4、验证
    • 六、删除资源的要求
    • 七、扩展1
      • 7.1、对资源的引用
    • 八、扩展2
      • 8.1、RoleBinding也可以引用ClusterRole,

一、RBAC介绍

1.1、介绍

基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对计算机或网络资源的访问的方法。

RBAC签权机制使用rbac.authorization.k8s.ioAPI(Kubernetes API中的一组相关路径)组来驱动签权决定,允许你通过Kubernetes API动态配置策略。

1.2、RBAC四种对象

RBAC API声明了四种 Kubernetes 对象:Role、ClusterRole、RoleBinding和ClusterRoleBinding。你可以像使用其他 Kubernetes 对象一样,通过类似kubectl这类工具描述或修补 RBAC 对象

  • 注意*:这些对象在设计即实施了一些访问限制。如果你在学习过程中对集群做了更改,请避免特权提升

二、Role和ClusterRole

RBAC的RoleClusterRole中包含一组代表相关权限的规则。这些权限是纯碎累加的(不存在拒绝某些操作的规则)。

Role总是用来在某个名称空间内设置访问权限;在你创建Role时,你必须指定该Role所属的名称空间。

与之相对,ClustreRole则是一个集群作用域的资源。这两种资源的名称不同(Role和ClusterRole)是因为 Kubernetes 对象要么是名称空间作用域的,要么是集群作用域,不可两者兼具。

ClusterRole 若干用法。你可以用它来:

  • (1)、定义对某名称空间域对象的访问权限,并将名称空间内被授予访问权限;
  • (2)、名称空间作用域的对象设置访问权限,并将授予跨所有名称空间的访问权限;
  • (3)、为集群作用域的资源定义访问权限。

如果你希望在名称空间内角色,应该使用Role;如果你希望定义集群范围的角色,应该使用ClusterRole。

三、RoleBinding和ClusterRoleBinding

角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。它包含若干主体(Subject)(用户、组或服务账户)的列表和对这些主体所获得的角色的引用。RoleBinding在指定的名称空间中执行授权,而ClusterRoleBinding在集群范围执行授权。

一个RoleBinding可以引用同一的名称空间中的任何Role。或者,一个RoleBinding可以引用某ClusterRole并将该ClusterRole绑定到RoleBinding所在的名称空间。如果你希望将某ClusterRole绑定到集群中所有名称空间,你要是用ClusterRoleBinding。

RoleBindimg或ClusterRoleBinding对象的名称必须是合法的路径分段名称

四、示例Role

4.1、创建Kubernetes用户

  • 创建 Kubernetes 的wzh1账号
# 进去 Kubernetes 的公钥设施文件夹
[root@master ~]# cd /etc/kubernetes/pki/# 生成 wzh  认证证书
[root@master pki]# openssl genrsa -out wzh1.key 2048
[root@master pki]# openssl req -new -key wzh1.key -out wzh1.csr -subj "/CN=wzh1"
[root@master pki]# openssl x509 -req -in wzh1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out wzh1.crt -days 3650# 将 wzh1 账户加入Kubernetes
[root@master pki]# kubectl config set-credentials wzh1 --client-certificate=./wzh1.crt --client-key=./wzh1.key --embed-certs=true 
[root@master pki]# kubectl config set-context wzh1@kubernetes --cluster=kubernetes --user=wzh1
# 查看 Kubernetes Config
[root@master pki]# kubectl config view
apiVersion: v1
clusters:
- cluster:certificate-authority-data: DATA+OMITTEDserver: https://192.168.93.145:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-admin@kubernetes
#####################################################
- context:cluster: kubernetesuser: wzh1name: wzh1@kubernetes
#####################################################
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: REDACTEDclient-key-data: REDACTED
- name: wzh1user:client-certificate-data: REDACTEDclient-key-data: REDACTED

4.2、Role示例

  • 下面是一个位于default名称空间的Role的示例,可以用来授予对Pod的读访问权限:
[root@master rbac]# cat role.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"  
kind: Role  # 创建的资源类型
metadata:namespace: default  # 这个Role将使用与default名称空间中name: pod-reader
rules:   # 规则
- apiGroups: [""] # "" 标明核心组  core API(不用纠结什么意思)resources: ["pods"]  # 指定权限使用的资源类型为Pod,适用的资源要写全称,可以通过kubectl api-resources  查看NAME字段,就是资源的全称verbs: ["get","watch","list"] # 指定可以对指定资源执行的操作
# 加载资源
[root@master rbac]# kubectl apply -f role.yaml 
role.rbac.authorization.k8s.io/pod-reader created
# 查看 Role 角色创建情况
[root@master rbac]# kubectl get role pod-reader 
NAME         CREATED AT
pod-reader   2024-08-19T00:54:42Z

4.3、RoleBinding

  • 下面的例子中的 RoleBinding将“pod-reader” Role授予在“default”名称空间中的用户“wzh1”.这样,用户“wzh1”就具有了读取“default”名称空间中所有Pod的权限。
[root@master rbac]# cat rolebinding.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"
# 此角色绑定运行 “wzh1” 用户读取 “default” 名称空间中的Pod
# 你需要在该名称空间中又有一个名为“pod-reader”的 Role
kind: RoleBinding   # 创建的类型
metadata:name: read-podsnamespace: default  # 与Role保持同一名称空间即可
subjects:  
# 你可以指定不止一个“subject(主体)”
- kind: User  # 创建的是用户类型(User)name: wzh1   # 需要绑定的用户apiGroup: rbac.authorization.k8s.io  # 不用纠结这个字段
roleRef:   # 指定与某Role 或 ClusterRole的绑定关系kind: Role   # 此字段必须是Role 或 ClusterRolename: pod-reader    # 此字段必须要与你绑定的Role 或 ClusterRole的名称匹配apiGroup: rbac.authorization.k8s.io
# 加载资源
[root@master rbac]# kubectl apply -f rolebinding.yaml 
rolebinding.rbac.authorization.k8s.io/read-pods created

4.4、验证

# 切换到Kubernetes的wzh1用户
[root@master rbac]# kubectl config use-context wzh1@kubernetes 
Switched to context "wzh1@kubernetes".
# 查看 default 中的Pod
# 通过以下可以看出,是可以访问 default 名称空间中的 Pod 的,只是该名称空间下没有Pod
[root@master rbac]# kubectl get pod -n default
No resources found in default namespace.
# 做一些没有赋予权限的操作将会报错,比如使用wzh1用户查看默认名称空间service资源
[root@master rbac]# kubectl get service -n default
Error from server (Forbidden): services is forbidden: User "wzh1" cannot list resource "services" in API group "" in the namespace "default"

4.5、退回管理员权限用户

[root@master rbac]# kubectl config use-context kubernetes-admin@kubernetes 
Switched to context "kubernetes-admin@kubernetes".

五、示例ClusterRole

  • ClusterRole同样可以用于授予Role能够授予的权限。因为ClusterRole属于集群范围,所以它可以为以下资源授予访问权限:
    • 集群范围资源(比如节点(Node))
    • 非资源端点(比如/healthz)
    • 跨名称空间访问的名称空间作用域的资源(如Pod)
      • 比如,你可以使用ClusterRole来允许某特定用户指定kubectl get pod -A

5.2、创建Kubernetes用户

  • 创建 Kubernetes 的wzh2账号
# 进去 Kubernetes 的公钥设施文件夹
[root@master ~]# cd /etc/kubernetes/pki/# 生成 wzh2  认证证书
[root@master pki]# openssl genrsa -out wzh2.key 2048
[root@master pki]# openssl req -new -key wzh2.key -out wzh2.csr -subj "/CN=wzh2"
[root@master pki]# openssl x509 -req -in wzh2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out wzh2.crt -days 3650# 将 wzh 账户加入Kubernetes
[root@master pki]# kubectl config set-credentials wzh2 --client-certificate=./wzh2.crt --client-key=./wzh2.key --embed-certs=true 
[root@master pki]# kubectl config set-context wzh2@kubernetes --cluster=kubernetes --user=wzh2
# 查看 Kubernetes Config
[root@master pki]# kubectl config view 
apiVersion: v1
clusters:
- cluster:certificate-authority-data: DATA+OMITTEDserver: https://192.168.93.145:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-admin@kubernetes
- context:cluster: kubernetesuser: wzh1name: wzh1@kubernetes
#####################################################
- context:cluster: kubernetesuser: wzh2name: wzh2@kubernetes
#####################################################
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: REDACTEDclient-key-data: REDACTED
- name: wzh1user:client-certificate-data: REDACTEDclient-key-data: REDACTED
- name: wzh2user:client-certificate-data: REDACTEDclient-key-data: REDACTED

5.3、ClusterRole示例

  • 下面是一个ClusterRole的示例,可用来为任意一特定名称空间中的Secret授予读访问权限,或者跨名称空间的访问权限(取决于该角色是如何绑定的):
[root@master pki]# cat clusterrole.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"
kind: ClusterRole  # 创建的资源类型
metadata: # "namespace" 被忽略,因为 ClusterRole 不受名称空间限制name: secret-reader  
rules:  # 规则
- apiGroups: [""]  # 核心组,不用纠结这个字段# 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets"resources: ["secrets"]  # 可以操作的资源对象verbs: ["get","watch","list"]  # 可以做使用kubectl对secret做的操作
# 加载资源
[root@master pki]# kubectl apply -f clusterrole.yaml 
clusterrole.rbac.authorization.k8s.io/secret-reader created
# 查看 ClusterRole 角色创建情况
[root@master pki]# kubectl get clusterrole secret-reader 
NAME            CREATED AT
secret-reader   2024-08-19T01:31:49Z

5.3、ClusterRoleBinding

  • 要跨整个集群访问全新啊的授予,你可以使用一个ClusterRoleBinding。下面的ClusterRoleBinding允许”wzh2“用户访问任何名称空间中的Secret。
[root@master pki]# cat clusterrolebinding.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"
# 此集群角色绑定允许 ”wzh2“用户访问任何名称空间中的Secret资源
kind: ClusterRoleBinding
metadata:name: read-secrets-global
subjects:
- kind: User  # 用户类型为(User)name: wzh2  # 此允许必须存在apiGroup: rbac.authorization.k8s.io
roleRef:   # 指定引用的角色资源kind: ClusterRolename: secret-readerapiGroup: rbac.authorization.k8s.io
# 加载资源
[root@master pki]# kubectl apply -f clusterrolebinding.yaml 
clusterrolebinding.rbac.authorization.k8s.io/read-secrets-global created

5.4、验证

# 切换到Kubernetes的wzh2用户
[root@master pki]# kubectl config use-context wzh2@kubernetes 
Switched to context "wzh2@kubernetes".
# 查看ClusterRole角色中运行查看的资源
# ClusterRole 针对的是全局的的权限,也就是集群,可以看到集群所有Secret资源
[root@master pki]# kubectl get secret -A
NAMESPACE         NAME                                             TYPE                                  DATA   AGE
default           default-token-9vp59                              kubernetes.io/service-account-token   3      19d
kube-flannel      default-token-x4r9d                              kubernetes.io/service-account-token   3      19d
kube-flannel      flannel-token-kjfjp                              kubernetes.io/service-account-token   3      19d
kube-node-lease   default-token-nwgqw                              kubernetes.io/service-account-token   3      19d
...
# 查看别的资源将会报错
[root@master pki]# kubectl get pod -A
Error from server (Forbidden): pods is forbidden: User "wzh2" cannot list resource "pods" in API group "" at the cluster scope

六、删除资源的要求

  • 创建绑定之后,你不能再修改绑定对象所引用的Role或ClusterRole。试图改变绑定对象的roleRef将导致合法性检查错误。如果你想要改变现有绑定对象中的roleRef字段的内容,必须删除重新创建绑定对象

七、扩展1

7.1、对资源的引用

  • 在Kubernetes API中,大多数资源都是使用对象名称的资源串表示来呈现与访问的。例如,对于Pod应用使用”Pods“。RBAC使用对应的API端点的URL中呈现的名称来引用资源。有一些Kubernetes API涉及子资源(subresource),例如Pod的日志。对于Pod的日志请求看起来像这样:
GET /api/v1/namespaces/{namespace}/pods/{name}/log
  • 在这里,Pods对应的名称空间作用域的Pod资源,而logpogs的子资源。在RBAC角色表达子资源时,使用斜线(/)来分隔资源和子资源。要么允许某主体读取pods同时访问这些Pod的log子资源,你可以这样写:
# 你可以把以上的所有资源删除,来进行以下的验证
[root@master rbac]# cat role.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"  
kind: Role 
metadata:namespace: default  name: pod-reader
rules:   
- apiGroups: [""] resources: ["pods","pods/log"]  verbs: ["get","watch","list"]# 最终可以实现以下效果
[root@master rbac]# kubectl logs nginx
/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
  • 对于某些请求,也可以通过resourceNames列表按名称引用资源。在指定时,可以将请求限定为资源的单个实例。下面的例子中限制可以getupdate一个名为my-configmap1的Config Map。
# 创建两个ConfingMap
[root@master rbac]# kubectl create configmap my-configmap1
[root@master rbac]# kubectl create configmap my-configmap2
[root@master rbac]# cat role.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"  
kind: Role 
metadata:namespace: default  name: pod-reader
rules:   
- apiGroups: [""] resources: ["configmaps"]resourceNames: ["my-configmap1"]  # 只能在defalut名称空间中查看名为my-configmaop1的ConfigMap verbs: ["get","watch","list"]
# 进行RoleBinding之后可以实现以下效果# 有权限可以查看 my-configmap1
[root@master rbac]# kubectl get configmap my-configmap1
NAME            DATA   AGE
my-configmap1   0      2m1s# 没有权限查看 my-configmap2
[root@master rbac]# kubectl get configmap my-configmap2
Error from server (Forbidden): configmaps "my-configmap2" is forbidden: User "wzh1" cannot get resource "configmaps" in API group "" in the namespace "default"

八、扩展2

8.1、RoleBinding也可以引用ClusterRole,

  • 以将对应ClusterRole中定义的访问权限授予RoleBind所在的名称空间的资源。这种引用是的你跨整个集群定义一组通用的角色,之后在多个名称空间中复用即可。

  • 例如:尽管下面的RoleBinding引用的是一个ClusterRole,“wzh1”(这里的主体,(User用户))只能访问”development“名称空间中的Secret对象,因为RoleBinding所在的名称空间(由其metadata决定)是”developemtn“。

# 创建 ClusterRole角色
[root@master rbac]# cat clusterrole.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"
kind: ClusterRole  # 创建的资源类型
metadata: # "namespace" 被忽略,因为 ClusterRole 不受名称空间限制name: secret-reader  
rules:  # 规则
- apiGroups: [""]  # 核心组,不用纠结这个字段# 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets"resources: ["secrets"]  # 可以操作的资源对象verbs: ["get","watch","list"]  # 可以做使用kubectl对secret做的操作
# 创建 RoleBinding
[root@master rbac]# cat rolebinding.yaml 
apiVersion: "rbac.authorization.k8s.io/v1"
# 此角色绑定运行 “wzh1” 用户读取 “development” 名称空间中的Secret
# 你需要在该名称空间中又有一个名为“secret-reader”的 ClusterRole
kind: RoleBinding   # 创建的类型
metadata:name: read-secretsnamespace: development  # RoleBinding的名称空间决定了访问权限的授予范围
subjects:  
# 你可以指定不止一个“subject(主体)”
- kind: User  # 创建的是用户类型(User)name: wzh1   # 需要绑定的用户apiGroup: rbac.authorization.k8s.io  # 不用纠结这个字段
roleRef:   # 指定与某Role 或 ClusterRole的绑定关系kind: ClusterRole   # 此字段必须是Role 或 ClusterRolename: secret-reader    # 此字段必须要与你绑定的Role 或 ClusterRole的名称匹配apiGroup: rbac.authorization.k8s.io
# 创建所需名称空间
[root@master rbac]# kubectl create namespace development
namespace/development created# 加载资源
[root@master rbac]# kubectl apply -f clusterrole.yaml
[root@master rbac]# kubectl apply -f rolebinding.yaml 
# 验证
# 切换 wzh1 用户
[root@master rbac]# kubectl config use-context wzh1@kubernetes 
[root@master rbac]# kubectl get secrets -n development
NAME                  TYPE                                  DATA   AGE
default-token-sq4t8   kubernetes.io/service-account-token   3      106s# 查看别的名称空间中的secret就会报错没有权限
[root@master rbac]# kubectl get secrets -n default
Error from server (Forbidden): secrets is forbidden: User "wzh1" cannot list resource "secrets" in API group "" in the namespace "default"

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

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

相关文章

平安城市/雪亮工程现状及需求分析:EasyCVR视频汇聚平台助力雪亮工程项目建设

一、背景现状 经过近几年的努力,平安城市雪亮工程建设取得了显著的成绩,完成了前端高清视频点位和高清卡口系统建设,建成了(视频监控类)、(卡口类)和(应用类)的平台。这…

1.Linux_常识

UNIX、Linux、GNU 1、UNIX UNIX是一个分时操作系统,特点是多用户、多任务 实时操作系统:来了请求就去解决请求 分时操作系统:来了请求先存着,通过调度轮到执行时执行 2、Linux Linux是一个操作系统内核 发行版本&#xff1…

C++练习备忘录

1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…

OD C卷 - 传递悄悄话

传递悄悄话 &#xff08;100&#xff09; 给定一个二叉树&#xff0c;节点采用顺序存储&#xff0c;如 i0 表示根节点&#xff0c;2i 1 表示左子树根&#xff0c;2i 2 表示右子树根;每个节点站一个人&#xff0c;节点数值表示由父节点到该节点传递消息需要的时间&#xff1b…

海量数据处理商用短链接生成器平台 - 1

第一章 海量数据处理商用短链接生成器平台介绍 第1集 什么是短链接生成器 短链接生成器是一种工具&#xff0c;可以将较长的链接转换成较短的链接。这种工具在许多场景中都很有用&#xff0c;包括营销、社交媒体分享和数据报告等。以下是一些关于短链接生成器的优点和作用&…

【Kubernetes】集群外部的请求访问集群内应用的最佳方式:Ingress

《Service 服务》系列&#xff0c;共包含以下文章&#xff1a; Service 概念与实战Service 类型&#xff1a;NodePort、ClusterlP、LoadBalancer、ExternalName虚拟 IP 与 Service 的代理模式集群外部的请求访问集群内应用的最佳方式&#xff1a;Ingress &#x1f60a; 如果您…

白骑士的C#教学附加篇 5.1 C#开发工具

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.4 游戏开发 在这一部分&#xff0c;我们将介绍一些额外的内容和工具&#xff0c;以帮助您提高 C# 开发的效率和质量。掌握合适的开发工具和调试技巧&#xff0c;可以让您在编写和维护代码时更加高效和从容。 开发工具对…

智慧水务项目(七)vscode 远程连接ubuntu 20.04 服务器,调试pyscada,踩坑多多

一、说明 以前用过pycharm&#xff0c;远程连接还可以&#xff0c;但是vscode用以前还可以&#xff0c;就用它开发python了&#xff0c;想搞个远程&#xff0c;源码直接放服务器上&#xff0c;能远程调试&#xff0c;其实也很方便的&#xff0c;结果第一次还成功了&#xff0c;…

学习笔记第二十八天

有名管道&#xff08;FIFO&#xff09; 有名管道是Linux系统中一种特殊的文件类型&#xff0c;它允许不相关的进程之间进行通信。有名管道在文件系统中具有具体的路径和名称&#xff0c;因此可以被多个进程共同访问。 特点 持久性&#xff1a;有名管道在文件系统中以文件的形…

LeetCode刷题笔记第231题:2 的幂

LeetCode刷题笔记第231题&#xff1a;2 的幂 题目&#xff1a; 想法&#xff1a; 对输入的数值循环除以2直至数值小于等于1&#xff0c;如果最终的数值为1则为2的幂&#xff0c;小于1则不是2的幂。 class Solution:def isPowerOfTwo(self, n: int) -> bool:if n 1:retur…

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖&#xff1f; 9、…

【Java】 Java 中的 BufferedReader 详解

我听见有人猜 你是敌人潜伏的内线 和你相知多年 我确信对你的了解 你舍命救我画面 一一在眼前浮现 司空见惯了鲜血 你忘记你本是娇娆的红颜 感觉你我彼此都那么依恋 &#x1f3b5; 许嵩《内线》 在 Java 中&#xff0c;处理文件输入和输出操作时&#xff…

如何开发一款流畅、稳定、有趣味性的棋类游戏?

开发一款流畅、稳定且具有趣味性的棋类游戏&#xff0c;需要从多个角度出发&#xff0c;进行全面的设计和技术实现。以下是开发过程中的关键要素&#xff1a; 1. 明确游戏规则与玩法设计&#xff1a; 首先&#xff0c;确定棋类游戏的基本规则和核心玩法。规则需要严谨而不复杂…

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路

东南大学&#xff1a;Wi-Fi 6搭档全光以太&#xff0c;打造“数智东南”信息高速路 - 华为企业业务 打好ICT底座&#xff0c;平台和应用层面就会非常通畅了。首先&#xff0c;出海企业的需求既有普遍性&#xff0c;也有垂直性行业的特性需求。普遍性需求需要通信、沟通数据和传…

虚幻反射-

在Unreal Engine中&#xff0c;如果你想获取一个AActor中的所有FProperty&#xff0c;可以使用TFieldIterator来遍历特定类的属性。以下是一些关键步骤和示例代码&#xff1a; 包含必要的头文件&#xff1a;首先&#xff0c;确保包含了反射相关的头文件。 #include "Engin…

GB/T 26825-2011 FJ抗静电防腐胶检测

FJ抗静电防腐胶是指涂覆于石油、化工贮运设备或建筑物室内地面上&#xff0c;能够防止静电积累并疏导静电快速释放的防腐蚀材料。 GB/T 26825-2011 FJ抗静电防腐胶检测项目&#xff1a; 测试项目 测试方法 干燥时间 GB/T 1728 硬度 GB/T 6739 粘接强度 GB/T 26825 抗压…

Golang | Leetcode Golang题解之第337题打家劫舍III

题目&#xff1a; 题解&#xff1a; func rob(root *TreeNode) int {val : dfs(root)return max(val[0], val[1]) }func dfs(node *TreeNode) []int {if node nil {return []int{0, 0}}l, r : dfs(node.Left), dfs(node.Right)selected : node.Val l[1] r[1]notSelected : …

Kali Linux网络问题解决与静态IP配置技巧

很多用户在使用 Kali Linux 时会遇到无法联网的问题&#xff0c;尤其是在 VMware 虚拟机中。这种情况相当常见&#xff0c;一般都是没有配置DNS服务器或者网卡配置文件的IP和虚拟网络编辑器的IP不一致所导致的&#xff0c;下面我们将探讨如何在 Kali Linux 中配置 DNS 服务和设…

mysql windows安装与远程连接配置

安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程&#xff0c;安装到win10环境) 保持默认选项&#xff0c;点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…