Pod必备知识: ServiceAccounts

简介: ServiceAccount主要用于解决Pod在集群中的身份认证问题,其中认证使用的授权信息,则利用Secret(type=kubernetes.io/service-account-token)进行管理。

所属技术领域:

Pod

|名词定义|

ServiceAccount主要用于解决Pod在集群中的身份认证问题,其中认证使用的授权信息,则利用Secret(type=kubernetes.io/service-account-token)进行管理。

|技术特点|

 ServiceAccount 介绍

图片.png

先看一下上面的左侧截图,可以看到最下面的红框里,有一个 Secret 字段,它指定 ServiceAccount 用哪一个 Secret,这个是K8s 自动为 ServiceAccount 加上的。然后再来看一下上图中的右侧截图,它对应的 Secret 的 data 里有两块数据,一个是 ca.crt,一个是 token。ca.crt 用于对服务端的校验,token 用于 Pod 的身份认证,它们都是用 base64 编码过的。然后可以看到 metadata 即元信息里,其实是有关联 ServiceAccount 信息的(这个 secret 被哪个 ServiceAccount 使用)。最后我们注意一下 type,这个就是 service-account-token 这种类型。

 举例:Pod 里的应用访问它所属的 K8s 集群

我们来看一下,pod 是怎么利用 ServiceAccount 或者说它是怎么利用 secret 来访问所属 K8s 集群的。
其实 pod 创建的时候,首先它会把这个 secret 挂载到容器固定的目录下,这是 K8s 功能上实现的。它要把这个 ca.crt 和 token 这两个文件挂载到固定目录下面。
pod 要访问集群的时候,它是怎么来利用这个文件的呢?我们看一下下面的代码截图:

图片.png

我们在 Go 里面实现 Pod 访问 K8s 集群时,一般直接会调一个 InClusterConfig 方法,来生成这个访问服务 Client 的一些信息。然后可以看一下,最后这个 Config 里面有两部分信息:
 一个是 tlsClientConfig,这个主要是用于 ca.crt 校验服务端;
 第二个是 Bearer Token,这个就是 pod 的身份认证。在服务端,会利用 token 对 pod 进行一个身份认证。
再次回到上图左侧。认证完之后 pod 的身份信息会有两部分:一个是 Group,一个是 User。身份认证是就是认证这两部分信息。接着可以使用 RBAC 功能,对 pod 进行一个授权管理。

假如 RBAC 没有配置的话,默认的 pod 具有资源 GET 权限,就是可以从所属的 K8s 集群里 get 数据。如果是需要更多的权限,那么就需要自行配置 RBAC 。
 创建一个serviceaccount

$ kubectl create serviceaccount jaxzhai
$ kubectl get sa
NAME SECRETS AGE
default 1 52d
jaxzhai 1 8s
$ kubectl describe sa jaxzhai
Name: jaxzhai
Namespace: default
Labels:
Annotations:
Image pull secrets:
Mountable secrets: jaxzhai-token-9n5th
Tokens: jaxzhai-token-9n5th
Events:
$ kubectl get secret
NAME TYPE DATA AGE
default-token-lplp6 kubernetes.io/service-account-token 3 52d
jaxzhai-token-9n5th kubernetes.io/service-account-token 3 4m
复制代码
这里我们看到Kubernetes集群会自动创建一个token的secert,并被jaxzhai这个serviceaccount引用。

设置非默认的 service account,只需要在 pod 的spec.serviceAccountName 字段中将name设置为您想要用的 service account 名字即可。

在 pod 创建之初 service account 就必须已经存在,否则创建将被拒绝。

您不能更新已创建的 pod 的 service account。

 在pod中使用service account

apiVersion: v1
kind: Pod
metadata:
name: my-sa-demo
namespace: default
labels:

name: myapp
tier: appfront

spec:
containers:

  • name: myapp
    image: ikubernetes/myapp:v1
    ports:

    • name: http
      containerPort: 80

    serviceAccountName: jaxzhai

$ kubectl apply -f myapp-serviceaccount.yaml
pod/my-sa-demo created
$ kubectl describe pod my-sa-demo
......
Volumes:
jaxzhai-token-9n5th:

Type:        Secret (a volume populated by a Secret)
SecretName:  jaxzhai-token-9n5th
Optional:    false

QoS Class: BestEffort
......

|资料来源|

技术特点:https://www.cnblogs.com/xzkzzz/p/9889173.html

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes 应用服务中间件
k8s 1.24.3版本使用nfs-provisioner4.0.0动态创建PV
k8s 1.24.3版本使用nfs-provisioner4.0.0动态创建PV
3249 0
|
Kubernetes 应用服务中间件 API
Kubernetes(K8S)命令指南
Kubernetes(K8S)命令指南
756 0
|
弹性计算 安全 API
阿里云实名认证接口怎么使用的
1.阿里云实名认证接口怎么使用的,1、登录阿里云控制台 2、单击您的会员名(在页面右上角),进入账号管理页面 3、在左侧导航栏中,单击 实名认证 4、在 实名认证 页面,选择认证类型为 个人,再单击 确定 5、单击 个人支付宝认证 栏中 立即认证 按钮。
阿里云实名认证接口怎么使用的
|
9月前
|
存储 消息中间件 人工智能
Lazada 如何用实时计算 Flink + Hologres 构建实时商品选品平台
本文整理自 Lazada Group EVP 及供应链技术负责人陈立群在 Flink Forward Asia 2025 新加坡实时分析专场的分享。作为东南亚领先的电商平台,Lazada 面临在六国管理数十亿商品 SKU 的挑战。为实现毫秒级数据驱动决策,Lazada 基于阿里云实时计算 Flink 和 Hologres 打造端到端实时商品选品平台,支撑日常运营与大促期间分钟级响应。本文深入解析该平台如何通过流式处理与实时分析技术重构电商数据架构,实现从“事后分析”到“事中调控”的跃迁。
797 55
Lazada 如何用实时计算 Flink + Hologres 构建实时商品选品平台
|
8月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
1102 3
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
837 5
|
监控 调度 数据库
简化任务调度与管理:详解XXL-Job及Docker Compose安装
在现代应用程序开发中,任务调度和管理是至关重要的一部分。XXL-Job是一个强大的分布式任务调度平台,它使得任务的调度和管理变得更加轻松和高效。本文将介绍XXL-Job的基本概念,并详细演示如何使用Docker Compose进行快速安装和配置。
1315 1
简化任务调度与管理:详解XXL-Job及Docker Compose安装
|
JSON Kubernetes 数据格式
ServiceAccount、Role和Rolebinding。
ServiceAccount、Role和RoleBinding是Kubernetes(K8s)中的三个核心概念,它们用于管理集群内各种资源的访问权限。下面是这三个概念的详细介绍以及如何使用它们。
611 4
|
存储 JSON Kubernetes
kubernetes为何需要默认的serviceaccount?
在 Kubernetes 中,ServiceAccount 是一种用于身份验证和授权的对象。它为 Pod 提供了一种身份,以便它们可以与 Kubernetes API 交互,并且可以通过 Role 和 RoleBinding 为它们分配特定的权限。
912 0
|
存储 算法 安全
什么是SHA-1值
【8月更文挑战第24天】什么是SHA-1值
1245 0

热门文章

最新文章