【Kubernetes】服务账号 Service Account

K8s 的安全认证》系列,共包含以下文章:

  • K8s 的安全框架和用户认证
  • K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)
  • K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制
  • 服务账号 Service Account

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

服务账号 Service Account

服务账号Service Account)是为了方便 Pod 中的进程调用 Kubernetes API 资源或访问其他外部服务而设计的。

1.服务账号用户账号

服务账号Service Account)和 用户账号User Account)有着以下的不同:

  • 服务账号 是为 Pod 而设计的,目的是让 Pod 中的进程能够访问 Kubernetes APl 的资源;用户账号 是为用户而设计的,目的是让用户能够访问 Kubernetes 集群。
  • 服务账号 仅作用在当前的命名空间中;用户账号 是全局性的,可以跨越不同的命名空间。
  • 服务账号 的创建应遵循权限最小化的原则,Kubernetes 允许为实现某个具体任务而创建服务账号;而创建 用户账号 通常需要使用外部的数据库,且可能需要组合不同的权限。
  • 服务账号 属于轻量级配置,只作用在当前命名空间中,因此,在一个复杂系统中可能包含各种服务账号的定义;用户账号 的创建规则比较复杂,且可能涉及复杂的业务流程。由于服务账号用户账号的使用对象不同,因此对二者的监控也不同。

2.【实战】创建和使用服务账号

下面来演示如何创建和使用服务账号

2.1 创建命名空间

创建一个新的命名空间 sa-demo

kubectl create namespace sa-demo

查看新命名空间中的 Service Account

kubectl get sa -n sa-demo

输出的信息如下:

在这里插入图片描述

🚀 对于每一个命名空间会自动创建一个默认的 Service Account

2.2 创建 Pod

编辑 pod-sa-demo1.yaml 文件在新创建的命名空间中新建一个 Pod。

kind: Pod
apiVersion: v1
metadata:name: pod-sa-demo1namespace: sa-demo
spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80name: http

创建 Pod,并查看 Pod 的信息。

kubectl apply -f pod-sa-demo1.yaml
kubectl get pod pod-sa-demo1 -o yaml -n sa-demo

输出的信息如下:

在这里插入图片描述

🚀 可以看出,对于每一个新创建的 Pod 来说,如果没有指定 Service Account,则它会自动挂载默认的 Service Acount,即其值为 default

2.3 创建 Service Account

sa-demo 命名空间中创建一个名称为 mysaService Account,并查看当前命名空间中存在的 Service Account

kubectl create serviceaccount mysa -n sa-demo
kubectl get sa -n sa-demo

输出的信息如下:

在这里插入图片描述

查看新创建的 Service Account

kubectl get serviceaccount mysa -n sa-demo -o yaml

在这里插入图片描述

🚀 在 Service Account 创建成功后,可以使用 RoleBinding 将 Service Account 与 Role 进行绑定,使用 ClusterRoleBinding 将 ServiceAccount 与 ClusterRole 进行绑定。

在这里插入图片描述

2.4 使用 RoleBinding 将 Service Account 与 Role 进行绑定

编辑 sa-demo-role.yaml 文件创建 Role。

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:#限定可访问的命名空间为sa-demonamespace: sa-demo#角色名称name: sa-demo-role
rules:#空字符串表示使用core API group
- apiGroups: [""]resources: ["namespaces","pods","pods/log"]verbs: ["get", "watch", "list", "create", "update", "patch", "delete"]
- apiGroups: [ "apps"]resources: ["deployments", "daemonsets"]verbs: ["get", "list", "watch"]

编辑 sa-demo-rolebinding.yaml 文件创建 RoleBinding。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: sa-demoname: sa-demo-rolebinding
subjects:
- kind: ServiceAccountnamespace: sa-demo# Service Account的名称name: mysa
roleRef:kind: Role# 角色名称name: sa-demo-roleapiGroup: rbac.authorization.k8s.io

🚀 这里将命名空间 sa-demo 中名为 mysaService Account 绑定到 sa-demo-role 角色上了。

创建 Role 和 RoleBinding。

kubectl apply -f sa-demo-role.yaml
kubectl apply -f sa-demo-rolebinding.yaml

查看 sa-demo 命名空间中的 Role 和 RoleBinding。

kubectl get role,rolebinding -n sa-demo -o wide

输出的信息如下:

在这里插入图片描述

🚀 从输出信息可以看出,命名空间中的 mysa 服务账号通过 sa-demo-rolebinding 绑定到 sa-demo-role 了。

2.5 使用 ClusterRoleBinding 将 ServiceAccount 与 ClusterRole 进行绑定

编辑 sa-demo-clusterrole.yaml 文件创建 ClusterRole。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:# 由于ClusterRole针对的是集群范围对象,因此不需要定义namespace字段name: sa-demo-clusterrole
rules:# 空字符串""表明使用core API group
- apiGroups: ["rbac.authorization.k8s.io",""]resources: ["pods","pods/log"]verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]resources: ["namespaces"]verbs: ["get", "list", "watch"]

编辑 sa-demo-clusterrolebinding.yaml 文件创建 ClusterRoleBinding。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: sa-demo-clusterrolebinding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: sa-demo-clusterrole
subjects:
- apiGroup: ""kind: ServiceAccountnamespace: sa-demoname: mysa

创建 ClusterRole 和 ClusterRoleBinding。

kubectl apply -f sa-demo-clusterrole.yaml
kubectl apply -f sa-demo-clusterrolebinding.yaml

🚀 这里将命名空间 sa-demo 中名为 mysa 的 Servicc Account 绑定到 sa-demo-clusterrole 角色上了。

查看 ClusterRole 的信息。

kubectl get clusterrole

输出的信息如下:

在这里插入图片描述

查看 ClusterRoleBinding 的信息。

kubectl describe clusterrolebinding sa-demo-clusterrolebinding

在这里插入图片描述

另外一种查询方法:

kubectl get clusterrolebinding -o \
custom-columns=NAME:.metadata.name,ROLE:.roleRef.name,SERVICEACCOUNT:.subjects[0].name | grep sa-demo

在这里插入图片描述

3.服务账号的工作机制

Kubernetes 的 APl Service 默认开启了 Service Account 的准入控制功能。因此,在创建 Service Account 后,服务账号将按照以下方式运行。

🚀 如果 API Server 没有启用 Service Account 的准入控制功能,则可以在启动 API Server 时加入以下参数:--admission_control-ServiceAccount

  • 1️⃣ 在 Pod 创建时,通过 spec.serviceAccount 字段挂载指定的 Service Account。如果没有指定该字段,则挂载命名空间中的默认 Service Account,即 defaultService Account
  • 2️⃣ API Server 验证挂载的 Service Account 是否存在。如果存在,则创建 Pod;否则拒绝创建 Pod。
  • 3️⃣ 如果在 Pod 中没有指定 ImagePullSecrets,则把 Service Account 中的 ImagePullSecrets 字段加载到 Pod 中。

🚀 在拉取私有镜像仓库中的镜像时,往往需要先进行用户认证。ImagePullSecrets 字段用于指定拉取镜像时用户的 Secret 信息。

🚀 可以通过 kubectl describe pod 命令查看到挂载的信息。


http://www.ppmy.cn/news/1526006.html

相关文章

8K回报率10枚自定义按键,PC游戏丝滑操作,雷柏VT1 Pro MAX鼠标体验

现在喜欢玩PC游戏的朋友越来越多,《黑神话:悟空》等3A游戏也吸引到了更多的新玩家,想要完美运行此类游戏,不仅需要高性能的电脑硬件,还需要操控精准、反应敏捷的鼠标、键盘等外设。前端时间雷柏推出了VT1系列鼠标&…

“Fast-forward“ in git-pull result

当你执行 git pull 并且结果显示 Fast-forward 时,这意味着你的本地分支可以直接快进到远程分支的最新提交,没有任何冲突或者需要合并的内容。具体来说,Fast-forward 是一种合并方式,它的特点是将当前分支的指针直接移动到远程分支…

python解析ip范围,判断ip是否在ip范围内

目录 1. 背景 2. 代码使用示例 2.1 分割ip,横杠 (-) 的ip范围 2.2 判断ip在掩码(/)的范围内 2.3 判断ip在横杠(-)的范围内 2.3.1 格式:192.168.1.1-192.168.1.10 2.3.2 格式&…

idea连接数据库大避雷!!!

再跟着黑马学习的时候,用黑马的资料安装的数据库,命令行能正常启动,SQLyog也能正常连接,就是tmd idea连接不了。不论是原始的jdbc,还是其它方式都不行,一直报错: 然后就各种搜,有的说数据库驱动…

ElasticSearch底层原理解析

Elasticsearch(简称ES)是一个基于Lucene的开源、分布式、RESTful搜索引擎。它具备全文检索、结构化搜索、数据分析、复杂语言处理、地理位置处理以及对象关联分析等功能。ES的设计允许水平扩展,支持PB级别的数据,并且提供了近实时…

Computer Vision的学习路线

学习**Computer Vision(计算机视觉)**的过程中,可以按照以下步骤循序渐进地掌握基础知识、算法和实际应用。这个学习路线将涵盖从基础理论到前沿技术的各个层面。 1. 数学与基础知识 1.1 线性代数 计算机视觉中的图像处理和模型训练都依赖…

C++ 策略技术中的算法策略

C 策略技术中的算法策略 策略模式是一种设计模式,允许在运行时选择算法的行为。在C中,这可以通过模板和多态实现。策略类通常定义一个接口,各种不同的策略类实现这个接口,以提供具体的算法实现。 1. 常规范例:普通策略…

STM32 HAL freertos零基础(六)计数型信号量

1、计数型信号量 计数型信号量(Counting Semaphore)是另一种类型的信号量,它可以保持一个大于等于0的整数值,这个值表示可用资源的数量。本质上相当于队列长度大于1得队列。经典问题就是剩余车辆统计,出入车辆,车辆数据可以实时更新。 2、相关API函数 xSemaphoreCreat…

项目实战 (11)---搜索进度

目录 背景 相关技术 需要解决的问题 查询进度实时展示 描述 代码 python 后端 html JS 运行效果 查询逻辑结合 描述 代码 运行效果 总结与问题 背景 通过前面1-10,视频搜索系统的前后端及视频录入功能已经可以正常使用。但是我们清楚随着视频量的增加及客户搜…

【论文分享精炼版】 sNPU: Trusted Execution Environments on Integrated NPUs

今天在COMPASS分享了之前写的一个博客,做了进一步的提炼总结,大家可以看看原文~ 今天分享的论文《sNPU: Trusted Execution Environments on Integrated NPUs》来自2024年ISCA,共同一作为Erhu Feng以及Dahu Feng。并且, 这两位作…

C++基础面试题 | 什么是C++中的虚继承?

文章目录 回答重点菱形继承问题虚继承解决菱形继承问题虚继承的二义性解决 虚继承总结拓展知识:virtual关键字的用法1. 虚函数 (Virtual Function)2. 纯虚函数 (Pure Virtual Function)3. 虚析构函数 (Virtual Destructor)4. 虚继承 (Virtual Inheritance)5. 虚函数…

C实现对以太网lldp的解析的功能

以下是一种使用C语言实现对以太网LLDP&#xff08;链路层发现协议&#xff09;解析的示例代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/…

kafka mirror maker之实现两个kafka集群之间的数据同步

1 背景 现在因为消费方方和producer方位于不同的数据中心&#xff0c;所以公司使用了etyer数据集成平台作为中间媒介完成投送&#xff0c;类似mirror maker吧 2 介绍一下Kafka MirrorMaker Kafka MirrorMaker 是 Apache Kafka 提供的一个用于在不同 Kafka 集群之间复制数据的…

Science Robotics 在小动物模型中实现渐进和可逆主动脉收缩的软机器人平台

前言速览&#xff1a;目前对左心室压力过载引起心脏重构过程的理解主要来源于主动脉束带的动物模型。然而&#xff0c;这些研究未能同时控制疾病的进展和逆转&#xff0c;阻碍了其临床意义。为此&#xff0c;来自哈佛大学、麻省理工学院等的研究人员介绍了一种基于植入式可扩张…

【k8s】api server地址

1. 使用 kubectl cluster-info 命令 这个命令会显示 Kubernetes API Server 的地址&#xff1a; kubectl cluster-info示例输出&#xff1a; Kubernetes control plane is running at https://172.20.0.1:6443CoreDNS is running at https://172.20.0.1:6443/api/v1/namespa…

初始Python篇(1)——输入输出函数、数据类型、运算符

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 以B站up主&#xff1a;Python_子木的视频 &#xff1a;花了2万多买的Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精…

c++基础入门二

C基础入门(二) 一、函数重载 在自然语言中&#xff0c;一句话或者一个词有不同的意思。例如&#xff1a;国乒和别人比赛是“谁也赢不了”&#xff0c;而国足和别人比赛是“谁也赢不了” 函数重载&#xff1a;是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功…

【AI大模型】Kimi API大模型接口实现

一、Kimi大模型概述 Kimi&#xff0c;月之暗面旗下国产大模型。是北京月之暗面科技有限公司&#xff08;Moonshot AI&#xff09;于2023年10月9日推出的一款智能助手&#xff0c;主要应用场景为专业学术论文的翻译和理解、辅助分析法律问题、快速理解API开发文档等&#xff0c…

软件测试工程师面试整理-数据库与SQL

在软件测试过程中,数据库和SQL的知识是非常重要的,尤其是在涉及数据密集型应用或需要验证数据准确性的场景中。测试人员需要掌握SQL语句,以便查询、插入、更新和删除数据,并验证数据库操作的正确性。 1. 数据库基础知识 ● 关系型数据库:大多数应用使用关系型数据库(如My…

基于zabbix实现监控Jenkins过程---超详细

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…