基于 kubeconfig 认证的 k8s 用户账号创建案列

2024-07-16 998阅读

在 Kubernetes 集群中创建用户账号时,通常会使用 kubeconfig 文件来进行认证和授权,其中 CertificateSigningRequest 对象提供了一种通过提交证书签名请求并异步批准和颁发 x509 证书的机制。

基于 kubeconfig 认证的 k8s 用户账号创建案列
(图片来源网络,侵删)
  • 系统环境:Anolis OS release 8.8
  • 内核版本:Linux Kernel 5.10.134-13.an8.x86_64
  • Kubernetes 版本:v1.28.3

    创建证书签名请求

    1、创建用户证书私钥

    mkdir user1 && cd user1
    openssl genrsa -out user1.key 2048
    openssl req -new -key user1.key -out user1.csr -subj "/CN=user1/O=xiaomi"
    

    2、创建证书签名请求文件 user1.csr 对应的 k8s 资源

    # 对证书签名请求文件 user1.csr 进行 base64 编码
    cat user1.csr | base64 | tr -d "\n"
    kubectl apply -f -  user1   4m53s   kubernetes.io/kube-apiserver-client   kubernetes-admin                 Pending
    

    2、集群管理员手动批准证书申请

    kubectl certificate approve user1
    kubectl get csr -o wide
    #> NAME    AGE     SIGNERNAME                            REQUESTOR          REQUESTEDDURATION   CONDITION
    #> user1   5m47s   kubernetes.io/kube-apiserver-client   kubernetes-admin                 Approved,Issued
    

    创建完成的 CertificateSigningRequest,要先通过批准,然后才能签名。 根据所选的签名者,CertificateSigningRequest 可能会被 控制器自动批准。 否则,就必须人工批准, 人工批准可以使用 REST API(或 go 客户端),也可以执行 kubectl certificate approve 命令

    3、导出证书到文件

    kubectl get csr/user1 -o jsonpath='{.status.certificate}' | base64 -d > user1.crt
    ls
    #> user1.crt  user1.csr  user1.key
    

    对于已批准的证书,下一步是签名。 对应的签名控制器首先验证签名条件是否满足,然后才创建证书。 签名控制器然后更新 CertificateSigningRequest, 将新证书保存到现有 CertificateSigningRequest 对象的 status.certificate 字段中

    创建 kubeconfig 文件

    # 设置集群字段,--embed-certs=true 把 CA 证书内容写入到此 kubeconfig 文件里
    cp /etc/kubernetes/pki/ca.crt .
    kubectl config --kubeconfig=kubeconfig-user1 set-cluster cluster-01 --server=https://192.168.31.31:6443 --certificate-authority=ca.crt --embed-certs=true
    # 设置用户字段
    kubectl config --kubeconfig=kubeconfig-user1 set-credentials user1 --client-certificate=user1.crt --client-key=user1.key --embed-certs=true
    # 设置一个名为 context 的上下文字段
    kubectl config --kubeconfig=kubeconfig-user1 set-context context --cluster=cluster-01 --namespace=default --user=user1
    # 设置当前上下文为 context
    kubectl config --kubeconfig kubeconfig-user1 use-context context
    

    添加用户授权

    1、为用户 user1 授予集群超级管理员权限 cluster-admin

    # 认证通过,但提示无权限
    kubectl get nodes --kubeconfig=kubeconfig-user1
    #> Error from server (Forbidden): nodes is forbidden: User "user1" cannot list resource "nodes" in API group "" at the cluster scope
    # 创建名为 user1 的集群角色绑定,并将集群角色 cluster-admin 绑定到用户 user1 实现授权
    kubectl create clusterrolebinding user1 --clusterrole=cluster-admin --user=user1
    kubectl get nodes --kubeconfig=kubeconfig-user1  -o wide
    #> NAME   STATUS   ROLES           AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE        KERNEL-VERSION           CONTAINER-RUNTIME
    #> c1     Ready    control-plane   3d16h   v1.28.3   192.168.31.31           Anolis OS 8.8   5.10.134-13.an8.x86_64   containerd://1.7.8
    #> c2     Ready              3d16h   v1.28.3   192.168.31.32           Anolis OS 8.8   5.10.134-13.an8.x86_64   containerd://1.7.8
    #> c3     Ready              3d16h   v1.28.3   192.168.31.33           Anolis OS 8.8   5.10.134-13.an8.x86_64   containerd://1.7.8
    # 查看集群角色 cluster-admin 具有哪些 kube-apiserver 操作权限
    kubectl -n kube-system get clusterrole cluster-admin -o yaml
    

    2、特定权限检测

    # 验证 user1 用户是否具有 list 当前命名空间里的 pod 的权限
    kubectl auth can-i list pods --as user1
    #> yes
    # 验证 user1 用户是否具有 list 命名空间 kube-system 里 pod 的权限
    kubectl auth can-i list pods -n kube-system --as user1
    #> yes
    

    3、取消授权,即删除集群角色绑定 user1

    kubectl delete clusterrolebinding user1
    

    参考

    证书签名请求 CertificateSigningRequest

    码字不易,若觉得本文对你有用,欢迎点赞 👍、分享 🚀 ,相关技术热点时时看🔥🔥🔥​​​…

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]