首页 > 解决方案 > Kubernetes 中的服务帐户和上下文有什么区别?

问题描述

两者之间的实际区别是什么?我什么时候应该选择一个而不是另一个?

例如,如果我想让我的项目中的开发人员访问仅查看 pod 的日志。似乎可以通过 RoleBinding 为服务帐户或上下文分配这些权限。

标签: kubernetes

解决方案


什么是服务帐号?

来自文档

用户帐户适用于人类。服务帐户用于在 pod 中运行的进程。

用户帐户旨在是全局的...服务帐户是命名空间的。

语境

contextkubeconfig文件(~/.kube/config)有关。如您所知kubeconfig,文件是一个 yaml 文件,该部分context包含您的user/tokencluster引用。context当您有多个集群时非常有用,您可以在单个文件中定义所有clusters 和s ,然后您可以在上下文的帮助下在它们之间切换(示例:)userkubeconfigkubectl 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 个上下文,包含cluster和的引用user

..如果我想让我的项目中的开发人员访问仅查看 pod 的日志。似乎可以通过 RoleBinding 为服务帐户或上下文分配这些权限。

没错,您需要创建service accountRole(或ClusterRole),RoleBinding(或ClusterRoleBinding)并生成kubeconfig包含服务帐户的文件token并将其提供给您的开发人员。

我有一个脚本来生成kubconfig文件,采用服务帐户名称参数。随时查看

更新:

如果您想创建Roleand RoleBinding这可能会有所帮助


推荐阅读