二十、K8S-1-权限管理RBAC详解
目录
k8s RBAC 权限管理详解
一、简介
二、用户分类
1、普通用户
2、ServiceAccount
三、k8s角色&角色绑定
1、授权介绍:
1.1 定义角色:
1.2 绑定角色:
1.3主体(subject)
2、角色(Role和ClusterRole)
1、Role示例:
2、ClusterRole示例:
3、面向用户的默认的ClusterRole
3、角色绑定 (RoleBinding和ClusterRoleBinding)
1、RoleBinding示例:
2、ClusterRoleBinding 示例
4、对主体的引用
1、RoleBinding示例:角色绑定主体
5、对ServiceAccount的授权管理
1、为应用程序特定的服务帐户授予角色 (最佳实践)
2、在命名空间中为“默认”服务帐户(service account)授予角色
3、为命名空间中的所有服务帐户授予角色
4、对集群范围内的所有服务帐户(不鼓励)授予权限(role)
5、将超级用户权限授予集群内的所有服务帐户(强烈反对)
6、命令行工具
1、kubectl create role
2、kubectl create clusterrole
3、kubectl create rolebinding
4、kubectl create clusterrolebinding
k8s RBAC 权限管理详解
一、简介
基于角色(Role)的访问控制(RBAC Role Base Access Control)是一种基于组织中用户的角色来调节控制对计算机或者网络资源的访问的方法。RBAC鉴权机制使用 rbac.authorization.k8s.io API组来驱动鉴权决定, 允许你通过 Kubernetes API 动态配置策略。
k8s 集群相关所有的交互都通过apiserver来完成,对应这样集中式管理的系统来说,权限管理尤为重要,在1.5版本时候引入了RBAC的权限控制机制
让一个用户(Users)扮演一个角色(Role),角色拥有权限,从而让用户拥有这样的权限,随后在 授权机制当中,只需要将权限授予某个角色,此时用户将获取对应角色的权限,从而实现角色的访问 控制
在 k8s 的授权机制当中,采用 RBAC 的方式进行授权,其工作逻辑是,把对对象的操作权限定义到 一个角色当中,再将用户绑定到该角色,从而使用户得到对应角色的权限。如果通过 rolebinding 绑定 role,只能对 rolebingding 所在的名称空间的资源有权限。另外,k8s 为此还有一种集群级别的授权机制,就是定义一个集群角色(ClusterRole),对集群内 的所有资源都有可操作的权限,从而将 User2 通过 ClusterRoleBinding 到 ClusterRole,从而使 User2 拥有集群的操作权限。
启用RBAC,需要在 apiserver 中添加参数–authorization-mode=RBAC,如果使用的kubeadm安装的集群,1.6+版本都默认开启了RBAC。
[root@k8s-master-1 cfg]# cat kube-apiserver.conf | grep authorization--authorization-mode=RBAC,Node \
API Server 目前支持一下集中授权策略
- Webhook:通过调用外部REST服务对用户进行授权。
- RBAC:Role-Based Access Control,基于角色的访问控制(本章讲解)。
- Node:是一种专用模式,用于对kubelet发出的请求进行访问控制。
二、用户分类
k8s的用户分两种,一种是普通用户,一种是ServiceAccount(服务账户)
1、普通用户
- 普通用户是假定被外部或独立服务管理的,管理员分配私钥,平时常用的kubectl命令都是普通用户执行的
- 如果是用户需求权限,则将Role与User(或Group)绑定(需要创建User/Group),是给用户使用的。
2、ServiceAccount
- ServiceAccount(服务帐户)是由Kubernetes API管理的用户。它们绑定到特定的命名空间,并由API服务器自动创建或通过API调用手动创建。服务帐户与存储为Secrets的一组证书相关联,这些凭据被挂载到pod中,以便集群进程与Kubernetes API通信。(登录dashboard时我们使用的就是ServiceAccount)
- 如果是程序需求权限,将Role与ServiceAccount指定(这需要创建ServiceAccount并且在deployment中指定ServiceAccount),是给程序使用的。
工作流程图:
三、k8s角色&角色绑定
k8s引入了4个资源对象:Role、ClusterRole、RoleBinding、ClusterRoleBinding
1、授权介绍:
在RBAC API中,通过如下步骤进行授权
1.1 定义角色:
在定义角色时会指定此角色对于资源的访问控制规则
Role:角色,包含一组权限的规则,没有拒绝规则,只是附加运行,namespaces隔离,只作用于命名空间。授权特定命名空间的访问权限
ClusterRole:和Role的区别,Role只作用于命名空间内,ClusterRole作用于整个集群,也就是所有Namespace
1.2 绑定角色:
将主体与角色进行绑定,对用户进行访问授权
RoleBinding:作用于命名空间内,将ClusterRole或Role绑定于主体(User、Group或ServiceAccount)
ClusterRoleBinding:作用于整个集群,将ClusterRole或Role绑定于主体(User、Group或ServiceAccount)
1.3主体(subject)
User:用户
Group:用户组
ServiceAccount:服务账户
2、角色(Role和ClusterRole)
角色Role是权限的定义,在k8s中角色分为两种,
1、Role针对特定的命名空间的访问权限,
2、ClusterRole在整个集群范围内都生效。为啥要用两种资源?因为k8s对象作用域已经被划分为集群和命名空间两部分了。
需要注意:角色只有授权,没有禁止。
授权词 | 说明 |
get | 列出单个资源 |
list | 列出资源类型的集合 |
create | 创建 |
update | 修改全部资源 |
patch | 修改部分资源 |
watch | 动态监控 |
proxy | 代理 |
redirect | 重定向 |
use | 调用 |
delete | 删除 |
deletecollection | 级联删除 |
相关参数:构成一个role 需要三部分
- Verbs:设置允许对资源对象操作的方法列表,如:{“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”, “exec”}
- resources:需要操作的资源类型列表,如:{“services”, “endpoints”, “pods”,“secrets”,“configmaps”,“crontabs”,“deployments”,“jobs”,“nodes”,“rolebindings”,“clusterroles”,“daemonsets”,“replicasets”,“statefulsets”,“horizontalpodautoscalers”,“replicationcontrollers”,“cronjobs”}
- apiGroups:资源对象的API组列表:"" 缺省为 core 组资源,如: “”,“apps”, “autoscaling”, “batch”
1、Role示例:
1、命令行方式创建
kubectl create role <RoleName> [options]常用的options 如上示例:创建一个名为pod-role的role,可以操作的资源为pod,可以进行的操作为get, watch, list
[root@k8s-master-1 rbac]# kubectl create role pod-role --resource=pod --verb=get,watch,list
role.rbac.authorization.k8s.io/pod-role created2、yaml文件方式创建
[root@k8s-master-1 rbac]# vim role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: pod-rolenamespace: default
rules:
- apiGroups: [""] # "" indicates the core API groupresources: ["pods"]verbs: ["get", "watch", "list"][root@k8s-master-1 rbac]# kubectl apply -f role.yaml
role.rbac.authorization.k8s.io/pod-role created[root@k8s-master-1 rbac]# kubectl get role
NAME CREATED AT
pod-role 2023-06-19T07:51:55Z[root@k8s-master-1 rbac]# kubectl describe role pod-role
Name: pod-role
Labels: <none>
Annotations: <none>
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----pods [] [] [get watch list]- - - - - - -对资源的引用 - - - - - - - - -
kubernetes API中,大多数资源都是使用对象名称的字符串表示来呈现与访问的。例如pod 应使用"pods",有一些kubernetes API涉及子资源,
在RBAC角色表达资资源时,使用斜线(/)来分隔资源和子资源。1、要允许某主体读取pod 同时访问这些pod的log子资源
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-and-pod-logs-reader
rules:
- apiGroups: [""]resources: ["pods", "pods/log"]verbs: ["get", "list"]2、对于某些请求,也可以通过resourceNames列表按名称引用资源,在指定时,可以将请求限定为资源的单个实例,
下面的例子中可以get和update 一个名为my-configmap 的 ConfigMap
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: configmap-updater
rules:
- apiGroups: [""]# 在 HTTP 层面,用来访问 ConfigMap 资源的名称为 "configmaps"resources: ["configmaps"]resourceNames: ["my-configmap"]verbs: ["update", "get"]
注意:
如果resources:填写的资源是["pods", "services"]等,apiGroups:可以直接用空来表示所有 [""],但是如果resources中添加了["deployments"],绑定的用户在创建deployment时候就会报错,没有权限。这是为啥?
因为apiGroups 为空的话,他只是针对单级的资源生效,
比方说 xx 例如 apiServer: v1,就是单级的,有pod、svc、ep...
还有两级的 比如:xx/yy 例如apiServer: apps/v1 他的父级就是apps 包括 :deployment、ds...
可以使用如下命令查看资源
kubectl apiresources 查看
示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: pod-rolenamespace: default
rules:
- apiGroups: ["","apps"] #因为deployments 的父级是apps ,添加了apps才会生效。resources: ["pods","deployments"]verbs: ["get", "watch", "list"]
或者deployment可以单独写个规则
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: pod-rolenamespace: default
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]resources: ["deployments"]verbs: ["get", "watch", "list"]
2、ClusterRole示例:
1、命令行方式创建
kubectl create clusterrole <ClusterRoleName> [options]
常用的options 如上
示例:创建一个名为pod-clusterrole的ClusterRole,可以操作的资源为pod,可以进行的操作为get, watch, list[root@k8s-master-1 rbac]# kubectl create clusterrole pod-clusterrole --resource=pod --verb=get,watch,list
clusterrole.rbac.authorization.k8s.io/pod-clusterrole created2、通过yaml文件方式创建
[root@k8s-master-1 rbac]# vim clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: pod-clusterrolenamespace: default #被忽略,因为clusterRole不收命名空间限制
rules:
- apiGroups: [""] # "" indicates the core API groupresources: ["pods"]verbs: ["get", "watch", "list"][root@k8s-master-1 rbac]# kubectl apply -f clusterrole.yaml
clusterrole.rbac.authorization.k8s.io/pod-clusterrole created[root@k8s-master-1 rbac]# kubectl get clusterrole |grep pod
pod-clusterrole 2023-06-19T07:57:37Z[root@k8s-master-1 rbac]# kubectl describe clusterrole pod-clusterrole
Name: pod-clusterrole
Labels: <none>
Annotations: <none>
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----pods [] [] [get watch list]
3、面向用户的默认的ClusterRole
有些系统 的默认角色不是以“system”为前缀的,这部分角色时面向用户设置的,他们包含超级用户角色 (cluster-admin), 使用 ClusterRoleBinding 的集群范围的角色 (cluster-status), 以及是用RoleBding 的具体某个 namespace中的角色 (admin, edit, view)。
默认的ClusterRole | 默认的ClusterRoleBinding | 描述 |
cluster-admin | system:masters group | 允许在任何资源上执行任何操作,当通过ClusterRoleBinding 使用此角色时,授权所有民命空间下的所有资源,当使用 Rolebinding 时,授权rolebingding 所在的 命名空间下的所有资源,并包含命名空间自身所代表的资源 |
admin | None | 允许管理员访问,一般与Rolebinding搭配使用,绑定到一个命名空间中,可以读写大多数命名空间中的资源,并且可以在命名空间中创建 role 和 rolebinding,不允许访问命名空间中的资源配额,和命名空间自身 |
edit | None | 允许读写命名空间中的大多数资源,不过不允许查看和修改角色 (role)和角色绑定 (role binding) |
view | None | 允许读命名空间中的大多数资源,不过不允许查看和修改角色 (role)和角色绑定 (role binding),不允许查看secrets 资源 |
3、角色绑定 (RoleBinding和ClusterRoleBinding)
上边代码块 我们定义了角色,下一步就是将角色关联到用户,角色绑定是将我们创建的角色中定义好的权限赋予给一个或者一组用户,即主体(subject),RoleBinding 在指定的命名空间中执行授权,而 ClusterRoleBinding 在集群范围执行授权。
一个 RoleBinding 可以引用同一名字空间中的任何 Role。 或者,一个 RoleBinding 可以引用某 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 所在的名字空间。 如果你希望将某 ClusterRole 绑定到集群中所有名字空间,你要使用 ClusterRoleBinding。
注意:
在集群角色绑定(ClusterRoleBinding)中引用的角色只能是集群级别的角色(ClusterRole),而不能是命名空间级别的Role。
一旦通过创建RoleBinding或者ClusterRoleBinding与某个Role或者ClusterRole完成了绑定,用户就无法修改与之绑定的Role和ClusterRole了。只有删除了RoleBinding或者ClusterRoleBinding,才能修改Role和ClusterRole。
1、RoleBinding示例:
1、命令行方式创建
1.1 先创建serviceaccount服务账户
# kubectl create sa <Name> 或 kubectl create serviceAccount <Name>
# 例如
# kubectl create serviceaccount zhangsan创建完serviceaccount服务账户之后,可以根据账户信息,查询到相应的token
[root@k8s-master-1 rbac]# kubectl describe serviceaccount zhangsan
Name: zhangsan
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none> #自动添加到所有与该SA绑定的pod
Mountable secrets: zhangsan-token-8n48m
Tokens: zhangsan-token-8n48m #认证需要的token
Events: <none>[root@k8s-master-1 rbac]# kubectl describe secrets zhangsan-token-8n48m
Name: zhangsan-token-8n48m
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: zhangsankubernetes.io/service-account.uid: fdae783b-aa7d-42f5-a5e0-3856c0f50c0eType: kubernetes.io/service-account-tokenData
====
ca.crt: 1143 bytes
namespace: 7 bytes
token: 太长删掉了1.2创建rolebinding
# kubectl create rolebinding <RBNAME> [options]
#常用options:
--role='':要进行绑定的role的name
--serviceaccount=[]:要进行绑定的clusterrole的name
--clusterrole='':要进行绑定的serviceaccount的name# 例如 将read-pods和zhangsan进行绑定,绑定后zhangsana就拥有了role中定义的规则,需要指定命名空间--serviceaccount=namespaces:zhangsan[root@k8s-master-1 rbac]# kubectl create rolebinding read-pods --role=pod-role --serviceaccount=default:zhangsan
rolebinding.rbac.authorization.k8s.io/read-pods created2、通过yaml文件方式创建
[root@k8s-master-1 rbac]# vim rolebinding.yamlapiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "zhangsan" 读取 "default" 命名空间中的 Pod
。你需要在该命名空间中有一个名为 “pod-role” 的 Role
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: ServiceAccount/User/Groupname: zhangsan # "name" 是区分大小写的apiGroup: rbac.authorization.k8s.io #ServiceAccount 不需要添加这行,User 需要添加 Group没试
roleRef:# "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系kind: Role # 此字段必须是 Role 或 ClusterRolename: pod-role # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配apiGroup: rbac.authorization.k8s.io[root@k8s-master-1 rbac]# kubectl apply -f rolebinding.yaml
rolebinding.rbac.authorization.k8s.io/read-pods created[root@k8s-master-1 rbac]# kubectl get RoleBinding
NAME ROLE AGE
read-pods Role/pod-role 5s[root@k8s-master-1 rbac]# kubectl describe RoleBinding read-pods
Name: read-pods
Labels: <none>
Annotations: <none>
Role:Kind: RoleName: pod-role
Subjects:Kind Name Namespace---- ---- ---------User zhangsan
- - - - - - - roleBinding也可以引用clusterRole - - - - - - - - - - - - - - - [root@k8s-master-1 rbac]# vim rolebinding2.yaml
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "zhangsan" 读取 "default" 名字空间中的 Pod
。你需要在该名字空间中有一个名为 “pod-clusterrole” 的 ClusterRole
kind: RoleBinding
metadata:name: read-secretsnamespace: default
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: Username: zhangsan # "name" 是区分大小写的apiGroup: rbac.authorization.k8s.io
roleRef:# "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系kind: ClusterRole # 此字段必须是 Role 或 ClusterRolename: pod-clusterrole # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配apiGroup: rbac.authorization.k8s.io[root@k8s-master-1 rbac]# kubectl apply -f rolebinding2.yaml
rolebinding.rbac.authorization.k8s.io/read-secrets created[root@k8s-master-1 rbac]# kubectl get RoleBinding
NAME ROLE AGE
read-pods Role/pod-role 13m
read-secrets ClusterRole/pod-clusterrole 9s
[root@k8s-master-1 rbac]# kubectl describe RoleBinding read-secrets
Name: read-secrets
Labels: <none>
Annotations: <none>
Role:Kind: ClusterRoleName: pod-clusterrole
Subjects:Kind Name Namespace---- ---- ---------User zhangsan
2、ClusterRoleBinding 示例
1、命令行创建
# 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 Secret 资源
[root@k8s-master-1 rbac]# kubectl create clusterrolebinding read-secrets-global --clusterrole=pod-clusterrole --group=manager -n 命名空间
clusterrolebinding.rbac.authorization.k8s.io/read-secrets-global created2、yaml文件方式
[root@k8s-master-1 rbac]# vim clusterRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: read-secrets-global
subjects:
- kind: Groupname: manager # 'name' 是区分大小写的apiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: pod-clusterroleapiGroup: rbac.authorization.k8s.io
[root@k8s-master-1 rbac]# kubectl apply -f clusterRoleBinding.yaml
clusterrolebinding.rbac.authorization.k8s.io/read-secrets-global created
[root@k8s-master-1 rbac]# kubectl get clusterRoleBinding
NAME ROLE AGEread-secrets-global ClusterRole/pod-clusterrole 10s
4、对主体的引用
RoleBinding或者ClusterRoleBinding 可绑定角色到某“主体(Subject)”上。主体可以是用户、组或者服务账户。
1、RoleBinding示例:角色绑定主体
下面示例是RoleBinding中的片段,仅展示subject的部分
1、对于名称为 alice@example.com 的用户:
subjects:
- kind: Username: "alice@example.com"apiGroup: rbac.authorization.k8s.io2、对于名称为frontend-admins 的用户组:
subjects:
- kind: Groupname: "frontend-admins"apiGroup: rbac.authorization.k8s.io3、对于kube-system 命名空间中的默认服务账户:
subjects:
- kind: ServiceAccountname: defaultnamespace: kube-system4、对于 "qa" 命名空间中的所有服务账户:
subjects:
- kind: Groupname: system:serviceaccounts:qaapiGroup: rbac.authorization.k8s.io5、对于在任何名字空间中的服务账户:
subjects:
- kind: Groupname: system:serviceaccountsapiGroup: rbac.authorization.k8s.io6、对于所有已经过身份认证的用户:
subjects:
- kind: Groupname: system:authenticatedapiGroup: rbac.authorization.k8s.io7、对于所有未通过身份认证的用户:
subjects:
- kind: Groupname: system:unauthenticatedapiGroup: rbac.authorization.k8s.io8、对于所有用户:
subjects:
- kind: Groupname: system:authenticatedapiGroup: rbac.authorization.k8s.io
- kind: Groupname: system:unauthenticatedapiGroup: rbac.authorization.k8s.io
5、对ServiceAccount的授权管理
默认RBAC策略向控制平面(controll plane),节点和控制器授予拥有范围限制的权限,但不向“kube-system”命名空间之外的服务帐户(service account)授予权限(超出所有已验证用户的发现权限)
从最安全到最不安全的方法是:
1、为应用程序特定的服务帐户授予角色 (最佳实践)
这要求应用程序在其pod规范中指定serviceAccountName,并且要在之前创建好服务帐户(通过API,应用程序清单【application manifest】,kubectl 等方式创建)。
例如,将“my-namespace”中的只读权限授予“my-sa”服务帐户:
kubectl create rolebinding my-sa-view --clusterrole=view --serviceaccount=my-namespace:my-sa --namespace=my-namespace
2、在命名空间中为“默认”服务帐户(service account)授予角色
例如,将“my-namespace”中的只读权限授予“默认”服务帐户:
kubectl create rolebinding default-view --clusterrole=view --serviceaccount=my-namespace:default --namespace=my-namespace
3、为命名空间中的所有服务帐户授予角色
例如,将“my-namespace”中的只读权限授予该命名空间中的所有服务帐户:所有用户 肯定是个组啊
kubectl create rolebinding test --clusterrloe=view --group=system:serviceaccounts:my-namespace --namespace=my-namespace
4、对集群范围内的所有服务帐户(不鼓励)授予权限(role)
例如,将所有命名空间中的只读权限授予群集中的所有服务帐户:
kubectl create clusterrolebinding serviceaccounts-view --clusterrole=view --group=system:serviceaccounts
5、将超级用户权限授予集群内的所有服务帐户(强烈反对)
在此不做演示
目录
k8s RBAC 权限管理详解
一、简介
二、用户分类
1、普通用户
2、ServiceAccount
三、k8s角色&角色绑定
1、授权介绍:
1.1 定义角色:
1.2 绑定角色:
1.3主体(subject)
2、角色(Role和ClusterRole)
1、Role示例:
2、ClusterRole示例:
3、面向用户的默认的ClusterRole
3、角色绑定 (RoleBinding和ClusterRoleBinding)
1、RoleBinding示例:
2、ClusterRoleBinding 示例
4、对主体的引用
1、RoleBinding示例:角色绑定主体
5、对ServiceAccount的授权管理
1、为应用程序特定的服务帐户授予角色 (最佳实践)
2、在命名空间中为“默认”服务帐户(service account)授予角色
3、为命名空间中的所有服务帐户授予角色
4、对集群范围内的所有服务帐户(不鼓励)授予权限(role)
5、将超级用户权限授予集群内的所有服务帐户(强烈反对)
6、命令行工具
1、kubectl create role
2、kubectl create clusterrole
3、kubectl create rolebinding
4、kubectl create clusterrolebinding
6、命令行工具
1、kubectl create role
创建Role对象,定义在某一命名空间中的权限
1、创建名称为 “pod-reader” 的 Role 对象,允许用户对 Pods 执行get、watch 和 list 操作:并创建a.yaml文件[root@k8s-master-1 rbac]# kubectl create role pod-reader --verb=get,list,watch --resource=pods -oyaml > a.yaml
role.rbac.authorization.k8s.io/pod-reader created2创建名称为 “pod-reader” 的 Role 对象并指定resourceNames:
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod3、创建名为 “foo” 的 Role 对象并指定 apiGroups:
kubectl create role foo --verb=get,list,watch --resource=replicasets.apps4、创建名为 “foo” 的 Role 对象并指定子资源权限:
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status5、创建名为 “my-component-lease-holder” 的 Role 对象,使其具有对特定名称的资源执行 get/update 的权限:
kubectl create role my-component-lease-holder --verb=get,list,watch,update --resource=lease --resource-name=my-component
2、kubectl create clusterrole
1、创建名称为 “pod-reader” 的 ClusterRole 对象,允许用户对 Pods 对象执行 get、 watch 和 list 操作:并创建a.yaml文件kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods -oyaml > a.yaml2、创建名为 “pod-reader” 的 ClusterRole 对象并指定 resourceNames:
kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod3、创建名为 “foo” 的 ClusterRole 对象并指定 apiGroups:
kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps4、创建名为 “foo” 的 ClusterRole 对象并指定子资源:
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status5、创建名为 “foo” 的 ClusterRole 对象并指定 nonResourceURL:
kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*6、创建名为 “monitoring” 的 ClusterRole 对象并指定 aggregationRule:
kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true"
3、kubectl create rolebinding
在特定的命名空间中对Role或者ClusterRole授权
1、在名字空间 “acme” 中,将名为 admin 的 ClusterRole 中的权限授予名称 “bob” 的用户: 并创建a.yaml文件
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme -oyaml > a.yaml2、在名字空间 “acme” 中,将名为 view 的 ClusterRole 中的权限授予名字空间 “acme” 中名为 myapp 的服务账户:
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme3、在名字空间 “acme” 中,将名为 view 的 ClusterRole 对象中的权限授予名字空间 “myappnamespace” 中名称为 myapp 的服务账户:
kubectl create rolebinding myappnamespace-myapp-view-binding --clusterrole=view --serviceaccount=myappnamespace:myapp --namespace=acme
4、kubectl create clusterrolebinding
在整个集群(所有命名空间)中用ClusterRole授权
1、在整个集群范围,将名为 cluster-admin 的 ClusterRole 中定义的权限授予名为 “root” 用户:并创建a.yaml文件
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root -oyaml > a.yaml2、在整个集群范围内,将名为 system:node-proxier 的 ClusterRole 的权限授予名为 “system:kube-proxy” 的用户:
kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy3、在整个集群范围内,将名为 view 的 ClusterRole 中定义的权限授予 “acme” 名字空间中名为 “myapp” 的服务账户:
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp
相关文章:

二十、K8S-1-权限管理RBAC详解
目录 k8s RBAC 权限管理详解 一、简介 二、用户分类 1、普通用户 2、ServiceAccount 三、k8s角色&角色绑定 1、授权介绍: 1.1 定义角色: 1.2 绑定角色: 1.3主体(subject) 2、角色(Role和Cluster…...

【PTA|期末复习|编程题】数组相关编程题(一)
目录 7-1 乘法口诀数列 (20分) 输入格式: 输出格式: 输入样例: 输出样例: 样例解释: 代码 7-2 矩阵列平移(20分) 输入格式: 输出格式: 输入样例: 输出样例: …...

[office] 怎么在Excel2003菜单栏自定义一个选项卡 #其他#微信#知识分享
怎么在Excel2003菜单栏自定义一个选项卡 怎么在Excel2003菜单栏自定义一个选项卡 ①启动Excel2003,单击菜单栏--工具--自定义。 ②在自定义界面,我们单击命令标签,在类别中选择新菜单,鼠标左键按住新菜单,拖放到菜单栏…...
面试 JavaScript 框架八股文十问十答第六期
面试 JavaScript 框架八股文十问十答第六期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)use strict是什么…...

【Web】小白友好的Java内存马基础学习笔记
目录 简介 文件马与内存马的比较 文件马原理 内存马原理 内存马使用场景 内存马分类 内存马注入方式 这篇文章主要是概念性的,具体技术细节不做探究,重点在祛魅。 简介 内存马(Memory Shellcode)是一种恶意攻击技术&…...
Rust猜数字游戏
Rust进阶:猜数字游戏 Rust是一门现代的系统级编程语言,注重内存安全、并发性能以及表达力。在这篇博客中,我们将深入介绍一个更加复杂的猜数字游戏代码,展示Rust语言的一些高级特性。 代码示例 以下是一个升级版的Rust猜数字游…...
.gitlab-ci.yml文件参数配置和使用
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
Go语言从基础到高级-目录
一、编程入门和Go语言简介 什么是编程和为什么要学习编程计算机编程的基本概念Go语言简介为什么选择Go语言 二、设置Go语言开发环境 如何安装Go语言设置环境变量Go语言的工作空间配置 三、Go语言基础 Hello, World!初体验变量和常量数据类型(整数、浮点数、字符…...
Linux CentOS stream 9 alias
alias命令在Linux中用于创建命令别名。它允许用户为常用的命令或命令组合创建短而易记的别名,从而提高工作效率。 alias命令与windows中的快捷方式相同,执行别名时,终端解释器就进行查询与转换,进而执行原来的完整命令。 熟练使用alias命令可以使我们将一长串命令或者一些…...
WebSocketServer+redis实时更新页面数据
redis 实现发布订阅功能具体实现_redis convertandsend-CSDN博客 主要看上面这个 使用redis做websocket分布式消息推送服务_websocket redis-CSDN博客 ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject 的解决办法_java.lang.class…...
快速掌握Vue.js框架:从入门到实战
一、引言 Vue.js,作为一款广受欢迎的渐进式JavaScript框架,以其轻量级、易用性和高效性在前端开发领域占据了一席之地。Vue.js遵循MVVM(Model-View-ViewModel)设计模式,它通过双向数据绑定机制简化了开发者对用户界面与底层数据模型之间关系的处理,使得构建现代Web应用变…...

###C语言程序设计-----C语言学习(11)#数据的存储和基本数据类型
前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 一. 数据的存储 1.整型数据的存储 计算机处理的所有信息都以二进制形式表示…...
机器学习案例1:利用 Python 将语音转换为文本
目录 内容简介 基本环境配置 Python库安装 麦克风语音识别 音频文件的语音识别 长音频源语音识别 内容简介 语音识别是机器或程序识别口语中的单词和短语并将其转换为文本信息的能力。 大多数对于语音识别技术的应用场景就是Siri、Cortana和Google Assistant等个人助理,…...

杨辉三角的变形(数学)
题目 import java.util.Scanner;public class Main {public static void main(String[] args) { // 1 // 1 1 1 // 1 2 3 2 1 // 1 3 6 7 6 3 1 // 1 4 10 16 19 16 10 4 1Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] res new int[n1][2*n];for(i…...
YOLOv5改进 | 融合改进篇 | 华为VanillaNet + BiFPN突破涨点极限
一、本文介绍 本文给大家带来的改进机制是华为VanillaNet主干配合BiFPN实现融合涨点,这个主干是一种注重极简主义和效率的神经网络我也将其进行了实验, 其中的BiFPN不用介绍了从其发布到现在一直是比较热门的改进机制,其主要思想是通过多层级的特征金字塔和双向信息传递来提…...

C++初阶篇----新手进村
目录 一、什么是C二、C关键字三、命名空间3.1命名空间的定义3.2命名空间的使用 四、C输入和输出五、缺省参数5.1缺省参数的概念5.2缺省参数的分类 六、函数重载6.1函数重载的概念6.2函数重载的原理----名字修饰 七、引用7.1引用概念7.2引用特性7.3常引用7.4引用的使用7.5传值、…...

假期刷题打卡--Day26
1、MT1212乘法表 请编写一个简单程序,输出九九乘法表。输入n,就输出乘法表到n的地方。 格式 输入格式: 输入整型 输出格式: 输出整型。形式如:1*11 样例 1 输入: 5输出: 1*11 2*12 …...

159基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类
基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类,聚类结果效果好,DBSCAN不要求我们指定集群的数量,避免了异常值,并且在任意形状和大小的集群中工作得非常好。它没有质心,聚类簇是通过将相邻的点连接…...
CVPR 2023: GANmouflage: 3D Object Nondetection with Texture Fields
我们使用以下6个分类标准对本文的研究选题进行分析: 1. 伪装类型: 自然伪装: 此类别关注受自然界伪装策略启发或直接复制的研究。这包括研究动物的体色、图案和纹理,为人工伪装的设计提供信息,通常以生物学真实性和有效性为目标 (例如,参考文献 [12, 19, 30, 48])。人工伪…...
【ASP.NET Core 基础知识】--部署和维护--日志记录和错误处理
一、日志记录(Logging) 1.1 日志记录的概念 日志记录是一种记录系统运行状态、活动和事件的重要机制。在软件开发和系统管理中,日志记录扮演着关键角色,用于追踪应用程序的执行过程、监视系统的健康状况、诊断问题和安全审计等。在ASP.NET Core等现代W…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...