为每个命名空间设置 Helm RBAC
Setting up Helm RBAC Per Namespace
我正在关注 "Deploy Tiller in a namespace, restricted to deploying resources only in that namespace" 的官方 Helm documentation。这是我的 bash 脚本:
Namespace=""
kubectl create namespace $Namespace
kubectl create serviceaccount "tiller-$Namespace" --namespace $Namespace
kubectl create role "tiller-role-$Namespace" /
--namespace $Namespace /
--verb=* /
--resource=*.,*.apps,*.batch,*.extensions
kubectl create rolebinding "tiller-rolebinding-$Namespace" /
--namespace $Namespace /
--role="tiller-role-$Namespace" /
--serviceaccount="$Namespace:tiller-$Namespace"
helm init /
--service-account "tiller-$Namespace" /
--tiller-namespace $Namespace
--override "spec.template.spec.containers[0].command'='{/tiller,--storage=secret}"
--upgrade
--wait
运行 helm upgrade
给我以下错误:
Error: UPGRADE FAILED: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"
官方文档有bug吗?我读错了吗?
我不确定 --resource
在你的脚本中标记正确的语法,这里是否允许使用星号“*”,看看 issue 在 GitHub 上的报道。
$ kubectl create role "tiller-role-$Namespace" \
--namespace $Namespace \
--verb=* \
--resource=*.,*.apps,*.batch,*.extensions
the server doesn't have a resource type "*"
但是你可以在你的集群中检查这个角色对象:
kubectl get role tiller-role-$Namespace -n $Namespace -o yaml
否则,尝试按照文档中的指导在 yaml 文件中为 tiller
创建角色:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-manager
namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
此外,请记住,如果您在非默认命名空间(default
)中安装了 tiller
,则需要指定 tiller
所在的命名空间,当您调用 Helm
命令:
$ helm --tiller-namespace $Namespace version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
我正在关注 "Deploy Tiller in a namespace, restricted to deploying resources only in that namespace" 的官方 Helm documentation。这是我的 bash 脚本:
Namespace=""
kubectl create namespace $Namespace
kubectl create serviceaccount "tiller-$Namespace" --namespace $Namespace
kubectl create role "tiller-role-$Namespace" /
--namespace $Namespace /
--verb=* /
--resource=*.,*.apps,*.batch,*.extensions
kubectl create rolebinding "tiller-rolebinding-$Namespace" /
--namespace $Namespace /
--role="tiller-role-$Namespace" /
--serviceaccount="$Namespace:tiller-$Namespace"
helm init /
--service-account "tiller-$Namespace" /
--tiller-namespace $Namespace
--override "spec.template.spec.containers[0].command'='{/tiller,--storage=secret}"
--upgrade
--wait
运行 helm upgrade
给我以下错误:
Error: UPGRADE FAILED: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"
官方文档有bug吗?我读错了吗?
我不确定 --resource
在你的脚本中标记正确的语法,这里是否允许使用星号“*”,看看 issue 在 GitHub 上的报道。
$ kubectl create role "tiller-role-$Namespace" \
--namespace $Namespace \
--verb=* \
--resource=*.,*.apps,*.batch,*.extensions
the server doesn't have a resource type "*"
但是你可以在你的集群中检查这个角色对象:
kubectl get role tiller-role-$Namespace -n $Namespace -o yaml
否则,尝试按照文档中的指导在 yaml 文件中为 tiller
创建角色:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-manager
namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
此外,请记住,如果您在非默认命名空间(default
)中安装了 tiller
,则需要指定 tiller
所在的命名空间,当您调用 Helm
命令:
$ helm --tiller-namespace $Namespace version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}