二十、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 需要三部分

  1. Verbs:设置允许对资源对象操作的方法列表,如:{“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”, “exec”}
  2. resources:需要操作的资源类型列表,如:{“services”, “endpoints”, “pods”,“secrets”,“configmaps”,“crontabs”,“deployments”,“jobs”,“nodes”,“rolebindings”,“clusterroles”,“daemonsets”,“replicasets”,“statefulsets”,“horizontalpodautoscalers”,“replicationcontrollers”,“cronjobs”}
  3. 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 created

2、yaml文件方式创建
[root@k8s-master-1 rbac]# vim role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-role
  namespace: default
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["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: default
  name: 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: default
  name: 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-role
  namespace: 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-role
  namespace: 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 created

2、通过yaml文件方式创建
[root@k8s-master-1 rbac]# vim clusterrole.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-clusterrole
  namespace: default #被忽略,因为clusterRole不收命名空间限制
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["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: zhangsan
              kubernetes.io/service-account.uid: fdae783b-aa7d-42f5-a5e0-3856c0f50c0e

Type:  kubernetes.io/service-account-token

Data
====
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 created

2、通过yaml文件方式创建
[root@k8s-master-1 rbac]# vim rolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "zhangsan" 读取 "default" 命名空间中的 Pod
。你需要在该命名空间中有一个名为 “pod-role” 的 Role
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: ServiceAccount/User/Group
  name: zhangsan # "name" 是区分大小写的
  apiGroup: rbac.authorization.k8s.io    #ServiceAccount 不需要添加这行,User 需要添加 Group没试
roleRef:
  # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
  kind: Role        # 此字段必须是 Role 或 ClusterRole
  name: 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:  Role
  Name:  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-secrets
  namespace: default
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: User
  name: zhangsan # "name" 是区分大小写的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
  kind: ClusterRole        # 此字段必须是 Role 或 ClusterRole
  name: 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:  ClusterRole
  Name:  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 created

2、yaml文件方式
[root@k8s-master-1 rbac]# vim clusterRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager      # 'name' 是区分大小写的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-clusterrole
  apiGroup: 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                                                               AGE

read-secrets-global                                     ClusterRole/pod-clusterrole                                        10s

4、对主体的引用

        RoleBinding或者ClusterRoleBinding 可绑定角色到某“主体(Subject)”上。主体可以是用户、组或者服务账户。

1、RoleBinding示例:角色绑定主体

        下面示例是RoleBinding中的片段,仅展示subject的部分

1、对于名称为 alice@example.com 的用户:
subjects:
- kind: User
  name: "alice@example.com"
  apiGroup: rbac.authorization.k8s.io

2、对于名称为frontend-admins 的用户组:
subjects:
- kind: Group
  name: "frontend-admins"
  apiGroup: rbac.authorization.k8s.io

3、对于kube-system 命名空间中的默认服务账户:
subjects:
- kind: ServiceAccount
  name: default
  namespace: kube-system

4、对于 "qa" 命名空间中的所有服务账户:
subjects:
- kind: Group
  name: system:serviceaccounts:qa
  apiGroup: rbac.authorization.k8s.io

5、对于在任何名字空间中的服务账户:
subjects:
- kind: Group
  name: system:serviceaccounts
  apiGroup: rbac.authorization.k8s.io

6、对于所有已经过身份认证的用户:
subjects:
- kind: Group
  name: system:authenticated
  apiGroup: rbac.authorization.k8s.io

7、对于所有未通过身份认证的用户:
subjects:
- kind: Group
  name: system:unauthenticated
  apiGroup: rbac.authorization.k8s.io

8、对于所有用户:
subjects:
- kind: Group
  name: system:authenticated
  apiGroup: rbac.authorization.k8s.io
- kind: Group
  name: system:unauthenticated
  apiGroup: 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 created

2创建名称为 “pod-reader” 的 Role 对象并指定resourceNames:
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

3、创建名为 “foo” 的 Role 对象并指定 apiGroups:
kubectl create role foo --verb=get,list,watch --resource=replicasets.apps

4、创建名为 “foo” 的 Role 对象并指定子资源权限:
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status

5、创建名为 “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.yaml

2、创建名为 “pod-reader” 的 ClusterRole 对象并指定 resourceNames:
kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

3、创建名为 “foo” 的 ClusterRole 对象并指定 apiGroups:
kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps

4、创建名为 “foo” 的 ClusterRole 对象并指定子资源:
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status

5、创建名为 “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.yaml

2、在名字空间 “acme” 中,将名为 view 的 ClusterRole 中的权限授予名字空间 “acme” 中名为 myapp 的服务账户:
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme

3、在名字空间 “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.yaml

2、在整个集群范围内,将名为 system:node-proxier 的 ClusterRole 的权限授予名为 “system:kube-proxy” 的用户:
kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy

3、在整个集群范围内,将名为 view 的 ClusterRole 中定义的权限授予 “acme” 名字空间中名为 “myapp” 的服务账户:
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】MySQL表的增删改查(进阶)

MySQL表的增删改查&#xff08;进阶&#xff09; 1. 数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE:唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN KEY&#xff1a;外键约束:1.7 CHECK约束&#xff08;了解&#xff09; 2. 表的设…

emmet语法

一.html $排序 直接.dem或#two是默认div 内容可写{}里 二.css 直接写首字母 三.格式化 一次&#xff08;右键格式化&#xff09; 永久

最佳视频转换器软件:2024年视频格式转换的选择

我们生活在一个充满数字视频的世界&#xff0c;但提供的内容远不止您最喜欢的流媒体服务目录。虽然我们深受喜爱的设备在播放各种自制和下载的视频文件方面变得越来越好&#xff0c;但在很多情况下您都需要从一种格式转换为另一种格式。 经过大量测试&#xff0c; 我们尝试过…

《动手学深度学习(PyTorch版)》笔记8.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

JSP页面模型

1. JSP页面模型 JSP页面模型描述如何为所提供的协议通过请求对象创建响应对象。JSP容器将Web客户端发送的请求下发给JSP页面实现对象,并向Web客户端返回响应。JSP页面实现对象时一个servlet,运行时表示JSP页面,由JSP容器执行。 在JSP页面作者和JSP容器之间定义合同的方法 …

Android:Cordova,JavaScript操作设备功能

Cordova学习 Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。 Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码。 Cordova是PhoneGap贡献给Apache后的开源项目,是从…

OpenCV-35 查找轮廓

一、 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线&#xff0c;轮廓在形状分析和物体的检测识别中很有用。 用于图形分析物体的识别和检测 注意点&#xff1a; 为了检测的准确性&#xff0c;需要先对图像进行二值化或Canny操作。画轮廓时会修改输入的图像&a…

C++ dfs 的状态表示(五十一)【第十一篇】

今天我们接着学习dfs&#xff08;状态表示&#xff09;。 1.抽象形式的dfs 前面用到的 DFS 算法都是比较容易想象出搜索过程的&#xff0c;接下来我们看一些不那么容易想象搜索过程的 DFS 过程&#xff0c;这些问题我们称为抽象形式的 DFS。 来回顾一下上节课遇到的一个问题&a…

Kubernetes实战(二十六)-K8S 部署Dashboard UI

Kubernetes Dashboard是Kubernetes集群的通用、基于Web的UI。它允许用户管理集群中运行的应用程序并对其进行故障排除&#xff0c;以及管理集群本身。 访问到DashBoard有两种方式&#xff1a; 通过KubernetesAPI访问&#xff1a;Dashboard是Kubernetes的内置的UI插件&#xff…

JavaEE作业-实验二

目录 1 实验内容 2 实验要求 3 思路 4 核心代码 5 实验结果 1 实验内容 实现两个整数求和的WEB程序 2 实验要求 ①采用SpringMVC框架实现 ②数据传送到WEB界面采用JSON方式 3 思路 ①创建一个SpringMVC项目&#xff0c;配置好相关的依赖和配置文件。 ②创建一个Con…

Python __pycache__文件

pycharm配置位置 几个基本概念 源代码&#xff08;source code&#xff09; 我们每天编写的Python、Java、C等代码通常指的就是源代码&#xff0c;源代码的特点是人类可读。但是CPU只能读懂二进制&#xff0c;看不懂我们写的源代码&#xff0c;因此还需要进行编译&#xff08…

【EAI 014】Gato: A Generalist Agent

论文标题&#xff1a;A Generalist Agent 论文作者&#xff1a;Scott Reed, Konrad Zolna, Emilio Parisotto, Sergio Gomez Colmenarejo, Alexander Novikov, Gabriel Barth-Maron, Mai Gimenez, Yury Sulsky, Jackie Kay, Jost Tobias Springenberg, Tom Eccles, Jake Bruce,…

ChatGpt报错:We ran into an issue while authenticating you解决办法

在登录ChatGpt时报错&#xff1a;Oops&#xff01;,We ran into an issue while authenticating you.(我们在验证您时遇到问题)&#xff0c;记录一下解决过程。 完整报错&#xff1a; We ran into an issue while authenticating you. If this issue persists, please contact…

MATLAB环境下用于提取冲击信号的几种解卷积方法

卷积混合考虑了信号的时延&#xff0c;每一个单独源信号的时延信号都会和传递路径发生一 次线性瞬时混合&#xff1b;解卷积的过程就是找一个合适的滤波器&#xff0c;进行反卷积运算&#xff0c;得到源信号的近似解。 声音不可避免的会发生衍射、反射等现象&#xff0c;所以&…

上线GPT应用的流程

上线一个应用是一个逐步迭代的过程&#xff0c;不断根据用户反馈和市场需求进行改进和优化。上线一个基于GPT的应用通常需要以下步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.明确目标和用途…

【数据结构】双向链表(链表实现+测试+原码)

前言 在双向链表之前&#xff0c;如果需要查看单链表来复习一下&#xff0c;链接在这里&#xff1a; http://t.csdnimg.cn/Ib5qS 1.双向链表 1.1 链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 1.1.1 单向或者双向 1.1.2 …

【Linux】学习-深入了解文件的读与写

深入了解语言级别(C语言)文件操作的"读"与"写" 在学习前&#xff0c;我们先要知道在Linux下的一个原则&#xff1a;一切皆是文件 如何理解呢&#xff1f;举个外设的例子&#xff0c;比如键盘和显示器&#xff0c;这两个外设也可以其实本质上也是文件&…

Java并发基础:LinkedBlockingDeque全面解析!

内容概要 LinkedBlockingDeque提供了线程安全的双端队列实现&#xff0c;它支持在队列两端高效地进行插入和移除操作&#xff0c;同时具备阻塞功能&#xff0c;能够很好地协调生产者与消费者之间的速度差异&#xff0c;其内部基于链表结构&#xff0c;使得并发性能优异&#x…

c语言游戏实战(7):扫雷

前言&#xff1a; 扫雷是一款经典的单人益智游戏&#xff0c;它的目标是在一个方格矩阵中找出所有的地雷&#xff0c;而不触碰到任何一颗地雷。在计算机编程领域&#xff0c;扫雷也是一个非常受欢迎的项目&#xff0c;因为它涉及到许多重要的编程概念&#xff0c;如数组、循环…

Java:Arrays类、Lambda表达式、JDK新特性(方法引用) --黑马笔记

一、Arrays类 1.1 Arrays基本使用 Arrays是操作数组的工具类&#xff0c;它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下&#xff1a;遍历、拷贝、排序等操作。需要用到的方法如下&#xff1a; public class ArraysTest1 {public stat…