美文网首页Openshift:可靠的Kubernetes发行版k8s-openshift-okd
OpenShift用户与组的管理功能如何在Kubernetes上

OpenShift用户与组的管理功能如何在Kubernetes上

作者: 潘晓华Michael | 来源:发表于2019-11-15 22:52 被阅读0次
    OpenShift用户管理图

    OpenShift中有用户及组的概念,并且提供了User与Group资源类型,可以非常方便地为OpenShift集群创建用户,创建组,以组给用户进行组管理,并授权。这也大大方便了集群账号的管理与权限的控制。

    [openshift@master01 ~] oc create user dev-user # 创建用户dev-user
    [openshift@master01 ~] oc adm groups new my-group # 创建组my-group
    [openshift@master01 ~] oc adm groups new my-group dev-user # 创建组my-group,并添加dev-user到该组
    [openshift@master01 ~] oc adm groups add-users my-group dev-user # 为组my-group添加用户dev-user
    [openshift@master01 ~] oc adm groups remove-users my-group dev-user # 将用户dev-user从my-group组中移除
    

    与OpenShift一样,K8S也是通过RBAC实现权限控制。RBAC(Role-Based Access Control)即为基于角色的访问控制。K8S中与RBAC相关的资源类型有:Role、ClusterRole、RoleBinding、ClusterRoleBinding。那么针对K8S集群,有没有办法实现类似于OpenShift的用户、组的管理呢?答案是肯定的,但是需要执行一系列的脚本操作。

    本篇将介绍如何通过命令为Kubernetes创建用户及用户组,并对用户进行授权。同时设计了一个脚本工具来模拟实现类似OpenShift用户与组的功能。

    K8S获取用户信息及对用户(组)授权

    获取当前用户名

    [k8s@master01 ~] kubectl config view -o=jsonpath="{.contexts[0].context.user}"
    dev-user
    

    为用户赋予namespace的管理员权限

    [k8s@master01 ~] kubectl create rolebinding dev-user-admin-binding --clusterrole=admin --user=dev-user --namespace=dev
    [k8s@master01 ~] kubectl create rolebinding dev-user-admin-binding --clusterrole=admin --user=dev-user -n sit
    

    为组授权,赋予namespace管理员权限

    [k8s@master01 ~] kubectl create rolebinding dev-group-admin-binding --clusterrole=admin --group=dev-group --namespace=dev
    [k8s@master01 ~] kubectl create rolebinding dev-group-admin-binding --clusterrole=admin --group=dev-user -n sit
    

    生成用户及组证书

    1. 配置信息脚本 config.sh
    #!/bin/bash
    USERNAME=username  #用户名
    GROUP=/O=group          #用户所属组,多个组可以使用/O=group1/O=group2
    DEFAULT_NS=kube-system   # 默认ns
    API_SERVER=https://master.k8s.com:6443  #K8S API Server地址
    K8S_PKI_PATH=/etc/kubernetes/pki/    # K8S证书存放目录
    
    1. 为新用户创建证书脚本 add_user.sh
    #!/bin/bash
    source config.sh   # 导入配置信息
    K8S_PKI_PATH=${K8S_PKI_PATH%/}
    mkdir -p .tmp
    openssl genrsa -out .tmp/$USERNAME.key 2048 # 生成密钥
    openssl req -new -key .tmp/$USERNAME.key -out .tmp/$USERNAME.csr -subj "/CN=${USERNAME}${GROUP}" #生成csr证书,包含用户名及组信息
    openssl x509 -req -in .tmp/$USERNAME.csr -CA ${K8S_PKI_PATH}/ca.crt -CAkey ${K8S_PKI_PATH}/ca.key -CAcreateserial -out .tmp/$USERNAME.crt -days 3650 #生成crt证书
    
    # 使用k8s证书与生成的用户证书生成访问配置文件$USERNAME.conf
    kubectl config --kubeconfig=$USERNAME.conf set-cluster kubernetes --server=$API_SERVER --certificate-authority=${K8S_PKI_PATH}/ca.crt --embed-certs
    kubectl config --kubeconfig=$USERNAME.conf set-credentials $USERNAME --client-certificate=.tmp/$USERNAME.crt --client-key=.tmp/$USERNAME.key --embed-certs=true
    kubectl config --kubeconfig=$USERNAME.conf set-context $USERNAME@kubernetes --cluster=kubernetes --user=$USERNAME --namespace=$DEFAULT_NS
    kubectl config --kubeconfig=$USERNAME.conf use-context $USERNAME@kubernetes
    
    echo -e "请将下面的文件内容复制到需要的用户目录.kube/config文件中\n\n"
    cat $USERNAME.conf
    echo -e "\n\n"
    
    1. 在k8s的主节点运行add_user.sh,即可完成用户证书的生成。

    用户、组权限与访问控制工具k8sum(K8S User Manager)设计

    该工具包含以下功能

    1. 功能说明
    2. 创建用户
    3. 为用户分配组信息
    4. 为用户或者组绑定role,设置权限
    5. 为用户或者组绑定clusterrole,设置权限

    工具使用手册说明

    1. 功能说明
    $ k8sum [-h/--help]
    k8sum是一个Kubernetes用户权限管理工具,它能够实现用户创建、分组、权限分配等功能。
    格式:
    k8sum [command] [--args]
    command:
      create 创建访问配置文件
      bind 为用户/组绑定权限
    
    1. 创建用户
    $ k8sum create --user=user-dev
    
    1. 为用户分配组信息
    $ k8sum create --user=user-dev --group=group1,goup2
    
    1. 为用户或者组绑定role
    $ k8sum bind --user=user-dev --role=role1
    $ k8sum bind --group=group1 --role=role1
    
    1. 为用户或者组绑定clusterrole
    $ k8sum bind --user=user-dev --clusterrole=clusterrole1
    $ k8sum bind --group=group1 --clusterrole=clusterrole1
    

    总结

    RBAC设计来源于OpenShift,最后融入到了K8S。虽然都是基于RBAC,但是OpenShift在对用户权限的管理这一块考虑得更加全面,也更为实用。K8S真正要做好权限管理这块,还需要做更多的集成或二次开发的工作。

    补充说明:OpenShift也好,Kubernetes也好,都可以对接第三方认证,如Keystone,LDAP,OpenID Connect等。
    OpenShift与OpenLDAP结接,可参考之前分享的文章:Openshift上部署OpenLDAP实战:为账号一统

    参考文章

    为Kubernetes集群添加用户
    RBAC——基于角色的访问控制

    相关文章

      网友评论

        本文标题:OpenShift用户与组的管理功能如何在Kubernetes上

        本文链接:https://www.haomeiwen.com/subject/pdprictx.html