文档首页/ 云容器引擎 CCE/ 用户指南(巴黎区域)/ 最佳实践/ 权限/ 通过配置kubeconfig文件实现集群权限精细化管理
更新时间:2023-12-07 GMT+08:00

通过配置kubeconfig文件实现集群权限精细化管理

问题场景

CCE默认的给用户的kubeconfig文件为cluster-admin角色的用户,相当于root权限,对于一些用户来说权限太大,不方便精细化管理。

目标

对集群资源进行精细化管理,让特定用户只能拥有部分权限(如:增、查、改)。

注意事项

确保您的机器上有kubectl工具,若没有请到Kubernetes版本发布页面下载与集群版本对应的或者最新的kubectl。

配置方法

下述示例配置只能查看和添加test空间下面的Pod和Deployment,不能删除。

  1. 配置sa,名称为my-sa,命名空间为test

    kubectl create sa my-sa -n test

  2. 配置role规则表,赋予不同资源相应的操作权限。

    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:

    kubectl create -f role-test.yaml

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

    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-sa
      namespace: test

    创建RoleBinding:

    kubectl create -f myrolebinding.yaml

    此时,用户信息配置完成,继续执行步骤4~步骤6将用户信息写入到配置文件中。

  4. 配置集群访问信息。

    1. 通过sa的名称my-sa获取sa对应的密钥,第一列的my-sa-token-z4967即为密钥名:
    kubectl get secret -n test |grep my-sa

    1. 将密钥中的ca.crt解码后导出备用:
    kubectl get secret my-sa-token-5gpl4 -n test -oyaml |grep ca.crt: | awk '{print $2}' |base64 -d > /home/ca.crt
    1. 设置集群访问方式,其中test-arm为需要访问的集群,10.0.1.100为集群apiserver地址,/home/test.config为配置文件的存放路径。
      • 如果通过内部apiserver地址,执行如下命令:
        kubectl config set-cluster test-arm --server=https://10.0.1.100:5443  --certificate-authority=/home/ca.crt  --embed-certs=true --kubeconfig=/home/test.config
      • 如果通过公网apiserver地址,执行如下命令:
        kubectl config set-cluster test-arm --server=https://10.0.1.100:5443 --kubeconfig=/home/test.config --insecure-skip-tls-verify=true

    在集群内节点上执行操作或者最后使用该配置的节点为集群节点,不要将kubeconfig的路径设为/root/.kube/config。

    集群apiserver地址为内网apiserver地址,绑定弹性IP后也可为公网apiserver地址。

  5. 配置集群认证信息。

    1. 获取集群的token信息(这里如果是get获取需要based64 -d解码)。
    token=$(kubectl describe secret my-sa-token-5gpl4 -n test | awk '/token:/{print $2}')
    1. 设置使用集群的用户ui-admin
    kubectl config set-credentials ui-admin --token=$token --kubeconfig=/home/test.config

  6. 配置集群认证访问的上下文信息,ui-admin@test为上下文的名称。

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

  7. 设置上下文,设置完成后使用方式见验证权限

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

    若需授予其他用户操作该集群并限制为上述权限,在步骤6结束后将生成的配置文件/home/test.config提供给该用户,由该用户置于自己机器上(用户机器须保证能访问集群apiserver地址),在该机器上执行步骤7使用kubectl时kubeconfig参数须指定为配置文件所在路径。

验证权限

  1. 可以查询test命名空间下的pod资源,被拒绝访问其他命名空间的Pod资源。
    kubectl get pod -n test --kubeconfig=/home/test.config

  2. 不可删除test命名空间下的Pod资源。

延伸阅读

更多Kubernetes中的用户与身份认证授权内容,请参见Authenticating