1. 创建sa角色
# sa需要指定命名空间
kubectl create sa my-test -n test

 2. 创建role规则

# apiGroups资源组,resources资源,verbs权限,下面权限是只能查看pod和deployment,如果需要进入pod则需要增加pods/exec
vi role-test.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: myrole
  namespace: test
rules:
- apiGroups:
  - ""
  resources:
  - pods,
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - apps
  resources:
  - pods
  - deployments
  verbs:
  - get
  - list
  - watch
  - create

注: role是针对命名空间的,需要指定命名空间,ClusterRole是针对整个集群的则不需要指定命名空间

3. 创建role

kubectl create role-test.yaml

 4. 配置rolebinding,将sa绑定到role上,让sa获取相应的权限。

# 这里RoleBinding也是针对命名空间的和Role对应所以需要指定,ClusterRoleBinding则不需要指定命名空间
vi myrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: myrolebinding
  namespace: test
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: myrole
subjects:
- kind: ServiceAccount
  name: my-test
  namespace: test

 5. 创建RoleBinding

kubectl create -f myrolebinding.yaml

 6. 手动为ServiceAccount创建长期有效的Token。

vi my--token.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-test-token-secret
  namespace: test
  annotations:
    kubernetes.io/service-account.name: my-test
type: kubernetes.io/service-account-token

 7. 创建

kubectl create -f my-test-token.yaml

 8. 配置集群访问信息。

  a. 将密钥中的ca.crt解码后导出备用

kubectl get secret my-test-token-secret -n test -oyaml |grep ca.crt: | awk '{print $2}' |base64 -d > /home/ca.crt

  b. 设置集群访问方式,其中test-arm为需要访问的集群,https://192.168.0.110:5443为集群apiserver地址(获取方法参见图1),/home/test.config为配置文件的存放路径: 

  •  如果通过内部apiserver地址,执行如下命令:
kubectl config set-cluster test-arm --server=https://192.168.0.110:5443  --certificate-authority=/home/ca.crt  --embed-certs=true --kubeconfig=/home/test.config
  • 如果通过公网apiserver地址,执行如下命令:
kubectl config set-cluster test-arm --server=https://192.168.0.110:5443 --kubeconfig=/home/test.config --insecure-skip-tls-verify=true

 9. 配置集群认证信息。

  a. 获取集群的token信息(这里如果是get获取需要based64 -d解码

token=$(kubectl describe secret my-test-token-secret -n test | awk '/token:/{print $2}')

  b. 设置使用集群的用户ui-admin

kubectl config set-credentials ui-admin --token=$token --kubeconfig=/home/test.config

 10. 配置集群认证访问的context信息,ui-admin@test为context的名称

kubectl config set-context ui-admin@test --cluster=test-arm --user=ui-admin --kubeconfig=/home/test.config

 11. 设置context,设置完成后使用方式见验证权限

kubectl config use-context ui-admin@test --kubeconfig=/home/test.config


 12 可以查询test命名空间下的pod资源,被拒绝访问其他命名空间的Pod资源。

kubectl get pod -n test --kubeconfig=/home/test.config

k8s rabc授权只读权限_kubernetes

 13 不可删除test命名空间下的Pod资源

k8s rabc授权只读权限_linux运维_02