两者之间的实际区别是什么?我什么时候应该选择一个?
例如,如果我想授予项目中的开发人员访问权限,使其仅查看Pod的日志。似乎可以通过RoleBinding为服务帐户或上下文分配这些权限。
答案 0 :(得分:0)
什么是服务帐户?
来自Docs
用户帐户适用于人类。服务帐户用于流程, 在豆荚中运行。
用户帐户旨在成为全球...服务 帐户已命名空间。
上下文
$ kubectl describe service traefik-ingress-service -n kube-system
Name: traefik-ingress-service
Namespace: kube-system
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"traefik-ingress-service","namespace":"kube-system"},"spec":{"port...
Selector: k8s-app=traefik-ingress-lb
Type: NodePort
IP: 10.100.230.143
Port: web 80/TCP
TargetPort: 80/TCP
NodePort: web 32001/TCP
Endpoints: 10.46.0.1:80
Port: admin 8080/TCP
TargetPort: 8080/TCP
NodePort: admin 30480/TCP
Endpoints: 10.46.0.1:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
与context
文件(kubeconfig
)相关。如您所知~/.kube/config
文件是yaml文件,kubeconfig
部分包含您的context
和user/token
引用。 cluster
非常有用,当您有多个集群时,可以在单个context
文件中定义所有cluster
和user
,然后可以借助上下文(例如:kubeconfig
)
来自Docs
kubectl config --kubeconfig=config-demo use-context dev-frontend
您可以在上方看到3个上下文,其中包含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
和cluster
的引用。
..如果我想授予项目中的开发人员访问权限,只需查看 吊舱的日志。似乎服务帐户或上下文都可能是 通过RoleBinding分配了这些权限。
正确,您需要创建user
,service account
(或Role
),ClusterRole
(或RoleBinding
)并生成ClusterRoleBinding
包含服务帐户kubeconfig
的文件,并将其分配给您的开发人员。
我有一个script to generate kubconfig
file,接受服务帐户名称参数。随时结帐
更新:
如果要创建token
和Role
,则this might help
答案 1 :(得分:0)
它们是两个不同的概念。上下文很可能是指与kubectl
配置有关的抽象,其中上下文可以与服务帐户关联。
出于某种原因,我认为context
只是另一种身份验证方法。
答案 2 :(得分:-1)
服务帐户:服务帐户代表在pod中运行的流程的标识。通过服务帐户对进程进行身份验证后,它可以联系API服务器并访问群集资源。如果Pod没有分配的服务帐户,它将获得默认的服务帐户。
创建Pod时,如果未指定服务帐户,则会自动在同一名称空间中为其分配默认服务帐户,并且可以使用自动安装的服务帐户凭据从Pod内部访问API。
上下文:上下文只是一组访问参数,包含Kubernetes集群,用户和名称空间。
当前上下文是集群,当前是kubectl的默认集群,所有kubectl命令都针对该集群运行。