ServiceAccount 详解

目录

ServiceAccount 的主要组成部分和功能 

1. 创建和管理 ServiceAccount

2. 在 Pod 中使用 ServiceAccount


在 Kubernetes 中,ServiceAccount 是一种用于在 Pod 中提供身份验证和授权的机制。ServiceAccount 允许应用程序在集群内以特定身份运行,并且可以访问 Kubernetes API。

 

ServiceAccount 的主要组成部分和功能 

 

1. 创建和管理 ServiceAccount

 

创建 ServiceAccount:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-serviceaccount
  namespace: default

列出当前命名空间中的所有 ServiceAccount

kubectl get serviceaccounts --all-namespaces

列出当前命名空间中的所有 ServiceAccount

kubectl get serviceaccounts

获取特定命名空间中 ServiceAccount 的详细信息

kubectl get serviceaccount <serviceaccount-name> -n <namespace> -o yaml

删除 ServiceAccount:

kubectl delete serviceaccount my-serviceaccount

 

2. 在 Pod 中使用 ServiceAccount

 

在 Pod 的定义中,你可以指定使用某个 ServiceAccount。这样,Pod 中的容器将使用该 ServiceAccount 的身份来访问 Kubernetes API。

示例 YAML

 

apiVersion: v1  # Kubernetes API 版本
kind: ServiceAccount  # 资源类型为 ServiceAccount
metadata:
  name: my-serviceaccount  # 服务账户的名称
  namespace: default  # 服务账户所在的命名空间
---
apiVersion: rbac.authorization.k8s.io/v1  # RBAC API 版本
kind: Role  # 资源类型为 Role
metadata:
  name: my-role  # 角色的名称
  namespace: default  # 角色所在的命名空间
rules:
- apiGroups: [""]  # API 组为空表示核心 API 组
  resources: ["pods"]  # 该角色权限作用于 pods 资源
  verbs: ["get", "list", "watch"]  # 允许的操作:获取、列出和观察 pods
---
apiVersion: rbac.authorization.k8s.io/v1  # RBAC API 版本
kind: RoleBinding  # 资源类型为 RoleBinding
metadata:
  name: my-rolebinding  # 角色绑定的名称
  namespace: default  # 角色绑定所在的命名空间
subjects:
- kind: ServiceAccount  # 绑定的主体类型是 ServiceAccount
  name: my-serviceaccount  # 绑定的服务账户名称
  namespace: default  # 服务账户所在的命名空间
roleRef:
  kind: Role  # 角色引用的类型是 Role
  name: my-role  # 绑定的角色名称
  apiGroup: rbac.authorization.k8s.io  # 角色的 API 组
---
apiVersion: v1  # Kubernetes API 版本
kind: Pod  # 资源类型为 Pod
metadata:
  name: my-pod  # Pod 的名称
spec:
  serviceAccountName: my-serviceaccount  # Pod 使用的服务账户名称
  containers:
  - name: busybox  # 容器的名称
    image: busybox  # 容器使用的镜像
    command: ['sh', '-c', 'echo "ServiceAccount Token: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"; sleep 3600']  # 容器启动时执行的命令:打印服务账户的 Token,然后休眠 3600 秒

验证 ServiceAccount:

kubectl get serviceaccount my-serviceaccount -n default -o yaml

作用: 确认 my-serviceaccount 服务账户在 default 命名空间中已创建并且配置正确。检查其元数据和任何相关注释。

验证 Role:

kubectl get role my-role -n default -o yaml

作用: 确认 my-role 角色在 default 命名空间中存在,检查其规则是否允许对 pods 资源进行 getlistwatch 操作。

验证 RoleBinding:

kubectl get rolebinding my-rolebinding -n default -o yaml

作用: 确认 my-rolebinding 角色绑定在 default 命名空间中存在,并且将 my-serviceaccount 服务账户与 my-role 角色正确关联。

验证 Pod:

kubectl get pod my-pod -n default -o yaml

作用: 确认 my-pod Pod 在 default 命名空间中已创建,并且其规范配置了正确的服务账户和容器设置。

检查 Pod 日志:

kubectl logs my-pod -n default

作用: 确认 Pod 正在运行并且服务账户令牌正确输出到日志中。这可以帮助验证服务账户是否正确挂载并可用。

检查 Pod 状态:

kubectl describe pod my-pod -n default

作用: 提供 Pod 的详细状态信息,包括事件和状态,帮助诊断 Pod 是否正常运行以及是否有任何错误或问题。

ServiceAccount 是 Kubernetes 中的一种资源,用于为 Pod 提供身份验证机制。每个 Pod 都可以使用一个服务账户来执行与 API 服务器的交互。
在上述代码中,my-serviceaccount 是一个在 default 命名空间中创建的服务账户。这个服务账户可以分配给 Pod,用于访问集群中的资源。

Role 是一个用于定义访问权限的 Kubernetes 资源。它指定了某个命名空间中允许的 API 操作。
my-role 定义了在 default 命名空间中对 pods 资源的权限,允许执行 get(获取)、list(列出)和 watch(观察)操作。
这里的 apiGroups: [""] 表示访问的是核心 API 组中的资源(如 pods)。

RoleBinding 将一个 Role 绑定到特定的用户或服务账户,使得这些用户或服务账户能够获得角色中定义的权限。
my-rolebinding 将 my-role 角色的权限赋予 my-serviceaccount 服务账户,使得该服务账户可以在 default 命名空间中对 pods 资源进行操作。

Pod 是 Kubernetes 中的基本调度单位,它可以包含一个或多个容器。
在这个例子中,my-pod 使用了 my-serviceaccount 作为其服务账户。这意味着 Pod 内的容器将使用这个服务账户的身份来与 Kubernetes API 服务器交互。
容器 busybox 执行的命令将服务账户令牌输出到日志中。这个令牌用于 Pod 内的应用与 Kubernetes API 进行身份验证和授权。
  1. ServiceAccount:确实是用于创建和管理账户的,它为 Pod 提供一个身份,用于访问 Kubernetes API。服务账户是在特定命名空间下定义的,并且可以被多个 Pod 使用。

  2. Role:是定义特定命名空间内对资源的权限。它指定了可以对哪些资源执行哪些操作(如 get, list, watch 等)。

  3. RoleBinding:是将一个 Role 绑定到一个或多个用户(包括服务账户)上的机制。它确定了哪些账户(或服务账户)能使用某个 Role 中定义的权限。

  4. Pod:是 Kubernetes 中的最小调度单元,实际的应用运行在容器中。Pod 使用 ServiceAccount 来执行与 Kubernetes API 交互的操作。

总结:

  • ServiceAccount 是 Pod 使用的身份。
  • Role 定义了在命名空间内允许的权限。
  • RoleBinding 将这些权限分配给 ServiceAccount。
  • Pod 是使用 ServiceAccount 的最小单位,用于运行实际的应用。
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值