如何使用上下文为 ServiceAccount 创建角色

How to create a role to ServiceAccount with context

我想为具有上下文的服务帐户创建一个角色。
我的目标是能够 运行 kubectl get pods 使用服务帐户的上下文。

为此我需要:

  1. 创建服务帐户
  2. 创建角色
  3. 创建绑定角色
  4. 创建上下文

我创建了一个服务帐户:

kubectl create serviceaccount myservice

Role.yaml:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata: 
  namespace: development
  name: my-role
rules: 
- apiGroups: ["", "extensions", "apps"]
  resources: ["pods"]
  verbs: ["get"] 

绑定Role.yaml:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata: 
  name: my-role-binding
  namespace: development
subjects: 
- kind: ServiceAccount 
  name: myservice
  namespace: development
  apiGroup: ""
roleRef: 
  kind: Role
  name: my-role
  apiGroup: ""

我希望能够在服务帐户 myservice 的上下文中 运行 kubectl get pods

要创建上下文,我需要这样的东西:

kubectl config set-context myservice-context --cluster=kubernetes --user=???

但是我无法使用 --user 作为服务帐户。
那我该怎么做呢?

我想使用 kubectl config set-credentials,但它只会创建一个用户,而我已经有了服务帐户。

编辑:
这是我尝试使用服务帐户的令牌创建用户,然后将其与 kubectl --context=myservice-context get pods 一起使用,但失败了:

您的 ~/.kube/config 文件中似乎缺少集群。如果是权限问题,我希望看到 error: You must be logged in to the server (Unauthorized)Error from server (Forbidden).

您看到的错误 The connection to the server localhost:8080 was refused - did you specify the right host or port? 表示没有集群具有您在 kubeconfig 中指定的名称。

我会检查您的 kubeconfig 是否包含集群名称 kubernetescertificate-authority-data 以及相应的 server.

例如,我首先尝试使用不存在的服务帐户和无效的集群,然后再次使用我的 kubeconfig.

中确实存在的集群

错误的集群名称:

kubectl config set-context service-context \
--cluster=doesnotexist \
> --namespace=default \
> --user=service-account
Context "service-context" modified.
➜  ~ kubectl --context=service-context get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

好的集群名称:

kubectl config set-context service-context \
--cluster=exists \
--namespace=default \
--user=service-account
Context "service-context" modified.
➜  ~ kubectl --context=service-context get pods
error: You must be logged in to the server (Unauthorized)

后面的错误表明您的 user/permissions 有问题。前者会提示 cluster 在您的 kubeconfig.

中不存在

编辑:

还请记住,当您使用 sudo 时,它使用 /root/.kube/config,这可能不是您想要的