在Kubernetes中,服务账号和上下文有什么区别?

4

这两者之间有哪些实际区别?何时应该选择其中之一?

例如,如果我想让我的项目开发人员只能查看一个 Pod 的日志,似乎可以通过 RoleBinding 为 service account 或 context 分配这些权限。


上下文用于将 kubectl 指向一个特定的集群,因此从视角来看,它们具有不同的范围。 - c4f4t0r
我不确定我理解了。服务账户也绑定到单个集群? - Chris Stryczynski
你能举个你所提到的“上下文”的例子吗?容器上可能有一个securityContext,但它们与RBAC没有直接关系。@c4f4t0r提到的另一个上下文是kubectl配置,它也没有太多关系。 - Matt
3个回答

4

什么是Service Account?

来自文档

用户账户用于人员身份验证,Service Account则用于运行在Pod中的进程。

用户账户旨在全局使用...而Service Account只限于特定命名空间。

上下文

contextkubeconfig文件(~/.kube/config)相关。如您所知,kubeconfig文件是一个yaml文件,其中的context部分包含了您的user/tokencluster引用。当您有多个集群时,context非常有用,您可以在单个kubeconfig文件中定义所有的clusterusers,然后借助上下文进行切换 (例如:kubectl config --kubeconfig=config-demo use-context dev-frontend)。

来自文档

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: scratch
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    password: some-password
    username: exp

你可以看到,上方有3个上下文,保存了clusteruser的引用。
如果我想让我的项目中的开发人员仅查看一个pod的日志,似乎可以通过RoleBinding为服务帐户或上下文分配这些权限。
没错,您需要创建service accountRole(或ClusterRole)、RoleBinding(或ClusterRoleBinding)并生成包含服务帐户tokenkubeconfig文件,并将其提供给您的开发人员。
我有一个生成kubconfig文件的脚本,需要传入服务帐户名称参数。随意查看。
更新:
如果要创建RoleRoleBinding可能会有所帮助

1
服务账户:服务账户代表在Pod中运行的进程的身份。当一个进程通过服务账户进行身份验证时,它可以联系API服务器并访问集群资源。如果一个Pod没有分配服务账户,它将获得默认的服务账户。
创建Pod时,如果未指定服务账户,则自动分配同一命名空间中的默认服务账户,并且您可以使用自动挂载的服务账户凭据从Pod内部访问API。 上下文:上下文只是一个包含Kubernetes集群、用户和命名空间的访问参数集。
当前上下文是当前默认的kubectl集群,所有kubectl命令都针对该集群运行。

0
它们是两个不同的概念。上下文最有可能是指与 kubectl 配置相关的抽象,其中上下文可以关联到服务账户。
由于某种原因,我以为 context 只是另一种身份验证方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接