为什么一个服务帐户在';kubernetes不允许有什么?

为什么一个服务帐户在';kubernetes不允许有什么?,kubernetes,Kubernetes,我有以下部署规范: apiVersion: apps/v1 kind: Deployment metadata: name: sa-dep-non-root spec: selector: matchLabels: app: sa-dep-non-root # has to match .spec.template.metadata.labels #replicas: 3 # by default is 1 template: metadata:

我有以下部署规范:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sa-dep-non-root 
spec:
  selector:
    matchLabels:
      app: sa-dep-non-root # has to match .spec.template.metadata.labels
  #replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: sa-dep-non-root # has to match .spec.selector.matchLabels
    spec:
      serviceAccountName: simon-sa
      securityContext:
        runAsUser: 1000
      tolerations:
      - key: "type"
        operator: "Equal"
        value: "ops"
        effect: "NoSchedule"
      containers:
      - name: sa-dep-non-root
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: sa-dep-non-root
在运行时正确创建部署及其相应的POD:
kubectl apply-f simon-sa-deployment-non-root.yaml-n test ns
我没想到这会起作用,因为我正在将serviceAccountName设置为
simon sa
,它没有创建POD的权限:

Simons-MBP:test simon$ kubectl  --as=system:serviceaccount:test-ns:simon-sa auth can-i create pods -n test-ns
no

我的理解是,如果未指定任何
serviceAccountName
,则是k8s控制器管理器(通过一些具有正确权限的ClusterRoleBinding,如system:controller:replicaset controller)创建POD,实际上,并不是我自己的用户在其中验证了我的身份,而是为部署创建pod的用户


我的另一个理解是,在pod定义中指定
serviceAccountName
时,可以覆盖此行为。在这种情况下,POD不是由控制器管理器创建的,而是为指定的serviceAccountName创建的。由于我指定的serviceAccountName没有创建POD的权限,因此此操作应该失败。我这里有混合的概念吗?

服务帐户
是pod的权限,您要做的是将此权限分配给您在部署中实例化的pod,因此
kubectl apply-f simon-sa-deployment-non-root.yaml-n test ns
将使用用户使用
kubectl
api服务器登录的权限,因此如果执行
kubectl auth can-i创建部署--命名空间测试ns
将返回Yes

因此,您可能正在尝试创建一个用户,该用户将拥有对集群的只读访问权限,这是通过集群角色完成的,而不是服务帐户(作用域为POD)


或者让我知道您正在尝试做什么,我可以解释服务帐户是pod的权限,您正在做的是将此权限分配给您在部署中实例化的pod,因此
kubectl apply-f simon-sa-deployment-non-root.yaml-n test ns
将使用用户使用
kubectl
api服务器登录的权限,因此如果执行
kubectl auth can-i创建部署--命名空间测试ns
将返回Yes

因此,您可能正在尝试创建一个用户,该用户将拥有对集群的只读访问权限,这是通过集群角色完成的,而不是服务帐户(作用域为POD)

或者让我知道你想做什么,我可以解释