侧边栏壁纸
博主头像
cloudnative-blog博主等级

I can break through the limitations !

  • 累计撰写 23 篇文章
  • 累计创建 12 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

四.RBAC

周锐豪
2023-12-13 / 0 评论 / 0 点赞 / 65 阅读 / 7073 字 / 正在检测是否收录...

一.RBAC

1.RBAC简介

    RBAC是一种基于角色访问控制方式,它将权限和角色相关联,用户加入到角色中,就会拥有角色中的权限,RBAC的核心思想是,将权限赋予给角色,角色中加入多个用户,加入进来的用户会具有角色的权限,如果修改权限也是针对角色进行操作,而不是针对每个用户进行权限操作。

2.安全框架的阶段

2.1第一阶段(鉴权)

第一阶段: Authentication(鉴权):判断你的身份是否是可靠的。
   HTTPS 证书认证:基于CA证书签名的数字证书认证(kubeconfig),比如.kube/config文件就是这种认证。
   HTTP Token认证:通过一个Token来识别用户(serviceaccount),比如我们搭建K8s图形页面登录时就使用到Token认证,但是加入集群时也使用到Token,这个不属于该种认证,只是单纯的加入集群。

2.2第二阶段(授权)

第二阶段:Authorization(授权):控制你的权限是否可以访问相对应的资源。
        Node、ABAC、RBAC、Webhook。

2.3第三阶段(准入控制)

第三阶段: Admission Control(准入控制):其实就是一张准入控制插件列表,根据需求把K8s的一些高级功能放入列表,哪个功能不用就把对应的控制器插件移除列表。
    Adminssion Control实际上是一个准入控制器插件列表,发送到API Server的请求都需要经过这个列表中的每个准入控制器插件的检查,检查不通过,则拒绝请求。
    插件形式,方便用户实现检查准入控制,例如i当以操作等等。

3.RBAC主体,角色,绑定

主体(subject):
    User:用户
    Group:用户组
    ServiceAccount:服务账号
    
角色:
    Role:授权特定命名空间的访问权限
    ClusterRole:授权所有命名空间的访问权限
    
角色绑定:
    RoleBinding:将角色绑定到主体(即subject)
    ClusterRoleBinding:将集群角色绑定到主体

image-20231129110400325

4.集群四大角色

内置集群角色描述
cluster-admin超级管理员,对集群所有权限。
admin主要用于授权命名空间所有读写权限。
edit允许对命名空间大多数对象读写操作,不允许查看或者修改角色、角色绑定。
view允许对命名空间大多数对象只读权限,不允许查看角色、角色绑定和Secre。

5.资源

5.1 verb

#资源对象的操作方法列表
“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”, “exec”

5.2 resource

#支持的资源对象列表
“services”, “endpoints”, “pods”,“secrets”,“configmaps”,“crontabs”,“deployments”,“jobs”,“nodes”,“rolebindings”,“clusterroles”,“daemonsets”,“replicasets”,“statefulsets”,“horizontalpodautoscalers”,“replicationcontrollers”,“cronjobs”

5.3 apiGroup

#支持的API组列表
“”,“apps”, “autoscaling”, “batch”

二.配置RBAC

1.创建账号

[root@k8s-master1 yaml-case]# kubectl create serviceaccount ww

2.创建role规则

[root@k8s-master1 yaml-case]# vim magedu-role.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: ww
rules:
- apiGroups: ["*"]
  resources: ["pods/exec"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

- apiGroups: ["*"]
  resources: ["pods"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

- apiGroups: ["apps/v1"]
  resources: ["deployments"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] 
  [root@k8s-master1 yaml-case]# kubectl apply -f magedu-role.yaml

3.将规则与账号绑定

[root@k8s-master1 yaml-case]# vim magedu-role-bind.yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: ww
  namespace: default
subjects:

- kind: ServiceAccount
  name: ww
  namespace: default
  roleRef:
  kind: Role
  name: ww
  apiGroup: rbac.authorization.k8s.io
  [root@k8s-master1 yaml-case]# kubectl apply -f magedu-role-bind.yaml

4.查看secret

[root@k8s-master1 yaml-case]#  kubectl get secret | grep ww
ww-token-64gs2        kubernetes.io/service-account-token   3      2s

5.查看token

kubectl describe secrets ww-token-64gs2

三.基于kube-config文件登陆

1.创建csr文件

[root@k8s-master1 yaml-case]# vim ww-csr.json
{
  "CN": "China",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

2.签发证书

ln -sv /etc/kubeasz/bin/cfssl* /usr/bin/
/etc/kubeasz/cluster/k8s-cluster1/ssl/ca-config.json

[root@k8s-master1 yaml-case]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem  -ca-key=/etc/kubernetes/ssl/ca-key.pem -config=/root/ca-config.json  -profile=kubernetes ww-csr.json | cfssljson -bare  ww

3.设置客户端认证参数

kubectl config set-credentials ww \
--client-certificate=/root/yaml-case/ww.pem \
--client-key=/root/yaml-case/ww-key.pem \
--embed-certs=true \
--kubeconfig=ww.kubeconfig

4.设置上下文参数

kubectl config set-context cluster1 \
--cluster=cluster1 \
--user=ww \
--namespace=default \
--kubeconfig=ww.kubeconfig

5.设置默认上下文

kubectl config use-context cluster1 --kubeconfig=ww.kubeconfig

6.获取token

[root@k8s-master1 yaml-case]# kubectl get secrets | grep ww
ww-token-64gs2        kubernetes.io/service-account-token   3      58m
[root@k8s-master1 yaml-case]# kubectl describe secrets ww-token-64gs2

7.生成普通用户kubeconfig文件

kubectl config set-cluster cluster1 --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=https://192.168.0.200:6443 --kubeconfig=ww.kubeconfig

8.修改ww.kubeconfig,添加token到最后一行(4个缩进)

[root@k8s-master1 yaml-case]# vim ww.kubeconfig
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlkyUU1wSVFfVjQ5UVRzLXlKVFJTeEs4MmVUMTM2NXpBR1pFVjM0VVdpdm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Ind3LXRva2VuLTY0Z3MyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Ind3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjQxYzJjNmYtMDQyMy00MTJmLWI3Y2QtZGQ1ZTgyNWYxN2MxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6d3cifQ.EsCKsCbc7eUXUUPV0oDFS-tk1m-RFACrFiV4ozWtupIed0JzoJ_ESUfWD9_TsDHj7RqCR0ivrLNzZfOx41UZqgEOrxhayRQSHbt7-WQhuyweOCjbDjgV1nwh6apbne9r460WTxE7ywdtCL0s0kjmjyNKVoNojG1hwjWDOA959-5MofP3gRcGHYwuUHF7Dxvdq2hmyjXWrUuKh0EOgD1WFfIkJbErBkwvZcwrzKmIfFF5qte3KHP5JTZacpPhw95Dj-KRhi8JKcOru-nh6mdFCVjCkBiVLWi8r69-nZHLJGG9yTHgAgfu6DaN91yHLMU-QJUgZ_HMSk0Wvfi592MZ9A
0

评论区