在集群内运行kubectl

Ach*_*him 6 kubernetes kubectl kubernetes-helm

我有一个Kubernetes 1.10群集正在运行.使用以下命令,我在集群内创建一个运行bash的容器:

kubectl run tmp-shell --rm -i --tty --image centos -- /bin/bash
Run Code Online (Sandbox Code Playgroud)

我在正在运行的容器中下载了正确版本的kubectl,使其可执行并尝试运行

./kubectl get pods
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

Error from server (Forbidden): pods is forbidden:
User "system:serviceaccount:default:default" cannot
list pods in the namespace "default"
Run Code Online (Sandbox Code Playgroud)

这是否意味着,kubectl检测到它在群集内运行并自动连接到该群集?如何允许serviceaccount列出pod?我的最终目标是helm在容器内运行.根据我发现的文档,一旦工作正常,这应该工作kubectl正常.

Jor*_*itt 8

这是否意味着,kubectl检测到它在群集内运行并自动连接到该群集?

是的,它使用KUBERNETES_SERVICE_PORT和KUBERNETES_SERVICE_HOST envvars来定位API服务器,并使用自动注入/var/run/secrets/kubernetes.io/serviceaccount/token文件中的凭据来验证自身.

如何允许serviceaccount列出pod?

这取决于您使用的授权模式.如果您使用RBAC(这是典型的),则可以通过创建RoleBinding或ClusterRoleBinding对象为该服务帐户授予权限.

有关更多信息,请参阅https://kubernetes.io/docs/reference/access-authn-authz/rbac/#service-account-permissions.

我相信helm需要广泛的权限(基本上是群集上的超级用户).第一步是确定运行的服务帐户helm(检查serviceAccountNamehelm pod中的内容).然后,要为该服务帐户授予超级用户权限,请运行:

kubectl create clusterrolebinding helm-superuser \
  --clusterrole=cluster-admin \
  --serviceaccount=$SERVICEACCOUNT_NAMESPACE:$SERVICEACCOUNT_NAME
Run Code Online (Sandbox Code Playgroud)