码迷,mamicode.com
首页 > 其他好文 > 详细

K8S权限控制,限制用户在特定namespace上的访问权限

时间:2020-06-22 14:46:43      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:cer   eve   保存   l命令   efault   ingress   replica   ica   elf   

kubernetes应用越来越广泛,我们kubernetes集群中也会根据业务来划分不同的命名空间,随之而来的就是安全权限问题,我们不可能把集群管理员账号分配给每一个人,有时候可能需要限制某用户对某些特定命名空间的权限,比如开发和测试人员也可能需要登录集群,了解应用的运行情况,查看pod的日志,甚至是修改某些配置。这时候,我们可以通过创建受限的kubeconfig文件,将该config分发给有需要的人员,让他们能通过kubectl命令实现一些允许的操作。

创建集群级别的角色 ClusterRole

clusterrole.dev-log.yaml 用于提供对pod的完全权限和其它资源的查看权限。

# 提供基本权限
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: dev-log
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/exec
  verbs:
  - create
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - delete
- apiGroups:
  - ""
  resources:
  - endpoints
  - services
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - bindings
  - events
  - limitranges
  - namespaces/status
  - pods/log
  - pods/status
  - replicationcontrollers/status
  - resourcequotas
  - resourcequotas/status
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - apps
  resources:
  - deployments
  - deployments/rollback
  - deployments/scale
  - statefulsets
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - autoscaling
  resources:
  - horizontalpodautoscalers
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - batch
  resources:
  - cronjobs
  - jobs
  - scheduledjobs
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources:
  - daemonsets
  - deployments
  - ingresses
  - replicasets
  verbs:
  - get
  - list
  - watch

 

在default命名空间应用配置文件:

$ kubectl apply -f clusterrole.dev-log.yaml -n default
$ kubectl get ClusterRole -n default

 

在default命名空间创建 ServiceAccount

创建ServiceAccount后,会自动创建一个绑定的 secret ,后面在kubeconfig文件中,会用到该secret中的token。

$ kubectl create serviceaccount dev -n default
$ kubectl get serviceaccount -n default

对ServiceAccount和集群角色建立绑定关系

对需要的namespace进行授权,以下示例为对app命名空间授权。

$ kubectl create rolebinding rbd-dev --clusterrole=dev-log --serviceaccount=default:dev --namespace=app

 

获取ServiceAccount的secret中的token

$ kubectl get serviceaccounts dev -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2020-06-03T06:36:29Z"
  name: dev
  namespace: app
  resourceVersion: "2633621"
  selfLink:xxx
  uid: xx
secrets:
- name: dev-token-v97rh

 

对应的secret名称为:dev-token-v97rh。

$ kubectl get secrets dev-token-v97rh -o yaml
apiVersion: v1
data:
  ca.crt: xxx
namespace: aGFkb29w
token:  xxx
kind: Secret
metadata:
  annotations:
    kubernetes.io/service-account.name: dev
    kubernetes.io/service-account.uid: xxx
  creationTimestamp: "2020-06-03T06:36:29Z"
  name: dev-token-v97rh
  namespace: app
  resourceVersion: "2633620"
  selfLink: xxx
  uid:xxx
type: kubernetes.io/service-account-token

该secret的token为:token=xxx

该token是经过base64处理的,需要进行解码处理。

$ echo $token | base64 -d
xxx

 

组装config文件

将token填充到以下的config配置中:

# config
apiVersion: v1
kind: Config
clusters:
- cluster:
    server: K8S集群地址
    certificate-authority-data: "ca.crt后的内容"
  name: k8s-dev
users:
- name: "devlog"
  user:
    token: "解码后的token字符串"
contexts:
- context:
    cluster: dev
    user: "dev"
  name: dev
preferences: {}
current-context: dev

 

将该文件保存为config 并放入 $HOME/.kube/ 目录下即可。

至此,k8s限制用户在多个namespace上的访问权限操作完成。

 

 

摘自:https://www.toutiao.com/i6840783856988062216/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1592805726&app=news_article&utm_source=weixin&utm_medium=toutiao_android&use_new_style=1&req_id=202006221402050101290482231B17DBE5&group_id=6840783856988062216

K8S权限控制,限制用户在特定namespace上的访问权限

标签:cer   eve   保存   l命令   efault   ingress   replica   ica   elf   

原文地址:https://www.cnblogs.com/fengjian2016/p/13176545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!