• kubernetes 新增单namespace权限的用户,拥有独立的 kubeconfig文件


    k8s 分多个 namespace,每个 ns 使用一个用户,这个用户 只能操作 这个 ns 内的所有资源,其他ns 没有权限

    如 新建一个 permission 名字的 ns ,那么 新建个用户 permission ,使 permission 用户 只有 permission 名字的namespace 权限

    创建 permission 名字的 namespace

    kubectl create ns permission
    

    1. 到 k8s master 的秘钥目录下,基于 k8s 的ca.crt 来生成用户

    cd /etc/kubernetes/pki/
    

    2. 创建秘钥

    直接执行下面,带括号
    (umask 077; openssl genrsa -out permission.key 2048)
    ll permission.key
    

    3. 然后基于tracy.key私钥来生成证书使用kubernetes集群的ca.crt来签署

    生成证书签署请求
    openssl req -new -key permission.key -out permission.csr -subj "/CN=permission"
    # 注意,最后的 "/CN=tracy" 中的tracy,就是用户名
    

    4. 用 k8s 的 ca.crt 来签署

    openssl x509 -req -in permission.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out permission.csr -days 36500
    ll permission.*
    
    验证查看生成的证书
    openssl x509 -in permission.csr -text -noout
    
            Issuer: CN=kubernetes           				# 这里可以看到是kubernetes自己的ca.crt证书签署的
            Validity
                Not Before: Aug 19 08:14:53 2019 GMT        # 证书有效期限起始
                Not After : Aug 18 08:14:53 2020 GMT        # 证书有效期限结束
            Subject: CN=permission       					# 作为用户账号连入kubernetes用户
    

    5. 设定用户

    kubectl config set-credentials permission --client-certificate=permission.csr --client-key=permission.key --embed-certs=true
    
    # 查看刚刚设定的用户
    kubectl config view
    

    6. 加入上下文

    kubectl config set-context permission@kubernetes --cluster=kubernetes --user=permission
    
    切换 上下文 测试
    kubectl config use-context permission@kubernetes
    kubectl config view
    # 这一步可以看到 current-context: permission@kubernetes
    
    此时 kubectl get pods 发现没有权限
    Error from server (Forbidden): pods is forbidden: User "permission" cannot list resource "pods" in API group "" in the namespace "default"
    

    7. 绑定权限

    注: 因为 需要设定的权限是 对应ns 下所有权限,可以直接使用 默认的 admin 的 clusterrole,这个 集群的role 有所有权限,
    那么 直接使用 rolebinding 来把 clusterrole 绑定到对应用户下,那么这个用户 就有了 该namespace 下所有权限,并且其他namespace 则没有任何权限
    这里的权限 边界 被 rolebinding 限制了,如有不解,看查看前面的文章 https://www.cnblogs.com/winstom/p/11378567.html

    kubectl config use-context kubernetes-admin@kubernetes
    kubectl -n permission create rolebinding permission --clusterrole=admin --user=permission
    
    此时再次测试
    kubectl config use-context permission@kubernetes
    kubectl -n permission get pods
    此时就不会报错 权限问题
    

    8. 生成 config 文件

    下面给出的是案例

    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: (cat /etc/kubernetes/pki/ca.crt | base64 -w 0)
        server: https://10.249.96.165:6443
      name: kubernetes
    contexts:
    - context:
        cluster: kubernetes
        user: permission
    	namespace: permission			# 这里写入后,kubectl 可以不加 -n 来指定 namespace
      name: permission@kubernetes
    current-context: permission@kubernetes
    kind: Config
    preferences: {}
    users:
    - name: permission
      user:
        client-certificate-data: (cat /etc/kubernetes/pki/permission.csr | base64 -w 0)
        client-key-data: (cat /etc/kubernetes/pki/permission.key | base64 -w 0)
    
    技术男一枚,喜欢做技术分享,把学习的过程,以及遇到问题的解决过程都愿意分享给大家,博客中如有不足,请留言或者联系博主,感谢。 邮箱: sijiayong000@163.com Q Q: 601566386
  • 相关阅读:
    About HDFS blocks
    Hadoop源代码分析(一)
    Hadoop源代码分析(三)
    MapReduce基础
    Pig安装与配置教程
    MapReduce数据流(三)
    MapReduce数据流(二)
    c++中的临时对象
    如何修改CMD命令行窗口下的默认路径
    VC2005: warning LNK4076: 无效的增量状态文件
  • 原文地址:https://www.cnblogs.com/winstom/p/15159343.html
Copyright © 2020-2023  润新知