• 为普通用户授权访问k8s资源(tls,rbac)


    需求

    为指定用户授权访问不同命名空间权限,例如:给新入职的员工zhangsan,添加权限,先给小的查询权限(default空间的pod读取权限),熟悉后,再给大的权限(所有的空间的pod的读写权限)

    实施步骤:

    1. 为用户签发证书
    2. 生成kubeconfig文件
    3. RBAC授权
    4. 测试

    实操步骤(带命令)

    为用户签发证书

    为了让普通用户能够通过认证并调用 API,需要执行几个步骤。 首先,该用户必须拥有 Kubernetes 集群签发的证书, 然后将该证书提供给 Kubernetes API。

    创建私钥

    [root@k8s-master access]# openssl genrsa -out zhangsan.key 2048
    Generating RSA private key, 2048 bit long modulus
    ...........+++
    .............................................................+++
    e is 65537 (0x10001)
    # CN 是用户名,O 是该用户归属的组,很关键
    [root@k8s-master access]# openssl req -new -key zhangsan.key -out zhangsan.csr -subj "/CN=zhangsan/O=OPPO_CKA"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用k8s集群的ca签发证书

    [root@k8s-master access]# openssl x509 -req -in zhangsan.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -days 3650 -CAcreateserial -out zhangsan.crt 
    Signature ok
    subject=/CN=zhangsan/O=OPPO_CKA
    Getting CA Private Key
    
    • 1
    • 2
    • 3
    • 4

    注意

    1. CA是apiserver中的--client-ca-file的配置值

    验证证书是否有效:

    [root@k8s-master access]# openssl verify -CAfile /etc/kubernetes/pki/ca.crt zhangsan.crt
    zhangsan.crt: OK
    
    • 1
    • 2

    生成kubeconfig文件

    kubeconfig 文件包含以下三部分:

    • clusters:name、ca、server
    • users:name、证书、私钥
    • contexts:name、cluster、user
    # 生成cluster的信息(ca、server)
    kubectl config --kubeconfig=zhangsan_kcf set-cluster cluster1 --server=https://10.90.118.39:6443  --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
    
    # 生成user的信息(用户名、证书、私钥)
    kubectl config --kubeconfig=zhangsan_kcf set-credentials zhangsan --client-key=zhangsan.key --client-certificate=zhangsan.crt --embed-certs=true
    
    # 生成context信息(即将集群与用户“关联”起来)
    kubectl config --kubeconfig=zhangsan_kcf set-context zhangsan@cluster1 --cluster=cluster1 --user=zhangsan
    
    # 指定要使用的context
    kubectl config --kubeconfig=zhangsan_kcf use-context zhangsan@cluster1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    测试

    将zhangsan_kcf这个kubeconfig文件下发给张三,张三拿到该文件后即可测试

    # 提示资源访问没权限,说明认证已经通过了
    [root@k8s-slave1 tmp]# k get po --kubeconfig=zhangsan_kcf
    Error from server (Forbidden): pods is forbidden: User "zhangsan" cannot list resource "pods" in API group "" in the namespace "default"
    
    • 1
    • 2
    • 3

    RBAC授权

    创建了证书之后,为了让这个zhangsan这个用户能访问 Kubernetes 集群资源,现在就要创建 Role 和 RoleBinding 了。

    kubectl create role default_read --verb=get,list --resource=pods -n default
    # 将role绑定到--user上
    kubectl create rolebinding zhangsan-default_read --role=default_read --user=zhangsan  -n default
    # 或者  将role绑定到--group上
    kubectl create rolebinding g-OPPO_CKA-default_read --role=default_read --group=OPPO_CKA -n default
    
    • 1
    • 2
    • 3
    • 4
    • 5

    再次测试

    [root@k8s-slave1 tmp]# kubectl get po --kubeconfig zhangsan_kcf
    NAME        READY   STATUS    RESTARTS     AGE
    busybox01   1/1     Running   1 (9h ago)   21h
    busybox02   1/1     Running   1 (9h ago)   21h
    
    • 1
    • 2
    • 3
    • 4

    如上测试通过。

    指定kubeconfig文件有多种方式,优先级从高到底:

    1. 命令通过--kubeconfig选项指定
    2. 设置KUBECONFIG环境变量
    3. 将文件重命名放到kubectl的默认路径下:~/.kube/config

    附录

    为用户签发证书

  • 相关阅读:
    CFA一级学习-CFA一级中文精讲(第三版)-第一章(1)
    2022年浙大数据结构MOOC作业题目集
    AJAX总结
    Redisson实现分布式锁的实战案例-锁单key-锁多key-看门狗
    cnpm i报错:node-sass@^6.0.1 run postinstall node scripts/build.js error
    office的文件(word、excel、ppt)图标变白
    【数学建模学习笔记【集训十天】之第一天】
    网页按钮点击动画
    【附源码】计算机毕业设计SSM视频网站
    关于 虚拟 DOM、Shadow DOM 和 DocumentFragment
  • 原文地址:https://blog.csdn.net/zpsimon/article/details/133908455