如何使用上下文为 ServiceAccount 创建角色
How to create a role to ServiceAccount with context
我想为具有上下文的服务帐户创建一个角色。
我的目标是能够 运行 kubectl get pods
使用服务帐户的上下文。
为此我需要:
- 创建服务帐户
- 创建角色
- 创建绑定角色
- 创建上下文
我创建了一个服务帐户:
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 是否包含集群名称 kubernetes
和 certificate-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
,这可能不是您想要的
我想为具有上下文的服务帐户创建一个角色。
我的目标是能够 运行 kubectl get pods
使用服务帐户的上下文。
为此我需要:
- 创建服务帐户
- 创建角色
- 创建绑定角色
- 创建上下文
我创建了一个服务帐户:
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 是否包含集群名称 kubernetes
和 certificate-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
,这可能不是您想要的