kubernetes为何需要默认的serviceaccount?

news/2024/4/26 20:17:54/文章来源:https://blog.csdn.net/MyySophia/article/details/130385588

文章目录

    • 什么是k8s的serviceAccount?
    • 为什么每一个ns下都有默认的sa?
      • default sa yaml
    • 默认的sa下都会挂一个secret,这个secret是从哪里来的?
    • 一道关于RBAC的CKA考题
      • 1、创建一个新的 ServiceAccount
      • 2、创建一个新的 Role
      • 3、创建一个新的 RoleBinding
      • 4、在 Pod 中使用 ServiceAccount
    • role和rolebinding的核心
    • 练习一
    • 练习二

什么是k8s的serviceAccount?

在 Kubernetes 中,ServiceAccount 是一种用于身份验证和授权的对象。它为 Pod 提供了一种身份,以便它们可以与 Kubernetes API 交互,并且可以通过 Role 和 RoleBinding 为它们分配特定的权限。

ServiceAccount 是 Kubernetes 中的一种重要概念,它的实际使用场景包括:

  • 访问 Kubernetes API:ServiceAccount 为 Pod 提供了访问 Kubernetes API 的凭据,使得它们可以查询和修改 Kubernetes 中的资源。例如,一个 Pod 可以使用 ServiceAccount 访问 Kubernetes API 获取其他 Pod 的信息,或者创建、更新、删除其他资源。

  • 认证和授权:ServiceAccount 为 Pod 提供了一种身份,使得 Kubernetes 可以对其进行认证和授权。例如,Kubernetes 可以使用 ServiceAccount 来验证 Pod 是否有权限访问某个资源,并根据 Role 和 RoleBinding 为其分配特定的权限。

  • 安全性:ServiceAccount 可以帮助提高 Kubernetes 集群的安全性。通过为每个 Pod 分配一个独立的 ServiceAccount,并为其分配最小特权的权限,可以降低潜在的安全风险。

  • 多租户:ServiceAccount 可以帮助实现 Kubernetes 中的多租户。通过为每个 Namespace 创建一个独立的 ServiceAccount,并为其分配特定的权限,可以实现不同 Namespace 之间的隔离和安全性。

为什么每一个ns下都有默认的sa?

在 Kubernetes 中,每个 namespace 下都有一个默认的 ServiceAccount,原因如下:

简化配置:默认的 ServiceAccount 使得用户无需为每个 Pod 创建一个新的 ServiceAccount,从而简化了配置。如果 Pod 没有指定 ServiceAccount,它将自动关联到默认的 ServiceAccount。

容器运行时身份:ServiceAccount 提供了一种将身份信息(如 API 访问凭据)与 Pod 关联的方法。默认的 ServiceAccount 为 Pod 提供了基本的身份信息,以便它们可以与 Kubernetes API 交互。

安全性:默认的 ServiceAccount 通常具有较少的权限,这有助于遵循最小特权原则。这意味着,如果 Pod 不需要访问 Kubernetes API 的特定资源,它可以使用默认的 ServiceAccount,从而降低潜在的安全风险。

易于管理:默认的 ServiceAccount 使得集群管理员可以更轻松地管理和控制对 Kubernetes API 的访问。例如,管理员可以通过修改默认 ServiceAccount 的权限来限制或扩展某个 namespace 下所有 Pod 的访问权限。

总之,默认的 ServiceAccount 是 Kubernetes 中的一种设计,旨在简化配置、提供基本的身份信息、增强安全性并便于管理。然而,在实际应用中,根据需要创建特定的 ServiceAccount 并为其分配适当的权限是一种更好的做法。

default sa yaml

k get secret default-token-lnzs9 -oyaml
apiVersion: v1
data:ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVVFZZeWZ0VDFBdnQ1ZHlORmM4WUN...HU4NkZ0bTNyRkNaNUY3N1FmTVpCNU9hYXE2TkRDRwp3ems9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Knamespace: ZGVmYXVsdA==token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltcEdjRkkwWlRSRU55MW1NeTF4YWt0U1pYQm9Sems0U1dJd2RHMTV
。。。xQUJsdVlnSGJva3ZB
kind: Secret
metadata:annotations:kubernetes.io/service-account.name: defaultkubernetes.io/service-account.uid: b90818be-0587-4a7a-8abb-c0b214cdaba0creationTimestamp: "2022-06-26T07:04:38Z"name: default-token-lnzs9namespace: defaultresourceVersion: "11436"uid: 37c38aaa-bd9d-4beb-abf9-cdc94bcc697a
type: kubernetes.io/service-account-token

默认的sa下都会挂一个secret,这个secret是从哪里来的?

在 Kubernetes 中创建一个新的 Namespace 时,系统会自动为该 Namespace 下的默认 ServiceAccount 创建一个关联的 Secret。这个 Secret 是用于存储访问 Kubernetes API 的凭据的,通常包含一个 token 和一个 CA 证书。这个 Secret 的来源如下:

Kubernetes 控制平面的 Token Controller 自动创建并管理这个 Secret。当创建一个新的 ServiceAccount 时,Token Controller 会生成一个新的 token,并将其存储在一个新的 Secret 中。

该 Secret 会被自动关联到对应的 ServiceAccount。Secret 的类型为 kubernetes.io/service-account-token,并且在 Secret 的 annotations 字段中包含了关联的 ServiceAccount 信息。

当创建一个使用该 ServiceAccount 的 Pod 时,Kubernetes 会自动将这个 Secret 挂载到 Pod 的容器中。默认情况下,Secret 会被挂载到 /var/run/secrets/kubernetes.io/serviceaccount 目录下。容器内的应用程序可以使用这个 token 和 CA 证书与 Kubernetes API 交互。

要查看默认 ServiceAccount 关联的 Secret,可以使用以下命令:

kubectl get serviceaccounts default -o jsonpath='{.secrets[0``].name}' -n <namespace>

将 替换为实际的 Namespace 名称。然后,使用以下命令查看 Secret 的详细信息:

kubectl get secret <secret_name> -o yaml -n <namespace>

将 <secret_name> 替换为上一步获取到的 Secret 名称,将 替换为实际的 Namespace 名称。

一道关于RBAC的CKA考题

假设我们有一个运行在 Kubernetes 中的 Web 应用程序,它需要访问 Kubernetes API 来获取其他 Pod 的信息。

为了实现这个功能,我们可以创建一个 ServiceAccount,并为其分配访问 Kubernetes API 的权限。具体步骤如下:

1、创建一个新的 ServiceAccount

kubectl create serviceaccount myapp-sa

2、创建一个新的 Role

用于授予 ServiceAccount 访问 Kubernetes API 的权限:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: myapp-role
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"] # 注意只有get和list的权限,并不需要update的权限

3、创建一个新的 RoleBinding

将 ServiceAccount 和 Role 关联起来:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: myapp-rolebinding
subjects:
- kind: ServiceAccountname: myapp-sa
roleRef:kind: Rolename: myapp-roleapiGroup: rbac.authorization.k8s.io

4、在 Pod 中使用 ServiceAccount

apiVersion: v1
kind: Pod
metadata:name: myapp-pod
spec:serviceAccountName: myapp-sacontainers:- name: myapp-containerimage: myapp-image

在这个例子中,我们创建了一个名为 myapp-sa 的 ServiceAccount,并为其分配了访问 Kubernetes API 的权限。然后,我们创建了一个名为 myapp-role 的 Role,并将其与 ServiceAccount 关联起来。最后,我们在 Pod 中使用了这个 ServiceAccount。

这样,我们的 Web 应用程序就可以使用这个 ServiceAccount 访问 Kubernetes API,获取其他 Pod 的信息。同时,由于我们为 ServiceAccount 分配了最小特权的权限,可以降低潜在的安全风险。

role和rolebinding的核心

role是定义一组权限列表

rolebinding有两个obj:

  • roleRef : 绑定哪个role?
  • subjects: 给谁绑定的问题 可以是user、可以是sa也可以是group

如果遇到不懂怎么写就是explain。
在这里插入图片描述

练习一

只能使用官网的情况下,完成下面和这个需求:

Create a new ServiceAccount processor in Namespace project-hamster. Create a Role and RoleBinding, both named processor as well. These should allow the new SA to only create Secrets and ConfigMaps in that Namespace.

提示; 可以使用kubectl 命令create role、create rolebinding

练习二

让alice这个用户可以创建sa:

创建一个新的 Role,用于控制 ServiceAccount 的创建:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: serviceaccount-creator
rules:
- apiGroups: [""]resources: ["serviceaccounts"]verbs: ["create"]

创建一个新的 RoleBinding,将 Role 和用户或组关联起来:


apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: serviceaccount-creator-binding
subjects:
- kind: Username: alice
roleRef:kind: Rolename: serviceaccount-creatorapiGroup: rbac.authorization.k8s.io

在这个例子中,我们创建了一个名为 serviceaccount-creator 的 Role,用于控制 ServiceAccount 的创建。然后,我们创建了一个名为 serviceaccount-creator-binding 的 RoleBinding,将 Role 和用户 alice 关联起来。

这样,用户 alice 就可以使用 kubectl create serviceaccount 命令创建新的 ServiceAccount。其他用户或组如果没有被授权,将无法创建新的 ServiceAccount。

需要注意的是,RBAC 可以用于控制 ServiceAccount 的创建和使用,但不能直接控制 ServiceAccount 的访问权限。要为 ServiceAccount 分配访问权限,需要使用 Role 和 RoleBinding。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103860.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023_8.0.33版windows版MySql安装_配置远程连接_修改设置初始密码---MySql工作笔记0001

MySQL :: Download MySQL Community Server https://dev.mysql.com/downloads/mysql/ 首先去下载mysql 可以看到这里下载第一个就可以了,最新版的8.0.33 这里点击仅仅下载 just start my download 然后解压到一个文件夹,然后配置一下环境变量 然后新建一个my.ini文件 然后把…

【GNN】谱域图卷积

谱域图卷积 1. 谱域卷积的背景知识 1.1 谱域图卷积实现思路 f 1 ( t ) ⋆ f 2 ( t ) F − 1 [ F 1 ( w ) F 2 ( w ) ] f_1(t) \star f_2(t) F^{-1}[F_1(w)F_2(w) ] f1​(t)⋆f2​(t)F−1[F1​(w)F2​(w)] 1.2 如何定义图上的傅里叶变换 经典傅里叶变换&#xff1a; x ( …

速卖通正式推出全托管,卖家竞争进入新阶段

全托管来了&#xff0c;卖家就能安心做甩手掌柜吗&#xff1f; 正式推出全托管 显而易见&#xff0c;越来越多的平台正在转向全托管模式。 近日&#xff0c;速卖通在2023年度商家峰会上&#xff0c;正式推出了全托管服务模式。官方表示&#xff0c;托管是对速卖通平台商家服…

golang微服务项目通用流水线

golang微服务项目通用流水线 工作中随着业务越来越大&#xff0c;微服务的项目也越来越多&#xff0c;最开始的时候是一个服务一个流水线&#xff0c;然后还分了三个环境&#xff0c;也就是一个服务三个流水线&#xff0c;后面就越来越不利于管理维护了&#xff0c;因此&#…

持续集成——App自动化测试集成实战

这里写目录标题 一、app自动化测试持续集成的好处二、环境准备三、Jenkins节点挂载四、节点环境的配置1、JDK2、模拟器3、sdk环境4、Python3环境5、allure-commandline工具6、allure插件 五、本地运行待测代码(保证代码没有问题)六、库文件的导出七、Jenkins上运行代码配置1、指…

Visual Studio C# WinForm开发入门(4):概述

目录 一.Winform入门1.WinForm项目结构2.窗口设计与控件布局3.窗口事件4.时间显示器小练习 二.WinForm布局开发1.手动布局解决自适应问题2.WinForm布局属性3.WinForm布局器 三.WinForm常用控件1.界面展示2.实体类 Student(封装信息)3.逻辑事件代码Form.cs 四.图片框与项目资源1…

智慧班牌源码,使用springboot框架Java+vue2开发,二次开发方便快捷

智慧校园云平台电子班牌系统源码 智慧校园平台电子班牌系统源码在大数据平台下&#xff0c;对应用系统进行统一&#xff0c;以数据互联软硬结合的特点应用在校园&#xff0c;实现对校园、班级、教师、学生的管理。 智慧校园云平台电子班牌系统源码&#xff0c;使用springboot…

【视频课程】算法工程师需要的ChatGPT大模型算法理论与实践课程!非粗浅科普...

前言 自从2022年11月ChatGPT发布之后&#xff0c;迅速火遍全球。其对话的交互方式&#xff0c;能够回答问题&#xff0c;承认错误&#xff0c;拒绝不适当的请求&#xff0c;高质量的回答&#xff0c;极度贴近人的思维的交流方式&#xff0c;让大家直呼上瘾&#xff0c;更是带火…

软件开发全套文档案例分享

写在前面 在日常项目开发过程中&#xff0c;会产生大量的过程文档&#xff0c;比如开发过程中的文档、管理过程中的文档、产品相关文档等等&#xff0c;那这些文档我们日常怎么去管理呢&#xff1f;怎么去做规划呢&#xff1f;如何做成通用标准呢&#xff1f;小编特地整理了一…

5款超实用电脑办公软件推荐

1.AIDA64 AIDA64是一款电脑软硬件检测工具&#xff0c;它不仅可以详细的显示出PC的每一个方面的信息&#xff0c;还提供了诸如协助超频&#xff0c;硬件侦错&#xff0c;压力测试和传感器监测等多种功能&#xff0c;以帮助我们对电脑整体性能进行全面评估。 2.傲梅分区助手 …

推荐几个可以免费使用的ChatGPT工具

在ChatGPT相关API推出之后&#xff0c;各种工具如雨后春笋一般层出不穷&#xff0c;这篇文章就列举一些日常使用到的工具。 工具列表 OpenAI 在线读取任意网页内容包括视频&#xff08;YouTube&#xff09;&#xff0c;并根据这些内容回答你提出的相关问题或总结相关内容支持…

数据划分方法简述:数据离散化和均值标准差分级法(含python代码)

文章目录 1 问题缘起2. 数据离散化等距离散等频离散聚类离散其他 3. 均值标准差分级 1 问题缘起 在数学建模中&#xff0c;我经常遇到这样一个问题&#xff1a; 在某一步中&#xff0c;需要把数据分成好几个类别或者是按照数据大小分级划分。 放到一维数据中形象一点解释就是…

项目管理-团队管理

冲突和竞争 冲突&#xff1a;是指两个或两个以上的社会单元在目标上互不相容或互相排斥&#xff0c;从而产生心理上的或行为上的矛盾。冲突并不一定是有害的&#xff0c; “一团和气”的集体不一定是一个高效率的集体。对于有害的冲突要设法加以解决或减少&#xff1b;对有益的…

Photoshop如何使用基础功能?

文章目录 0.引言1.菜单栏2.工具箱 0.引言 笔者从开始科研时就接触过Photoshop&#xff08;PS&#xff09;&#xff0c;这么多年一直用着感觉有些陌生&#xff0c;在每次使用PS时总感觉有些抵触&#xff0c;这状态说明还未入门。为了入门PS&#xff0c;笔者从头熟悉PS的菜单和工…

直播软件app开发:如何保证音视频质量?

随着社交媒体的发展&#xff0c;视频直播已成为越来越流行的社交方式。直播软件app开发也因此成为了一个热门话题。在开发直播软件app时&#xff0c;保证音视频质量是至关重要的。本文将介绍如何确保你的直播软件app在音视频质量方面表现出色。 确定音视频质量标准 首先&…

子元素选择器

知识点&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" c…

GoodSync 数据自动同步备份工具VS傲梅轻松备份系统数据备份工具 哪款更好?

备份和同步软件的使用越来越广泛&#xff0c;因为在这个数据驱动的时代&#xff0c;数据的备份和恢复非常重要。在这里我想向大家推荐两款备份和同步软件——GoodSync和傲梅轻松备份。 GoodSync是一款备份和同步软件&#xff0c;它可以在多个设备之间同步文件、文件夹、照片、音…

heic格式转化jpg的3种好用方法

如果你是使用iOS手机的用户&#xff0c;那么一定对HEIC格式不陌生。虽然HEIC格式可以保存原始图像质量&#xff0c;但它只能在苹果手机或Mac电脑上打开。如果我们想要在安卓或Windows系统上打开&#xff0c;就需要使用转换软件将HEIC格式转换成常用的JPG格式。HEIC 是一种新型的…

每日学术速递4.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.AutoNeRF: Training Implicit Scene Representations with Autonomous Agents 标题&#xff1a;AutoNeRF&#xff1a;使用自主代理训练隐式场景表示 作者&#xff1a;Pierre Marz…

macOS电脑

UNIX操作系统有一个规范&#xff0c;名叫《单一UNIX规范》&#xff08;Single UNIX Specification&#xff09;。凡是符合这个规范的操作系统都可以叫UNIX操作系统&#xff0c;并且可以通过UNIX官方认证。 UNIX商标认证官网是&#xff1a;The Register of UNIX Certified Prod…