学习k8s的serviceAccount

Kubernetes 的 ServiceAccount(服务账户)是用于在 Kubernetes 环境中进行身份验证和授权的一种机制。它们主要用于为在 Kubernetes 中运行的 pod 提供身份标识,确保这些 pod 可以安全地访问 Kubernetes API 和其他资源

什么是 serviceAccount?

在 Kubernetes 中,ServiceAccount 提供了一种将 API 凭据(如密钥)自动挂载到 pod 中的方式。每个 ServiceAccount 都与一组凭证相关联,这些凭证被存储为 Kubernetes Secret 对象。当创建 pod 时,可以指定一个 ServiceAccount,Kubernetes 系统会自动将这些凭证挂载到 pod 中,使其能够安全地与 Kubernetes API 交互。

使用场景:

  • 自动化操作:自动化工具(如 CI/CD 管道)通常需要与 Kubernetes API 交互,ServiceAccount 可以为这些工具提供必要的访问权限。
  • 多租户环境:在多租户 Kubernetes 环境中,ServiceAccount 可以帮助实现租户隔离,确保每个租户只能访问其自己的资源。
  • 应用程序访问控制:对于需要与 Kubernetes 集群内其他服务或资源交互的应用程序,ServiceAccount 可以提供适当的权限。

使用案例:

假设我们有一个需要访问 Kubernetes API 读取 Pod 信息的应用程序。我们将创建一个 ServiceAccount,并给它适当的权限。

1.创建 serviceAccount:

1
2
3
4
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-serviceaccount
  1. 创建角色与角色绑定:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: pod-reader
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]
    
    ---
    
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: read-pods
    subjects:
    - kind: ServiceAccount
      name: my-serviceaccount
      namespace: default
    roleRef:
      kind: Role
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
    
  2. 在 Pod 中使用 ServiceAccount

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      serviceAccountName: my-serviceaccount
      containers:
      - name: mycontainer
        image: myimage
    

    总结

在这个例子中,我们首先创建了一个 ServiceAccount my-serviceaccount,然后定义了一个 pod-reader 角色,该角色允许读取 Pod 信息,并通过 RoleBinding 将该角色绑定到我们的 ServiceAccount。最后,在创建 Pod 时,我们指定使用 my-serviceaccount,这样 Pod 就有了读取其他 Pod 信息的权限。

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up