Kubernetes(k8s)服务账号Service Accounts
一.系统环境
本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。
| 服务器版本 | docker软件版本 | Kubernetes(k8s)集群版本 | CPU架构 |
|---|---|---|---|
| CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | v1.21.9 | x86_64 |
Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点。
| 服务器 | 操作系统版本 | CPU架构 | 进程 | 功能描述 |
|---|---|---|---|---|
| k8scloude1/192.168.110.130 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master节点 |
| k8scloude2/192.168.110.129 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
| k8scloude3/192.168.110.128 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
二.前言
Kubernetes是一个开源的容器编排和管理平台,它允许用户在分布式环境中部署、运行和管理容器化应用程序。在Kubernetes中,服务账号(Service Accounts)是用来对应用程序提供身份验证和授权的一种机制。
使用服务账号(Service Accounts)的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。
三.服务账号Service Accounts简介
在Kubernetes中,每个Pod都有一个关联的服务账号。服务账号是用来表示Pod身份的对象,它允许Pod与其他资源进行交互,并且可以通过所分配的角色或角色绑定来限制其权限。服务账号由Kubernetes集群自动创建和管理,用户无需手动创建。
服务账号主要用于以下两个目的:
- 身份验证:服务账号允许Pod与Kubernetes API进行通信时进行身份验证,确保只有经过授权的Pod可以访问指定的资源。
- 授权访问:通过为服务账号分配特定的角色或角色绑定,可以控制该服务账号对不同资源的访问权限,从而实现细粒度的授权管理。
四.用户账号与服务账号区别
用户账号和服务账号在Kubernetes中有一些关键的区别:
- 用户账号通常是由集群管理员创建和管理的,用于标识人类用户。它们通常用于管理集群级别的资源和操作。
- 服务账号通常是由Kubernetes自动创建和管理的,用于标识Pod或其他资源。它们通常用于管理应用程序级别的资源和操作。
- 用户账号具有长期凭据(如用户名和密码、证书等),而服务账号只存在于特定生命周期的Pod中,并由Kubernetes自动为其生成令牌进行身份验证。
- 用户账号通常用于管理整个集群,而服务账号通常用于管理特定的应用程序或容器。
五.服务账号(Service Accounts)
5.1 创建服务账号(Service Accounts)
简而言之,用户账户user account 用于远程登录我们kubernetes系统,服务账户service account(简称sa)让特定的应用程序或容器具有操作k8s某个资源的权限。
查看sa账号,可以看到有一个default账号。
[root@k8scloude1 safe]# kubectl get sa
NAME SECRETS AGE
default 1 2d4h
查看default的描述信息。
[root@k8scloude1 safe]# kubectl describe sa default
Name: default
Namespace: safe
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: default-token-cqst6
Tokens: default-token-cqst6
Events: <none>
每个sa账号对应一个secret,关于secrets的详细内容,请查看博客《Kubernetes(k8s)密码管理:Secret》。
[root@k8scloude1 safe]# kubectl get secrets
NAME TYPE DATA AGE
default-token-cqst6 kubernetes.io/service-account-token 3 2d4h
创建一个sa,对应的也会创建一个secret。
[root@k8scloude1 safe]# kubectl create sa sa1
serviceaccount/sa1 created
[root@k8scloude1 safe]# kubectl get secrets
NAME TYPE DATA AGE
default-token-cqst6 kubernetes.io/service-account-token 3 2d4h
sa1-token-njfhz kubernetes.io/service-account-token 3 3s
每个secret对应一个token。
[root@k8scloude1 safe]# kubectl describe secrets sa1-token-njfhz
Name: sa1-token-njfhz
Namespace: safe
Labels: <none>
Annotations: kubernetes.io/service-account.name: sa1
kubernetes.io/service-account.uid: b7764cf7-6048-454c-972c-f4918af1ebdb
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 4 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InJJaUNYYXpKanA2Qkg4SW4yemE1MVM4MTJxeXpVbV9sQkk5RF9CaVpLZlEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJzYWZlIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InNhMS10b2tlbi1uamZoeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJzYTEiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNzc2NGNmNy02MDQ4LTQ1NGMtOTcyYy1mNDkxOGFmMWViZGIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6c2FmZTpzYTEifQ.szX11teINKjADoVGcOI6bYXtlmk8bzIJkYN-3uNqtPUrumm2UaqBpZxFDNH9z4sCVM2KDS2fCBnDI6iU6Ok37P7r7o9twRDbM7nXIEFCGgEnM8iLDQ0G71q3xfeo7IrfEN2idQx-LbgoggLsh9IQZz6IdxGkDGv-DoVihvBsOhpkijJ08GxsNVeizUhCuM87dMaksxx1Lw7vRkzYEZka_Qi0bqrZgTE4a3DgRclbPfIgo06bMZZ2YmfDlp5n5MRveWm6Cwobl-g4uvmJCyd6wRD0vB_MwO3ug-BvJNCgEDhdd1eSTCijZNgS0BWQy1cCpBxhgpKzbgicqyKc2fMzHg
5.2 对服务账号(Service Accounts)授权
服务账号(Service Accounts)的授权语法:kubectl create clusterrolebinding clusterrolebinding名 --clusterrole=cluster-admin --serviceaccount=命名空间:sa名。
把集群角色cluster-admin绑定到服务账户sa1上,sa1属于safe命名空间,cluster-admin是集群管理员权限。对sa1授权之后,sa1对应的secret的token就具备了相应权限。关于授权的详细内容,请查看博客《Kubernetes(k8s)访问控制:权限管理之RBAC鉴权》。
[root@k8scloude1 safe]# kubectl create clusterrolebinding clusterrolebinding2 --clusterrole=cluster-admin --serviceaccount=safe:sa1
clusterrolebinding.rbac.authorization.k8s.io/clusterrolebinding2 created
5.3 在pod里使用服务账号(Service Accounts)
编写yaml文件,功能为:创建了一个名为"podtest"的Pod,使用Nginx镜像创建pod,并指定pod使用sa1账号运行。
[root@k8scloude1 safe]# vim pod.yaml
[root@k8scloude1 safe]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: podtest
name: podtest
spec:
#当需要关闭容器时,立即杀死容器而不等待默认的30秒优雅停机时长。
terminationGracePeriodSeconds: 0
containers:
- name: nginx
image: nginx
#imagePullPolicy: IfNotPresent:表示如果本地已经存在该镜像,则不重新下载;否则从远程 Docker Hub 下载该镜像
imagePullPolicy: IfNotPresent
#serviceAccount: sa1表示使用sa1账号运行
serviceAccount: sa1
创建pod。
[root@k8scloude1 safe]# kubectl apply -f pod.yaml
pod/podtest created
[root@k8scloude1 safe]# kubectl get pod
NAME READY STATUS RESTARTS AGE
podtest 1/1 Running 0 11s
在线编辑pod,里面显示了serviceAccount: sa1 serviceAccountName: sa1 表明podtest以sa1的身份运行。
[root@k8scloude1 safe]# kubectl edit pod podtest
Edit cancelled, no changes made.
进入podtest,查看挂载的serviceaccount。
[root@k8scloude1 safe]# kubectl exec -it podtest -- bash
#查看容器挂载,可以发现挂载了一个serviceaccount
root@podtest:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 150G 12G 139G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda1 xfs 150G 12G 139G 8% /etc/hosts
shm tmpfs 64M 0 64M 0% /dev/shm
tmpfs tmpfs 1.5G 12K 1.5G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs tmpfs 1.5G 0 1.5G 0% /proc/acpi
tmpfs tmpfs 1.5G 0 1.5G 0% /proc/scsi
tmpfs tmpfs 1.5G 0 1.5G 0% /sys/firmware
#进入挂载目录
root@podtest:/# cd /run/secrets/kubernetes.io/serviceaccount
root@podtest:/run/secrets/kubernetes.io/serviceaccount# ls
ca.crt namespace token
#这个token就是sa1对应的token,使用sa1对应的token就可以访问相应程序
root@podtest:/run/secrets/kubernetes.io/serviceaccount# cat token
eyJhbGciOiJSUzI1NiIsImtpZCI6InJJaUNYYXpKanA2Qkg4SW4yemE1MVM4MTJxeXpVbV9sQkk5RF9CaVpLZlEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjc5MzE0MTIyLCJpYXQiOjE2NDc3NzgxMjIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJzYWZlIiwicG9kIjp7Im5hbWUiOiJwb2R0ZXN0IiwidWlkIjoiMTA3MGMzODYtMzViNS00YTc4LWJlZTctYzJlZDZhNzM5ZTM2In0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJzYTEiLCJ1aWQiOiJiNzc2NGNmNy02MDQ4LTQ1NGMtOTcyYy1mNDkxOGFmMWViZGIifSwid2FybmFmdGVyIjoxNjQ3NzgxNzI5fSwibmJmIjoxNjQ3Nzc4MTIyLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6c2FmZTpzYTEifQ.Beoio2xxjVFFrALUeWkkZrD_Jt-RuI-WksB7TVyia1-8kM6gOnzmR81iZyZ1HP1o6600GeZCJO45dtz6Kg02tzpIXzBREohH_MKwNMZsMOGuH3DUTpwGSq9ZWUiOadVJr6_YmSoK9uT9x7H4xD55o-X1YVHsxZ5pbV05TKwa7OTWrlFIXr1fTjjJ73eLDbVX9BbLkD5MQ8LJ7XwwF-5SXLgCrIwYmRRwVj1kKsxM-45OSJehUoy73dKf-qQxZi7YjdiOgnjfyIgLs1qW1d21O2PCZyFPAK6NUG4NcN5BSb-bbkD7xo54cENGmGhefE9ALk5aIdggjhsjiGwZ-0zZyQroot@podtest:/run/secrets/kubernetes.io/serviceaccount#
root@podtest:/run/secrets/kubernetes.io/serviceaccount# exit
exit
删除pod。
[root@k8scloude1 safe]# kubectl delete pod podtest
pod "podtest" deleted
[root@k8scloude1 safe]# kubectl get pod
No resources found in safe namespace.
六.总结
本篇博客介绍了Kubernetes中的服务账号(Service Accounts)及其与用户账号的区别。服务账号是用于标识Pod的身份,它们允许Pod与其他资源进行交互,并通过所分配的角色或角色绑定来限制其权限。
我们学习了如何创建和查看服务账号(Service Accounts),并了解了如何将角色或角色绑定与服务账号关联起来以控制访问权限。此外,我们还了解了在Pod中如何使用服务账号。
通过合理地使用服务账号,可以实现Kubernetes集群中资源的安全和权限管理,确保只有授权的Pod可以访问指定的资源。
七.附加信息
- 在Kubernetes中,服务账号仅用于身份验证和授权,不提供与操作系统用户账号的直接映射。
- 服务账号的权限是基于角色和角色绑定进行控制的,需要根据实际需求进行适当配置。
- 通过合理管理服务账号,可以减少潜在的安全风险,并确保应用程序的可靠性和稳定性。
Kubernetes(k8s)服务账号Service Accounts的更多相关文章
- 在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码
背景信息: 通常在SharePoint环境中我们会使用很多的服务账号来运行各种不同的服务,尤其在企业环境中,由于权限管理条例严格,这些服务账号更是只能多不能少.面对如此多的服务账号,各个企业都会有自己 ...
- Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理
Kubernetes K8S使用IPVS代理模式,当Service的类型为ClusterIP时,如何处理访问service却不能访问后端pod的情况. 背景现象 Kubernetes K8S使用IPV ...
- Kubernetes K8S之Service服务详解与示例
K8S之Service概述与代理说明,并详解所有的service服务类型与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master Cent ...
- Kubernetes K8S之Pod跨namespace名称空间访问Service服务
Kubernetes的两个Service(ServiceA.ServiceB)和对应的Pod(PodA.PodB)分别属于不同的namespace名称空间,现需要PodA和PodB跨namespace ...
- 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像
❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...
- 基于Kubernetes(k8s)部署Dubbo+Nacos服务
一.说明 本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo + Nacos 的微服务系统,并使用 Kubernetes DNS 以及 port-for ...
- Kubernetes K8S之鉴权RBAC详解
Kubernetes K8S之鉴权概述与RBAC详解 K8S认证与授权 认证「Authentication」 认证有如下几种方式: 1.HTTP Token认证:通过一个Token来识别合法用户. H ...
- Kubernetes K8S之kube-prometheus概述与部署
Kubernetes K8S之kube-prometheus概述与部署 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7. ...
- 5.基于二进制部署kubernetes(k8s)集群
1 kubernetes组件 1.1 Kubernetes 集群图 官网集群架构图 1.2 组件及功能 1.2.1 控制组件(Control Plane Components) 控制组件对集群做出全局 ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2
基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...
随机推荐
- pandas之字符串操作
Pandas 提供了一系列的字符串函数,因此能够很方便地对字符串进行处理.在本节,我们使用 Series 对象对常用的字符串函数进行讲解.常用的字符串处理函数如下表所示: 函数名称 函数功能和描述 l ...
- pysimplegui之光标 - 元素和窗口的设置
光标 - 元素和窗口的设置 通过将光标设置为元素或整个窗口,可以将普通箭头光标更改为其他内容.当您将鼠标移到元素或窗口上时,结果将是光标发生变化. 最好的例子之一是 URL.当鼠标移到链接上时,用户习 ...
- SMT贴片加工钢网工艺制作方法
smt贴片加工过程中,首先要进行锡膏印刷,而锡膏印刷的工作原理就是用机器刮刀将锡膏推送到钢网的孔洞中,使锡膏与pcb板的电子元器件接触,为下一步焊接做准备.钢网的作用就是与pcb板焊盘位置固定,使锡膏 ...
- hadoop伪分布式集群的安装(不是单机版)
准备工作 三台虚拟机,关闭防火墙,关闭selinux 查看防火状态 systemctl status firewalld 暂时关闭防火墙 systemctl stop firewalld 永久关闭防火 ...
- Redis(一)五种基本数据类型
1 NoSQl数据库 1.1 技术的发展 技术的分类: ①解决功能性问题:javase ②解决扩展性问题:框架 ③解决性能问题:redis 1.2 NoSQL数据库概述 NoSQL(Not Only ...
- 测试环境治理之MYSQL索引优化篇
作者:京东物流 李光新 1 治理背景 测试环境这个话题对于开发和测试同学一定不陌生,大家几乎每天都会接触.但是说到对测试环境的印象,却鲜有好评: •环境不稳定,测试五分钟,排查两小时 •基础建设不全, ...
- Springboot+Mysql 图书管理系统【源码+sql】
java项目 学生图书管理系统 (源码+数据库文件)技术框架:java+springboot+mysql后端框架: Spring Boot.Spring MVC.MyBatis Plus前端界面: T ...
- 业务系统对接CAS
启动类加@EnableCasClient <!--cas客户端--> <dependency> <groupId>net.unicon.cas</groupI ...
- RTP分包模式(H264/H265)
在rfc6184-h264文档5.4章节有详细说明.以及rfc7798-h265文档4.2章节中也有部分介绍. 一.NALU Header ● H264 NALU Header(1 byte)结构图如 ...
- 禁用Chrome浏览器Websocket
前言:最近遇到关于Websocket的相关测试,推荐一个禁用Chrome浏览器Websocket的扩展插件 一.下载使用 1.https://github.com/arthepsy/chrome-di ...