K8S入门篇-权限控制管理

作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/p/16840868.html


目录

一、RBAC-基于角色的权限控制
1.1 Aggregate
1.2 rolebinding
 二、RBAC企业实战
2.1 如何授权
2.2 授权最佳实现
2.3 实战

一、RBAC-基于角色的权限控制

 

1.1 Aggregate

范例1:聚合的权限 Aggregate

创建一个clusterrole

1
2
3
4
5
6
7
8
9
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: c-role
aggregationRule:
  clusterRoleSelectors:
  - matchLabels:
      rbac.example.com/aggregate-to-monitoring: "true"
rules: []

  

创建一个sa

1
kubectl create sa c-role

  查看sa对应的token:

 

 

 kubectl describe secret c-role-token-98ztq

 

 

同时,我们创建一个clusterrolebinding关系test-c-role:把刚刚创建的sa和前面创建的clusterrole:c-role关系绑定起来。

1
kubectl create clusterrolebinding test-c-role --clusterrole=c-role --serviceaccount=default:c-role

 

验证: 

此时通过c-role这个sa去登录dashboard,发现是什么权限都没有的。

 

 

创建一个aggregate对c-role进行权限添加

 

1
2
3
4
5
6
7
8
9
10
11
12
cat cluster-role-aggregate.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: c-role-endpoint
  labels:
    rbac.example.com/aggregate-to-monitoring: "true" #通过这个lable进行匹配,匹配上后进行权限添加
# These rules will be added to the "monitoring" role.
rules:
- apiGroups: [""]
  resources: ["services", "endpoints", "pods","namespaces"]
  verbs: ["get", "list", "watch"]

  

创建之后,再次查看权限:

 

 

1.2 rolebinding

需求:

1.      创建一个名为deployment-clusterroleclusterrole

a)      clusterrole只允许创建DeploymentDaemonsetStatefulsetcreate操作

 

2.      app-team1namespace下创建一个名为cicd-tokenserviceAccount,并且将步骤1中创建clusterrole的权限绑定到该serviceAccount

 

创建clusterrole,名称为deployment-clusterrole,具备deployment、daemonset、statefulset的create权限;

1
2
3
4
5
6
7
8
9
10
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制
  name: deployment-clusterrole
rules:
- apiGroups: ["apps"]
  # 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets"
  resources: ["deployments","daemonsets","statefulsets"]
  verbs: ["create"]

  

创建namespace和sa:

1
2
kubectl create ns app-team1
kubectl create sa cicd-token -n app-team1

 

绑定权限到sa账户,并且固定在app-team1的namespace下面:

1
kubectl create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token --namespace=app-team1

  

验证:

1.无法查看deployment

 

 

2、创建一个deployment

 

 

3.查看

 

 二、RBAC企业实战

2.1 如何授权

 

 

 常用的、通用的权限,我们做成clusterrole,然后通过clusterrolebinding把role绑定到对应的namespace下面,即可实现。

 

2.2 授权最佳实现

 

 

 

2.3 实战

需求:

  • 用户tencent可以查看default、kube-system下Pod的日志
  • 用户alibaba可以在default下的Pod中执行命令,并且可以删除Pod

第一步,定义权限。定义一个可以查看所有namespace的clusterrole,用于后续role进行不同命名空间切换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: namespace-readonly
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - metrics.k8s.io
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

  

第二步,通用权限定义

Pod删除权限

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-delete
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - delete

  

Pod执行权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-exec
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - ""
  resources:
  - pods/exec
  verbs:
  - create

  

Pod的log查看权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-log
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/log
  verbs:
  - get
  - list
  - watch

  

第三步,创建用户管理的命名空间,后面所有用户都放到这个命名空间下。

1
kubectl create ns kube-users

  

第四步,把kube-users这个组绑定namespace-readonly的权限,也就是kube-users下面的所有用户都可以读取所有命名空间。

1
kubectl create clusterrolebinding namespace-readonly --clusterrole=namespace-readonly  --serviceaccount=system:serviceaccounts:kube-users

  

第五步,创建用户tencent,alibaba

1
kubectl create sa tencent alibaba -n kube-users

  

第六步,对用户tencent、alibaba授权

tencent对default和kube-system下有读取pod log的权限

1
2
kubectl create rolebinding tencent-pod-log --clusterrole=pod-log   --serviceaccount=kube-users:tencent --namespace=kube-system
kubectl create rolebinding tencent-pod-log --clusterrole=pod-log   --serviceaccount=kube-users:tencent --namespace=default

  

alibaba可以对default命名空间下的pod具有执行和删除权限

1
2
kubectl create rolebinding alibaba-pod-exec --clusterrole=pod-exec   --serviceaccount=kube-users:alibaba --namespace=default
kubectl create rolebinding alibaba-pod-delete --clusterrole=pod-delete   --serviceaccount=kube-users:alibaba --namespace=default

  


posted @   skyflask  阅读(673)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示