美文网首页程序员蓉城devopsLinux学习之路
普通程序员看k8s的账户管理

普通程序员看k8s的账户管理

作者: wilsonchai | 来源:发表于2019-04-08 10:53 被阅读4次

一、知识准备

● 账户管理分为:userAccount与serviceAccount
● userAccount:通常是给人设计使用的,并且userAccount不在k8s集群内管理
● serviceAccount:通常是为集群内pod,外部service访问而设计的,更轻量级,更专注与实现某个任务
● k8s账户管理,主要提供身份验证的功能,必须是k8s授权的账户,才能被允许进入集群。这里需要注意的是身份验证之后只是被允许进入集群,但是不一定有访问资源的权限,此时需要用到RBAC来实现
● k8s账户认证主要有证书+私钥、token和账户名密码等方式进行认证

二、环境准备

组件 版本
OS Ubuntu 18.04.1 LTS
docker 18.06.0-ce
k8s v1.10.1
三、userAccount

我们首先生成一个userAccount,生成userAccount的方法:

创建mrvolleyball账户私钥

root@k8s-master:/etc/kubernetes/ssl# openssl genrsa -out mrvolleyball.key 2048
Generating RSA private key, 2048 bit long modulus
.........+++
........................+++
e is 65537 (0x010001)

基于私钥签署证书,由k8s的ca来签署(该ca是创建k8s集群的时候生成的)

root@k8s-master:/etc/kubernetes/ssl# openssl req -new -key mrvolleyball.key -out mrvolleyball.csr -subj "/CN=mrvolleyball"
root@k8s-master:/etc/kubernetes/ssl# openssl x509 -req -in mrvolleyball.csr -CA k8s-root-ca.pem -CAkey k8s-root-ca-key.pem -CAcreateserial -out mrvolleyball.crt
Signature ok
subject=CN = mrvolleyball
Getting CA Private Key

注:k8s-root-ca.pem与k8s-root-ca-key.pem分别是证书与私钥

签署完成,k8s是怎么识别你的账户名呢:

root@k8s-master:/etc/kubernetes/ssl# openssl x509 -in mrvolleyball.crt -text
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            e5:5e:0d:d2:bc:2e:8a:c6
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = ChengDu, L = ChengDu, O = k8s, OU = System, CN = kubernetes
        Validity
            Not Before: Mar  1 10:23:44 2019 GMT
            Not After : Mar 31 10:23:44 2019 GMT
        Subject: CN = mrvolleyball
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
...

k8s主要是通过Subject: CN = mrvolleyball来识别账户名

接下来将账户注册到kubectl config当中进行管理:

root@k8s-master:/etc/kubernetes/ssl# kubectl config set-cluster mrvolleyball-k8s --server https://192.168.17.171:6443
Cluster "mrvolleyball-k8s" set.
root@k8s-master:/etc/kubernetes/ssl# kubectl config set-cluster mrvolleyball-k8s --certificate-authority=k8s-root-ca.pem
Cluster "mrvolleyball-k8s" set.
root@k8s-master:/etc/kubernetes/ssl# kubectl config set-context context@mrvolleyball-k8s --cluster=mrvolleyball-k8s --user=mrvolleyball
Context "context@mrvolleyball-k8s" created.
root@k8s-master:/etc/kubernetes/ssl# kubectl config set-credentials mrvolleyball --client-certificate=mrvolleyball.crt --client-key=mrvolleyball.key
User "mrvolleyball" set.

创建好之后使用新账户来登录:

root@k8s-master:/etc/kubernetes/ssl# kubectl config use-context context@mrvolleyball-k8s
Switched to context "context@mrvolleyball-k8s".
root@k8s-master:/etc/kubernetes/ssl# kubectl get pod
Error from server (Forbidden): pods is forbidden: User "mrvolleyball" cannot list pods in the namespace "default"

由于没有权限,我们只能允许被进入k8s集群,但是没有访问任何资源的权限

四、serviceAccount

● 当一个pod被创建的时候,pod也需要去k8s-api注册自己的信息,这时候使用的身份验证及时serviceaccount
● 相对于创建证书与私钥的方式,serviceaccount突出轻的特点,使用token认证

对于k8s来说,会默认在每一个命名空间下面,创建一个token用于pod进行身份验证

root@k8s-master:/etc/kubernetes/ssl# kubectl get secret --all-namespaces | grep default-token
default       default-token-v9nkm                        kubernetes.io/service-account-token   3         192d
kube-public   default-token-hzfqq                        kubernetes.io/service-account-token   3         192d
kube-system   default-token-g9ghd                        kubernetes.io/service-account-token   3         192d
test1         default-token-j5j67                        kubernetes.io/service-account-token   3         85d

当pod启动的时候,会默认挂载当前namespace下secret进入pod,通过这个secret,进行身份验证

创建一个busybox进行测试:

root@k8s-master:~# echo 'apiVersion: v1
> kind: Pod
> metadata:
>   name: busybox
> spec:
>   containers:
>   - image: busybox:latest
>     name: busybox
>     command: ["sleep","3600"]' | kubectl apply -f -
pod "busybox" created>
root@k8s-master:~# kubectl describe pod busybox
...
Volumes:
  default-token-v9nkm:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-v9nkm
    Optional:    false
...

来到volumes这里,default-token-v9nkm正是我们default namespace中默认的key,通过挂载这个secret,pod拿到了进入k8s-api的准入许可

五、小结

● 本文介绍了k8s的账户管理的两种方式userAccount、serviceAccount,以及两种不同的验证方式
● 下一节介绍基于角色的权限控制RBAC


至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

相关文章

  • 普通程序员看k8s的账户管理

    一、知识准备 ● 账户管理分为:userAccount与serviceAccount● userAccount:通...

  • Centos安装NodeBB论坛

    使用普通用户由于我只有管理员账户root, 建议使用普通账户 它们分别创建用户sammy, 设置密码, 加入管理员...

  • 普通程序员看k8s基于角色的访问控制(RBAC)

    一、知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制● 网上RBAC的文章非常多,具体概念大...

  • 新建管理员账户

    不小心把管理员账户改为了普通用户,需要新建一个管理员账户。 输入reboot回车之后,电脑会重新启动然后依次 更多...

  • 2B电商网站登录注册

    2B产品账号体系的特点: (1)2级账号体系:企业—员工。 (2)员工分权限:管理员账户和普通账户。 1、注册 用...

  • Mac系统搞丢管理员账户的处理

    本贴解决问题:mac系统中,一个管理员账户都不存在,在只有普通成员或客人用户的情况下添加一个管理员账户。 1.前提...

  • Mac重装系统导致无管理员账户解决方案

    背景 笔者今日Mac笔记本更新出问题,自制Mac系统启动盘重装系统后,发现原本的管理员账户变成普通账户,而且没有找...

  • Debian10部署Kubernetes1.20.5

    一、简介 Kubernetes(简称K8S)只有管理节点与工作节点两种类型。管理节点主要负责K8S集群管理、集群中...

  • K8S上HelmV2.11+TillerV2.11.0组件的部署

    Helm组件介绍 Helm 是K8S上的管理Charts 的工具,Charts 是K8S上的应用的安装以及管理,与...

  • 程序员成长路线

    程序员的成长路线 个人工作之余的感悟,欢迎讨论:普通程序员,高级程序员,专家,领域专家,通用型领域专家加管理人才,...

网友评论

    本文标题:普通程序员看k8s的账户管理

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