其他分享
首页 > 其他分享> > k8s认证及ServiceAccount

k8s认证及ServiceAccount

作者:互联网

一、ServiceAccount

(1)简介

https://www.kubernetes.org.cn/service-account

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同

 当创建 pod 的时候,如果没有指定一个 service account,系统会自动在与该pod 相同的 namespace 下为其指派一个default service account。而pod和apiserver之间进行通信的账号,称为serviceAccountName。

  

  

从上面截图可看到每个Pod都会有个存储卷,这个存储卷为token令牌,这就是pod和serviceaccount认证信息。通过secret进行定义,由于认证信息属于敏感信息,所以需要保存在secret资源当中,并以存储卷的方式挂载到Pod当中。从而让Pod内运行的应用通过对应的secret中的信息来连接apiserver,并完成认证。每个 namespace 中都有一个默认的叫做 default 的 service account 资源。进行查看名称空间内的secret,也可以看到对应的default-token。让当前名称空间中所有的pod在连接apiserver时可以使用认证信息,从而保证pod之间的通信。

 (2)创建方式

默认的service account 仅只能获取当前Pod自身的相关属性,无法观察到其他名称空间Pod的相关属性信息。如果想要扩展Pod,假设有一个Pod需要用于管理其他Pod或者是其他资源对象,是无法通过自身的名称空间的serviceaccount进行获取其他Pod的相关属性信息的,此时就需要进行手动创建一个serviceaccount,并在创建Pod时进行定义。实际上,service accout也属于一个k8s资源,如下查看service account的资源定义字段:

   [root@k8s-master ~]# kubectl explain sa

   k8s的命令行create,封装了很多资源创建命令:

   [root@master ~]# kubectl create serviceaccount -h    #查看帮助

   [root@master ~]# kubectl create serviceaccount mysa -o yaml --dry-run

   

  --dry-run:验证是否能创建,但不会真的创建

  -o yaml:输出为yaml,这样可以快捷的得到yaml文件,甚至改改就能用了

(3)创建 

   [root@master ~]# kubectl create serviceaccount admin  #创建一个名为admin的sa

  

  查看这个sa:

  

  

  可以看到有一个 token 已经被自动创建,并被 service account 引用。

 (4)serviceaccount的自定义使用  

现在创建pod时都时使用默认serviceaccount的,要设置使用非默认的 service account,只需要在 pod 的spec.serviceAccountName 字段中将name设置为您想要用的 service account 名字即可。在 pod 创建之初 service account 就必须已经存在,否则创建将被拒绝。需要注意的是不能更新已创建的 pod 的 service account。

   创建pod,并使用自定义serviceaccount:

   a、定义pod资源清单

    [root@master manifests]# vim pod-sa-demo.yaml

    

  b、创建

    

    

  c、查看

    

    由token可见已经使用了上面定义的serviceaccount;

 

标签:account,service,创建,ServiceAccount,认证,serviceaccount,Pod,k8s,pod
来源: https://www.cnblogs.com/weiyiming007/p/10477164.html