关于ServiceAccount以及在集群内访问K8S API

k8s权限配置(ServiceAccount、Role、ClusterRole) 基于RBAC配置User权限,包括操作(get、create、list、delete、update、edit、watch、exec)资源: Pods PV ConfigMaps Deployments Nodes Secrets Namespaces 资源与api group关联(如pods属于core api group,deployments属于apps api group)。 在RBAC中的几个概念: Rules:规定一组可以在不同api group上的资源执行的规则(verbs) Role与Clus 阅读详情

写在开篇

在之前的两篇文章中提到,有4种方式使用 ConfigMap 配置 Pod 中的容器,关于之前的两篇可参考:

本篇的实战场景就以访问API的方式读取 ConfigMap,也就是编写代码在 Pod 中运行,然后使用 K8S API 来读取 ConfigMap的内容。但是,这个场景涉及到服务账号、K8S集群内身份验证的相关知识点。为了控制篇幅(主要是文章太长,担心没人看到最后),打算再拆分两篇。本篇尽力先把涉及到的知识点搞清楚,下一篇再真正进入实战环节,例如写代码,制作镜像等等。

其实,这个实战场景,也刚好弥补了在之前分享过的 下篇(开始写代码):运维开发人员不得不看的K8S API实战》 中缺少的 “集群内进行身份验证” 的内容。

在继续之前,如果对K8S API的使用套路还一无所知,可结合参考:

K8S的账号类型

在K8S中,主要有两种账号类型:

  1. User Accounts(用户账号):用户账号用于标识和验证 Kubernetes 集群的用户。用户账号通常由集群管理员创建,并与相应的身份验证凭据(如用户名和密码、令牌等)关联。用户账号用于进行集群管理操作,如创建、删除和更新资源,以及访问集群中的敏感信息。
  2. Service Accounts(服务账号):服务账号是用于身份验证和授权 Pod 内的应用程序的一种机制。每个 Pod 都可以与一个 Service Account 相关联,并使用该 Service Account 进行与 Kubernetes API Server 的通信。服务账号通常用于在 Pod 内的应用程序与集群中的其他资源进行交互,如读取 ConfigMap、访问 Secrets 等。

更多信息可参考官方文档:authentication

关于ServiceAccount和在K8S集群内身份验证

上次的实战场景 《下篇(开始写代码):运维开发人员不得不看的K8S API实战》 主要是在K8S集群外进行身份验证,因为调用K8S API的代码是运行在集群外部。而这次的场景是:调用K8S API的代码运行在POD容器里,也就是要在K8S集群内部进行身份验证。

当调用K8S API的代码(应用程序代码)运行在POD里的容器时,Pod中的应用程序可以使用其关联的 ServiceAccount 去访问 API Server 中的 Kubernetes 资源(比如访问ConfigMap资源)。在访问资源时,ServiceAccount 会使用其所分配的 RBAC 角色来确定它有哪些权限。为了方便理解,我简单画了个图,如下:

图片

  • 身份认证:应用程序可以使用与之关联的 ServiceAccount 进行身份认证,以证明其对 Kubernetes 集群中的资源的合法访问权限。
  • 访问授权:通过与访问控制策略(如 Role、ClusterRole)结合使用,可以为 ServiceAccount 分配特定的角色和权限,从而限制应用程序对资源的访问范围和操作权限。

关于ServiceAccount的更多信息可参考官方文档:service-accounts

关于每个命名空间下默认的服务账号:default

官方文档提到:默认服务账户是Kubernetes在创建集群时自动为每个命名空间创建的一个ServiceAccount对象。每个命名空间中的服务账户默认情况下没有任何权限,除非启用了基于角色的访问控制(RBAC),此时Kubernetes会授予所有经过身份验证的主体默认的API发现权限。如果在一个命名空间中删除了ServiceAccount对象,控制平面会自动替换为一个新的ServiceAccount对象。如果在一个命名空间中部署一个Pod,并且没有手动为Pod分配一个ServiceAccount,Kubernetes会将该命名空间的默认ServiceAccount分配给该Pod。

接下来,查看一下默认命名空间(default)下的serviceaccount:

[root@k8s-b-master ~]# kubectl get serviceaccount
NAME      SECRETS   AGE
default   0         16d
[root@k8s-b-master ~]# kubectl get serviceaccount default -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2023-04-30T03:24:16Z"
  name: default
  namespace: default
  resourceVersion: "359"
  uid: 47c8dccd-2d91-47cf-b0b7-ce4d02b610a8
[root@k8s-b-master ~]# 

创建一个名为goweb的自定义命名空间,创建后,在该命名空间下已经自动创建了一个名为default的serviceaccount对象:

[root@k8s-b-master ~]# kubectl create ns goweb
namespace/goweb created
[root@k8s-b-master ~]# kubectl get serviceaccount -n goweb
NAME      SECRETS   AGE
default   0         8s
[root@k8s-b-master ~]# kubectl get serviceaccount default -n goweb -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2023-05-17T03:26:41Z"
  name: default
  namespace: goweb
  resourceVersion: "284809"
  uid: c0254d59-c625-4ef9-a619-1c51fdcfeef6
[root@k8s-b-master ~]# 

到了这里,可能会提出这样的问题:创建自定义的命名空间后,为什么会自动创建一个名为default的ServiceAccount?

这是因为ServiceAccount是用于身份验证和授权的一种机制,每个Pod都需要与一个ServiceAccount关联,以确定Pod在集群中的身份和权限。

默认的ServiceAccount是为了确保在创建Pod时不会发生错误。如果没有显式地指定Pod要使用的ServiceAccount,Kubernetes会自动将命名空间的默认ServiceAccount分配给该Pod。这样,Pod就能够获得基本的权限和凭据,以便与集群中的其他组件进行通信。

默认的ServiceAccount通常没有具体的权限,除非通过其他方式为其分配了角色和权限。默认情况下,它只拥有基本的API发现权限,允许Pod发现集群中的其他API资源。

可以通过为Pod显式指定不同的ServiceAccount来覆盖默认行为,以满足特定的安全需求和访问控制策略,这也就是下篇要做的事情:为 Pod配置ServiceAccount。

为Pod配置ServiceAccount的步骤

为控制篇幅,为Pod配置ServiceAccount,以及编写使用Go调用K8S API的代码、制作镜像等等均放到下篇分享。

为Pod配置ServiceAccount的步骤很简单,下面仅给出步骤,如下:

  1. 创建ServiceAccount
  2. 创建Role:定义所需的权限
  3. 创建RoleBinding,将ServiceAccount和Role关联起来
  4. 将ServiceAccount对象分配给Pod

更多信息可参考官方文档:configure-service-account

本文转载于WX公众号:不背锅运维(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/1BbBLr4E564b6OdIpXjMjw

CentOS部署K8s集群步骤与问题汇总 CentOS部署K8s,以及使用api访问k8s服务过程中的一些踩坑经历及解决办法 阅读详情

相关推荐

手把手教你复现K8s集群etcd 2379端口未授权访问漏洞(附实战截图)

本文深入解析Kubernetes集群中etcd未授权访问漏洞的成因、检测与利用方法,并提供实战截图演示。通过详细步骤展示如何从etcd漏洞到集群接管,同时给出网络层防护、认证加密等防御策略,帮助安全从业者有效防范这一高危漏洞。

weixin_30520015的博客 432

Kubernetes_认证授权_ServiceAccount_服务账号全解析

梳理出ServiceAccount服务账号一条线

毛毛的专栏 3013

关于Kubernetes 使用REST API访问集群

关于Kubernetes 使用REST API访问集群 上一篇文章讲了使用Postman访问k8s RESTful API 现在有个问题:我只能访问namespaces:default的信息 如何访问其他namespaces的相关信息呢? Role-based access control(RBAC) 基于角色的访问控制 RBAC是k8s中的一种授权方式,使用rbac.authorization.k8s.io API驱动授权决策,允许k8s管理员通过该API动态配置授权策略。 RBAC申明了四种顶级的

qq_40473491的博客 509

pod内访问kubernetes API server

本文接上一篇介绍如何从pod内部访问kubernetes API server。 所有的pod默认都关联上一个serviceAccount,只要该serviceAccount有权限访问你访问的资源对象,就可以直接访问。 我们使用default namespace中default serviceAccount, 提前创建了一个role并将default和该role进行roleBinding。 前提 ...

russle的专栏 6362

Cadence电路原理图全部变成黄色如何解决?

Cadence电路原理图全部变成黄色如何解决?现象:解决方法: 最近用cadence仿真锁相环,拷贝师哥的library后打开,发现schematic中全部变成了黄色,但可以正常修改元件参数,正常仿真。仅仅影响使用效果,看起来超级难受。 现象: 1.电路元件及连线全部变为黄色 2.可以正常修改参数,电路ADE仿真 如下图所示: 解决方法: 重新导入display.drf文件,步骤如下: tool——Display Resource Manager,截图如下 完成上述步骤,显示如下界面,选择Merge选项

virtuoso~晓晓 1万+

Qwen2.5-7B大模型实战:从零部署到高效推理全流程解析

本文详细解析了Qwen2.5-7B大模型从零部署到高效推理的全流程。内容涵盖环境准备、模型下载、使用Transformers进行核心对话推理,并深入介绍了vLLM与TGI生产级服务部署、GPTQ/AWQ量化技术以降低显存消耗,以及llama.cpp、Ollama等本地推理方案。旨在帮助开发者快速掌握部署技巧,实现大模型在消费级硬件上的高效运行。

weixin_29061425的博客 491

(7)Kubernetes之Service Account

转自:https://www.orchome.com/1315

allensandy的博客 190

高效搭建微信公众号爬虫全流程

微信公众号爬虫系统成功完成功能测试验证。该系统具备完整的数据采集与管理能力,支持多公众号内容爬取、数据存储与统计分析。通过命令行界面可执行爬取操作(如量子位、新智元等公众号),查看最新文章列表和系统统计信息。测试显示SQLite数据库正常存储数据,所有核心功能(多源支持、文章检索、数据统计)均运行良好。系统采用模块化设计,扩展性强,为后续接入真实API或网页爬取奠定了坚实基础,是AI内容聚合的优质开发平台。🎉

weixin_44975687的博客 1556

如何优雅的让 Pod 通过 ServiceAccount 访问 K8s api-server

❝本文转自掘金 LEE 的博客,原文:https://juejin.cn/post/7195842444302123069,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yang事件背景某天早上刚到公司工位上,正准备开会。被一个业务组项目负责人抓住了,然后着急的说到:“老李啊,跟你说。昨天晚上准备要上线的 Ingressroutes 监控分析模块不能上线了,现在导致我...

云原生实验室 879

python ERA-5气象数据NetCDF格式解析(一)

python ERA-5气象数据NetCDF格式解析

weixin_43896283的博客 2638

200、从零搭建具身智能实验平台:硬件选型软件栈与调试

我一开始图便宜,3D打印了一个平行夹爪,结果抓取力不够,稍微重点的物体就滑落,而且开合控制延迟大,VLA模型输出的动作指令根本跟不上。如果你非要自己做,记住两个原则:一是用谐波减速器而不是直驱,二是加力传感器,哪怕是一个简单的电阻应变片也行——没有力反馈,你的夹爪就是个瞎子。我的建议是,如果你用的是UR5老款,ROS1的ur_modern_driver包更成熟,但如果你要跑最新的VLA框架,很多库已经不支持ROS1了。所以,保持耐心,多备份代码,多记录日志,少熬夜。毕竟,这条路上,我们都是摸着石头过河。

sundong_81的博客 40

k8s基于RBAC的权限控制,赋予pod访问k8s API的权限

部署在k8s集群中的应用,有些需要拥有访问k8s API服务器的权限,比如说获取当前命名空间下的pod,svc等资源。k8s通过RBAC规则来赋予用户、pod、组相应的权限。其中pod使用一种称为service accounts的机制,下面我们来实践如何为pod中的应用添加权限。 首先需要在命名空间中创建serviceaccount资 yaml详细内容如下: 接着创建role(角色),role中包含角色所具有的功能,yaml内容如下: yaml中定义了角色有获取default命名空间中pods的权限。

weixin_47729423的博客 2471

YOLOv11改进 | Conv/卷积篇 | 轻量化多尺度异构卷积(MSHC)优化YOLOv11精度(全网独家首发)

本文介绍了Hype-YOLO提出的MANet结构,这是C3、C2f、C3k2的升级版,能显著增强特征提取能力。MANet整合了DSConv和C2f结构,通过多分支异构设计提升梯度流动和特征语义深度。文章详细解析了MSHC模块的原理,包括其多尺度并行建模、通道混洗等核心机制,并提供了完整的代码实现和训练教程。实验表明,Hype-YOLO的精度优于YOLOv11。该结构在保持轻量化的同时,通过异构分支设计实现了更丰富的特征表达,适用于目标检测等视觉任务。

Snu77的博客 956

3.13 与k8s API交互

文章目录1、查询K8S API服务器地址2、访问K8S API服务器 上一节中介绍了可以通过环境变量或者Downward API的方式传递元数据,该方法简洁易用,但时只可以向容器传递部分元数据,如果想获取更多的信息可以本节介绍的k8s API方式,可以与K8S API服务器进行访问来获取更多关于元数据的信息。我们创建查询各种k8s 资源,包括创建、查询和删除pod 、service、job等各种资源信息,都是通过与K8S API服务器进行交互执行的。 1、查询K8S API服务器地址 通过执行kubectl

u010502101的博客 887

【雕爷学编程】一款功能强大、易于使用、适用范围广泛的嵌入式Python解释器:MicroPython

1、语法方面:Micropython与Python语法基本相同,但是由于Micropython是专门为嵌入式设备设计的,因此它对标准Python的功能进行了精简和优化,去掉了一些不必要的功能,同时增加了一些嵌入式系统特有的功能。3、库方面:Micropython与Python完全不同的是,它的标准库并不完全与Python的标准库一致,特别是一些底层库和硬件相关的库。5、丰富的库和工具支持:MicroPython有丰富的库和工具支持,如GPIO控制、网络连接、传感器数据采集等,可满足各种应用需求。

雕爷学编程 5196

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

k8s安全学习

如果我们在创建Pod时,将Node节点的根目录挂载到Pod的某个目录下,由于我们能在Pod内部执行命令,所以我们可以修改挂载到Pod下的Node节点根目录中文件的内容,如果我们写入恶意crontab、web shell、ssh公钥,便可以从Pod逃逸到宿主机Node,获取Node控制权。一个 Node(节点)可以有多个Pod(容器组),kubernetes master 会根据每个 Node(节点)上可用资源的情况,自动调度 Pod(容器组)到最佳的 Node(节点)上。

Python_0011的博客 1319

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Kubernetes RBAC 之 ServiceAccount

RABC 英文全称是 Role-Based Access Control,它通过角色绑定账户,来使得账户拥有某些操控 K8S 集群的权限。ServiceAccount 是集群内部 Pod 访问集群所使用的服务账户,它包括了 Namespace、Token、Ca 证书,并且通过目录挂载的方式绑定 Pod。当 Pod 运行起来的时候,就会使用这些信息与 ApiServer 进行通信。

千度阿三的博客 1238

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用curl访问kubernetes API (https、RBAC认证)

1. 我们先创建一个带有集群管理员权限的service account (cicd)用来实验 : 参考:使用service account(sa) 方式 远程访问k8s集群2. 创建一个POD ,并配置该pod 使用 cicd sa :mac-temp:curl test$ cat ./deployment.yaml apiVersion: extensions/v1beta1 kind: De...

kozazyh的专栏 7523

kubernetes集群配置serviceaccount;Service Account和RBAC授权

https://blog.51cto.com/ylw6006/2067326 Kubernetes API的其它服务。Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。 Kubernetes提供了Secret来处理敏感信息,目前Secret的类型有3种: Opaque(default): 任意字符串...

码农崛起 2123

通过serviceAccount的secret访问kubernetes API Server

本文简单介绍如何通过serviceAccount访问kubernetes API server,不会详细介绍serviceAccount role, roleBinding, clusterRole以及clusterRoleBinding。 简单描述。serviceAccount与role通过roleBinding或者clusterRoleBinding关联后就获得访问指定资源的权限,就如同我们应...

russle的专栏 1061

k8s1.32以上集群手动生成sa token供外部使用

摘要:Kubernetes 1.24+版本对ServiceAccount token认证机制进行了重大调整,手动生成的token将无法通过认证。本文详细介绍了在K8s 1.32+环境中为Prometheus配置监控权限的完整流程:创建专用命名空间和ServiceAccount;配置最小权限RBAC(包含只读ClusterRole和绑定);生成K8s官方签发的10年有效token;创建包含完整数据的Secret;最后通过API Server验证token有效性。重点强调了权限最小化原则,并提供了完整的YAML

c_hiyan的博客 350

k8s实践(6)--Kubernetes安全:API Server访问控制

Kubernetes安全 安全永远是一个重大的话题,特别是云计算平台,更需要设计出一套完善的安全方案,以应对复杂的场景。 Kubernetes主要使用Docker作为应用承载环境,Kubernetes首先设计出一套API和敏感信息处理方案,当然也基于Docker提供容器安全控制。以下是Kubernetes的安全设计原则: 1. 保证容器与其运行的宿主机之间有明确的隔离 2. 限制容器对基础设施...

黄规速博客:学如逆水行舟,不进则退 4112

k8s系列(十三:实例)k8s认证及serviceaccount、用集群ca签署私钥

认证——授权——准入 插件的形式,通过一个插件即可 认证: 1、token 2、sso 授权: 1、RBAC基于角色的访问许可控制 2、webhook 准入控制:用来定义对应认证授权之后的控制 客户端请求API server的信息组成 user:username,uid group...

xopqaaa的博客 520

在kubernetes 集群内访问k8s API服务

所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户)。基于角色的访问控制(“RBAC”)使用“rbac.authorization.k8s.io”API 组来实现授权控制,允许管理员通过Kubernetes API动态配置策略。 API Server 内部通过用户认证后,然后进入授权流...

weixin_30950887的博客 557
上一篇: 下篇1:将 ConfigMap 中的键值对作为容器的环境变量
下一篇: 【无标题】
不背锅运维
博客等级 码龄4年 38粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值