K8S -- kubernetes集群权限之Cluster、 User和Context

		使用k8s的小伙伴,对k8s用户权限管理可能有很多困惑,如何建立外部用户,并赋予k8s的访问权限,对很多开发者来说,是非常困惑的。
	下面,本人以jerry用户的创建为例,为linux系统中的k8s-jerry用户配置k8s集群管理权限。
	注意: 此处配置的k8s-jerry用户为linux系统用户; 而jerry用户为k8s集群中对应的用户。

一、生成user用户证书

(1)生成私钥
(umask 077; openssl genrsa -out jerry.key 2048)
(2)生成证书请求
openssl req -new -key jerry.key -out jerry.csr -subj "/CN=jerry"

如果定义组,则组可以作为权限分配的主体,比如:
openssl req -new -key jerry.key -out jerry.csr -subj "/CN=jerry/O=jerry-admin”

角色授权绑定文件可以定义如下:
subjects:

  • apiGroup: rbac.authorization.k8s.io
    kind: Group
    name: jerry-admin
(3)生成证书,并用服务端CA签署
  openssl x509 -req  -in jerry.csr -CA /etc/kubernetes/pki/ca.crt  -CAkey /etc/kubernetes/pki/ca.key  -CAcreateserial -out jerry.crt -days 365
(4)查看证书
  openssl x509 -in jerry.crt -text  -noout

二、建立集群、用户和上下文

  export KUBE_APISERVER="https://172.16.1.101:6443"
(1)产生集群配置文件
 kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-config

注意:
使用ca.crt证书,作为集群授权证书
当前目录下生成kube-config配置文件

(2)生成集群用户
kubectl config set-credentials jerry --client-certificate=/root/kube-cluster/pki/jerry.crt --embed-certs=true --client-key=/root/kube-cluster/pki/jerry.key --kubeconfig=kube-config

注意:
1. 在kube-config集群配置文件中查看user 名为 jerry
2. 采用客户端证书和私钥

(3)建立基于集群和新用户的上下文
  kubectl config set-context jerry@kubernetes --cluster=kubernetes --user=jerry --kubeconfig=kube-config

注意: 上下文名称为 jerry@kubernetes
集群名称为kubernetes
用户名称为jerry

(4)使用新建设的集群上下文
   kubectl config use-context jerry@kubernetes --kubeconfig=kube-config

三、给jerry用户授予权限

(1)建立角色
  kubectl create role pods-reader  --verb=get,list,watch --resource=pods --dry-run -oyaml > role-demo.yaml

文件内容如下:
[root@master kube-cluster]# more role-demo.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: pods-reader
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
(2)将角色绑定到用户jerry
kubectl create rolebinding jerry-read-pods --role=pods-reader --user=jerry --dry-run -oyaml > jerry-read-pods.yaml

文件内容如下:
[root@master kube-cluster]# more jerry-read-pods.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  creationTimestamp: null
  name: jerry-read-pods
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pods-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: jerry
(3)使用用户jerry测试
**<1>切换上下文**
  kubectl config use-context jerry@kubernetes --kubeconfig=kubeconf/kube-config
**<2>查看pods(有权)**
[root@master kube-cluster]# kubectl get pods --kubeconfig=kubeconf/kube-config
NAME                                      READY   STATUS             RESTARTS   AGE
nfs-client-provisioner-5584cd9578-fqbjg   1/1     Running            0          15h
test-pod                                  0/1     CrashLoopBackOff   176        15h
web-0                                     1/1     Running            0          13h
web-1                                     1/1     Running            0          13h

<3>查看deployment(无权限)

  kubectl get deployment --kubeconfig=kubeconf/kube-config

Error from server (Forbidden): deployments.apps is forbidden: User “jerry” cannot list resource “deployments” in API group “apps” in the namespace “default”

四、将linux系统用户k8s-jerry与k8s集群用户jerry相关联(不在需要kubeconfig文件了)

(1)建立系统用于k8s-jerry
  useradd k8s-jerry
  chown -R k8s-jerry.k8s-jerry /home/k8s-jerry
(2)将集群配置文件copy到系统用户k8s-jerry的默认目录下
[root@master kube-cluster]# ls
cluster-pods-reader.yaml  jerry-read-pods.yaml  kubeconf  pki  role-demo.yaml
[root@master kube-cluster]# cp kubeconf/kube-config /home/k8s-jerry/.kube/config
(3)切换成k8s-jerry用户,就可以访问k8s集群中jerry用户的有权访问的资源
[root@master kube-cluster]# su k8s-jerry
[k8s-jerry@master kube-cluster]$ kubectl get pods
NAME                                      READY   STATUS             RESTARTS   AGE
nfs-client-provisioner-5584cd9578-fqbjg   1/1     Running            0          15h
test-pod                                  0/1     CrashLoopBackOff   180        15h
web-0                                     1/1     Running            0          14h
web-1                                     1/1     Running            0          14h
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值