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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
112 0
|
存储 Kubernetes NoSQL
k8s 学习九,pod 知识点 上
k8s 学习九,pod 知识点 上
216 0
|
Kubernetes 安全 Linux
Pod必备知识: SecurityContexts
Security Context主要用于限制容器的行为,从而保障系统和其他容器的安全。这一块的能力不是 Kubernetes 或者容器 runtime 本身的能力,而是 Kubernetes 和 runtime 通过用户的配置,最后下传到内核里,再通过内核的机制让 SecurityContext 来生效。所以这里介绍的内容,会比较简单或者说比较抽象一点。 1.容器级别的Security Context:仅对指定容器生效 2.Pod级别的Security Context:对指定Pod中的所有容器生效 3.Pod Security Policies(PSP):对集群内所有Pod生效
1632 0
Pod必备知识: SecurityContexts
|
存储 Kubernetes 安全
Kubernetes必备知识: PersistentVolumeClaim
PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。 当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。 每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。
3756 0
Kubernetes必备知识: PersistentVolumeClaim
|
存储 Kubernetes NoSQL
【k8s 系列】k8s 学习九,pod 知识点 上
在 K8S 中, pod 是一个非常关键的存在,我们一起来看看 pod 具体是个什么?
171 0
|
Kubernetes API 调度
pod 知识点 下
pod 知识点 下
|
设计模式 Kubernetes Cloud Native
【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
115 1
|
Prometheus 运维 Kubernetes
Kubernetes HPA 的三个误区与避坑指南
云计算带来的优势之一便是弹性能力,云原生场景下 Kubernetes 提供了水平弹性扩容能力(HPA),让应用可以随着实时指标进行扩/缩。然而 HPA 的实际工作情况可能和我们直观预想的情况是不一样的,这里面存在一些认知误区。本文总结了一下 EDAS 用户在使用 HPA 时常遇到的三个认知误区。
331 6
Kubernetes HPA 的三个误区与避坑指南
|
存储 Kubernetes API
【k8s 系列】k8s 学习十,pod 知识点 下
上一篇分享了 pod 的基本知识点,有 K8S 环境的小伙伴还是可以用起来的,还对比较简单,知道了 pod 的 yaml 文件结构,标识,基本的创建 pod 和删除 pod 的用法等等,我们继续
129 0
|
存储 Kubernetes Cloud Native
一图揭开 Kubernetes Pod 活动面纱
毫不夸张地说,Kubernetes 是一个颠覆性云原生生态编排平台,因为它为云部署提供了可扩展性、速度、可移植性以及可观察性。尽管它带来了一个包含强大功能和选项的完整生态系统并简化了复杂的部署,但它也有其自身的挑战。
88 0