一、知识准备

● 账户管理分为: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的账户管理的更多相关文章

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

    一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...

  2. 看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点

    摘要:为保证高速公路上门架系统的落地项目的成功落地,选择K8s和KubeEdge来进行整体的应用和边缘节点管理. 一.项目背景 本项目是在高速公路ETC联网和推动取消省界收费站的大前提下,门架系统的落 ...

  3. 首席技术官 (CTO) 比普通程序员强在哪

    互联网的蓬勃发展,让无数的程序员身价水涨船高,都变成了「香饽饽」,更有了不少「创业」,「当上 CTO,迎娶白富美的传说」.都说不想当元帅的士兵不是好士兵,我觉得这件事见仁见智,但提升自己的价值,让自己 ...

  4. 想知道吗?CTO 比普通程序员强在哪?

    互联网的蓬勃发展,让无数的程序员身价水涨船高,都变成了「香饽饽」,更有了不少「创业」,「当上 CTO,迎娶白富美的传说」.都说不想当元帅的士兵不是好士兵,我觉得这件事见仁见智,但提升自己的价值,让自己 ...

  5. MySQL账户管理

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  6. 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

    引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...

  7. 普通程序员如何转向AI方向

    眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 本文的目的是给出一个简单的,平 ...

  8. CentOS下的账户管理

    在Linux中,每个文件都分3类权限:账户本身的权限,账户所在群组的权限和其它权限.账户和群组是多对多的关系,即一个账户可以属于多个群组,一个群组可以包含多个账户.但是,对于每一个已登录的账户,只能存 ...

  9. 普通程序员如何转向AI方向(转)

    普通程序员如何转向AI方向   眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 ...

随机推荐

  1. RecyclerView使用技巧(item动画及嵌套高度适配解决方案)

    原文地址 · Frank-Zhu  http://frank-zhu.github.io/android/2015/02/26/android-recyclerview-part-3/?utm_sou ...

  2. windows系统显示隐藏文件以及显示文件扩展名

    1.XP系统 打开“我的电脑”,“工具”,“文件夹选项” 勾选如下图 2.win7系统 打开“计算机”,“组织”,“文件夹和搜索选项” 勾选如下图 3.win10系统 打开“此电脑”,“查看”,勾选如 ...

  3. T4学习- 2、创建设计时模板

    使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的关键 ...

  4. 使用JavaScript实现简单的小游戏-贪吃蛇

    最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...

  5. 【PyCharm疑问】在pycharm中带有中文时,有时会导致程序判断错误,是何原因?

    1.会导致程序打印false错误的代码如下: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as ...

  6. MySql详解(二)

    MySql的安装和使用安装过程可以自行百度,非常简单,一直下一步就行,这里省略. 启动和停止MySql服务:• 方式一:通过计算机管理方式右击计算机—管理—服务—启动或停止MySQL服务• 方式二:通 ...

  7. PGM1.1-简介

    自己根据Jordan大神的资料写的(算翻译?完全不记得了,这是半年前整理的,反正不记得了,如果大神有看到部分重合,那肯定是我借鉴了人家的,本来是一个群里的人大家兴致高说写DL的书(所以这一章并不是书的 ...

  8. PHP封装curl的调用接口及常用函数

    <?php /** * @desc 封装curl的调用接口,post的请求方式 */ function doCurlPostRequest($url, $requestString, $time ...

  9. 基于R语言的时间序列分析预测

    数据来源: R语言自带 Nile 数据集(尼罗河流量) 分析工具:R-3.5.0 & Rstudio-1.1.453 #清理环境,加载包 rm(list=ls()) library(forec ...

  10. mfc 进程的优先级

    知识点:  进程优先级  获取当前进程句柄  优先级设置  优先级变动  优先级获取 一.进程优先级(优先级等级) 简单的说就是进程(线程)的优先级越高,那么就可以分占相对多的CPU时间片. ...