为 kubernetes 集群创建的新服务帐户无法执行到 pods
New serviceaccount created for kubernetes cluster cannot exec into pods
我有一个脚本可以创建具有特定访问权限的用户。
脚本运行以下命令:
kubectl create serviceaccount username
kubectl create clusterrole readonlyuser --non-resource-url=* --verb=get,list,watch --resource=pods,pods/attach,pods/exec,pods/port-forward,pods/proxy,services/proxy
kubectl create clusterrolebinding username --serviceaccount=default:username --clusterrole=readonlyuser
kubectl create rolebinding username --serviceaccount=default:username --clusterrole=readonlyuser --namespace=namespace
当我尝试执行该特定命名空间中的 pod 时,我得到以下信息:
Error from server (Forbidden): pods "<podname>" is forbidden: User "system:serviceaccount:default:username" cannot create resource "pods/exec" in API group "" in the namespace "namespace"
知道如何解决这个问题吗?
错误消息说明如下:
cannot create resource "pods/exec" in API group "" in the namespace "namespace"
因此创建了另一个 clusterrole 和 rolebinding 如下:
kubectl create clusterrole exec-readonlyuser --verb create --resource pods/exec
kubectl create rolebinding exec-readonlyuser --clusterrole=exec-readonlyuser --serviceaccount default:namespace -n namespace
现在尝试执行并且正在运行。
kubectl exec -it nginx --as system:serviceaccount:namespace:username -- sh
#
#exit
如果您正在使用 yaml
,则可以将其添加为同一 clusterrole 中的另一条规则。
我有一个脚本可以创建具有特定访问权限的用户。
脚本运行以下命令:
kubectl create serviceaccount username
kubectl create clusterrole readonlyuser --non-resource-url=* --verb=get,list,watch --resource=pods,pods/attach,pods/exec,pods/port-forward,pods/proxy,services/proxy
kubectl create clusterrolebinding username --serviceaccount=default:username --clusterrole=readonlyuser
kubectl create rolebinding username --serviceaccount=default:username --clusterrole=readonlyuser --namespace=namespace
当我尝试执行该特定命名空间中的 pod 时,我得到以下信息:
Error from server (Forbidden): pods "<podname>" is forbidden: User "system:serviceaccount:default:username" cannot create resource "pods/exec" in API group "" in the namespace "namespace"
知道如何解决这个问题吗?
错误消息说明如下:
cannot create resource "pods/exec" in API group "" in the namespace "namespace"
因此创建了另一个 clusterrole 和 rolebinding 如下:
kubectl create clusterrole exec-readonlyuser --verb create --resource pods/exec
kubectl create rolebinding exec-readonlyuser --clusterrole=exec-readonlyuser --serviceaccount default:namespace -n namespace
现在尝试执行并且正在运行。
kubectl exec -it nginx --as system:serviceaccount:namespace:username -- sh
#
#exit
如果您正在使用 yaml
,则可以将其添加为同一 clusterrole 中的另一条规则。