问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Kubernetes 中的 ServiceAccount 使用指南

创作时间:
作者:
@小白创作中心

Kubernetes 中的 ServiceAccount 使用指南

引用
CSDN
1.
https://m.blog.csdn.net/m0_46423830/article/details/145756519

在Kubernetes(K8s)中,ServiceAccount是一种专门用于控制Pod与Kubernetes API之间交互的资源。它提供身份验证的凭据,通常用于向Pod授予访问Kubernetes API的权限。本文将详细介绍ServiceAccount的概念、用途、创建方法、与RBAC的结合使用以及相关场景。

1. ServiceAccount 的概念

默认情况下,Kubernetes集群会自动为每个Pod分配一个默认的defaultServiceAccount。ServiceAccount本质上是K8s内部的一种身份标识,用于关联Pod与相关的权限。

2. ServiceAccount 的用途

  • 授予Pod访问Kubernetes API的权限。
  • 结合RBAC(Role-Based Access Control)实现细粒度的权限控制。
  • 配合Kubernetes中的身份认证、访问控制和审计功能。
  • 用于在Kubernetes中运行需要访问K8s API的应用程序(如Operators、Controllers)。

3. 创建和使用 ServiceAccount

3.1 创建 ServiceAccount

需要定义一个ServiceAccount的YAML文件service-account.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
  namespace: default

执行以下命令来创建:

kubectl apply -f service-account.yaml

3.2 将 ServiceAccount 绑定到 Pod

需要在Pod的YAML文件中指定serviceAccountName,例如my-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: default
spec:
  serviceAccountName: my-service-account
  containers:
- name: my-container
    image: nginx

执行以下命令来创建Pod:

kubectl apply -f my-pod.yaml

3.3 查看 ServiceAccount

使用以下命令查看集群中的ServiceAccount:

kubectl get serviceaccounts

4. 查询 ServiceAccount

可以使用多种方式来查询ServiceAccount的详细信息:

4.1 列出所有 ServiceAccount

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

kubectl get serviceaccounts

如果需要查看其他命名空间的ServiceAccount,可以使用-n选项:

kubectl get serviceaccounts -n <namespace-name>

4.2 查看特定 ServiceAccount 的详细信息

可以使用kubectl describe命令查看ServiceAccount的详细信息:

kubectl describe serviceaccount my-service-account

4.3 查看 ServiceAccount 关联的 Secret

执行以下命令列出所有关联的Secret:

kubectl get secrets

并通过以下命令查看Secret的详细信息:

kubectl describe secret <secret-name>

5. RBAC 与 ServiceAccount

可以为ServiceAccount配置RBAC权限,例如赋予my-service-account读取Pod列表的权限。

5.1 创建 Role

定义一个role.yaml文件,包含如下内容:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

执行以下命令来创建Role:

kubectl apply -f role.yaml

5.2 创建 RoleBinding

定义一个rolebinding.yaml文件,绑定my-service-accountpod-reader角色:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: my-service-account
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

执行以下命令来创建RoleBinding:

kubectl apply -f rolebinding.yaml

6. ServiceAccount 的 Token

每个ServiceAccount都会自动创建一个Secret,包含访问Kubernetes API所需的token。可以通过以下命令查看:

kubectl get secrets

也可以通过描述ServiceAccount看到关联的Secret:

kubectl describe serviceaccount my-service-account

7. 使用场景

  • 授权某个Pod访问集群中的资源。
  • 安全运行需要Kubernetes API交互的自定义控制器。
  • 与GitOps或CI/CD相关的工作负载集成。

通过正确地创建和配置ServiceAccount,可以在Kubernetes集群中实现更安全、灵活的权限管理。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号