При установке пакета helm я получил следующую ошибку:
[root@k8s-master3 ~]# helm install --name nginx stable/nginx-ingress
Error: release nginx failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"
Вот моя версия руля:
[root@k8s-master3 ~]# helm version
Client: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
И моя версия kubectl:
[root@k8s-master3 ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.1-alicloud", GitCommit:"19408ab2a1b736fe97a9d9cf24c6fb228f23f12f", GitTreeState:"clean", BuildDate:"2017-10-19T04:05:24Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.1", GitCommit:"f38e43b221d08850172a9a4ea785a86a3ffa3b3a", GitTreeState:"clean", BuildDate:"2017-10-11T23:16:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Любая помощь будет оценена по достоинству, большое спасибо!
Похоже, вы столкнулись с проблемой, связанной с привилегиями.
Вы можете включить rbac в при развертывании графика:
$ helm install --name nginx --set rbac.create=true stable/nginx-ingress
@ flyer103
Это все еще не может работать.
Здесь та же проблема. Включение rbac не помогает.
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.3", GitCommit:"f0efb3cb883751c5ffdbe6d515f3cb4fbe7b7acd", GitTreeState:"clean", BuildDate:"2017-11-10T13:17:12Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.2", GitCommit:"bdaeafa71f6c7c04636251031f93464384d54963", GitTreeState:"clean", BuildDate:"2017-10-24T19:38:10Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
$ helm install --name my-hdfs-namenode hdfs-namenode-k8s
Error: release my-hdfs-namenode failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"
Помощь будет очень признательна!
Что вам нужно сделать, так это предоставить tiller (через учетную запись службы по умолчанию) доступ для установки ресурсов в пространстве имен по умолчанию. См. Https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md
Привет, @bacongobbler
Спасибо за помощь. Я следую вашим инструкциям, упомянутым выше, и сделал следующее:
Первым делом сбросил румпель:
helm reset --force
После этого я создаю yaml-файл RBAC:
[root@k8s-master3 ~]# cat rbac-config.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: default
А затем запустите мой румпель:
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.7.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
Однако румпель не установлен:
[root@k8s-master3 ~]# helm version
Client: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
Error: cannot connect to Tiller
И я вшил развертывания в пространство имен kube-system
примерно так:
[root@k8s-master3 ~]# kubectl get deployments --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
ci jenkins 1 1 1 1 5d
default redis-master 1 1 1 0 4d
kube-system default-http-backend 1 1 1 1 5d
kube-system heapster 1 1 1 1 5d
kube-system kube-dns 1 1 1 1 5d
kube-system kubernetes-dashboard 1 1 1 1 5d
kube-system monitoring-influxdb 1 1 1 1 5d
kube-system nginx-ingress-controller 1 1 1 1 5d
kube-system tiller-deploy 1 0 0 0 9m
Есть идеи, как решить эту проблему?
Заранее спасибо!
@noprom попробуйте это
удалить развертывание румпеля вручную
создайте эти конфигурации rbac для румпеля
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: ""
запустить удаление (да, удалить) в этой конфигурации rbac
запустить снова создать
затем запустите helm init --upgrade, чтобы заменить
у вас больше не должно быть ошибок.
@innovia
Большой! Спасибо, я решил эту проблему.
Большое спасибо!
Рад помочь :)
@noprom, пожалуйста, проверьте мой пост о том, как настроить руль и руль с rbac для каждого пространства имен
@innovia
Фантастический пост! 😄
Спасибо!
вышеперечисленное не работает.
namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"
Это потому, что у вас нет разрешения на развертывание tiller, добавьте для него учетную запись:
kubectl --namespace kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller-cluster-rule \
--clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl --namespace kube-system patch deploy tiller-deploy \
-p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
Вывод в консоль:
serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched
Затем запустите команду ниже, чтобы проверить это:
helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress
@ykfq Большое спасибо, работает! Но каждый раз, когда мы развертываем новый кластер, нам нужно это делать? Какое неудобство!
@ antran89
Если вы воспользуетесь официальной инструкцией по установке румпеля , вам нужно будет сделать это:
helm init
Итак, есть еще один способ упростить задачу - установить через файл yaml:
vim tiller.yaml
apiVersion: v1
kind: Service
metadata:
name: tiller-deploy
namespace: kube-system
labels:
app: helm
name: tiller
spec:
ports:
- name: tiller
port: 44134
protocol: TCP
targetPort: tiller
selector:
app: helm
name: tiller
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tiller-deploy
namespace: kube-system
labels:
app: helm
name: tiller
annotations:
deployment.kubernetes.io/revision: "5"
spec:
replicas: 1
selector:
matchLabels:
app: helm
name: tiller
template:
metadata:
labels:
app: helm
name: tiller
spec:
containers:
- env:
- name: TILLER_NAMESPACE
value: kube-system
- name: TILLER_HISTORY_MAX
value: "0"
name: tiller
image: gcr.io/kubernetes-helm/tiller:v2.8.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 44134
name: tiller
protocol: TCP
- containerPort: 44135
name: http
protocol: TCP
livenessProbe:
failureThreshold: 3
httpGet:
path: /liveness
port: 44135
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
httpGet:
path: /readiness
port: 44135
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
serviceAccount: tiller
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-cluster-rule
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: ""
Затем создайте ресурсы:
kubectl create -f tiller.yaml
Обязательно проверьте свой сервис.
указанное выше содержимое yaml было экспортировано из работающего кластера с помощью команды:
kubectl -n kube-system get svc tiller-deploy -o=yaml
kubectl -n kube-system get deploy tiller-deploy -o=yaml
kubectl -n kube-system get sa tiller -o=yaml
kubectl -n kube-system get clusterrolebinding tiller-cluster-rule -o=yaml
Этот yaml еще не тестировался, если у вас есть вопросы, оставьте комментарий.
@ykfq Мне не нравится идея давать Tiller полные права администратора кластера, но все остальное у меня не сработало. Я пробовал следовать этому примеру . Я пытался ограничить Тиллера действиями только в тех пространствах имен, которые я позволил ему действовать.
Но всегда сталкивался с этой проблемой (развертывал Concourse):
Error: release concourse failed: namespaces "concourse" is forbidden: User "system:serviceaccount:tiller-system:tiller-user" cannot get namespaces in the namespace "concourse": Unknown user "system:serviceaccount:tiller-system:tiller-user"
Есть идеи, как заставить этот конкретный пример работать? Я изменил некоторые параметры, весь YAML с RBAC был таким:
apiVersion: v1
kind: Namespace
metadata:
name: tiller-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller-user
namespace: tiller-system
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-manager
namespace: tiller-system
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["configmaps"]
verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-binding
namespace: tiller-system
subjects:
- kind: ServiceAccount
name: tiller-user
namespace: tiller-system
roleRef:
kind: Role
name: tiller-manager
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Namespace
metadata:
name: concourse
---
apiVersion: v1
kind: Namespace
metadata:
name: concourse-main
----
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-concourse-role
namespace: concourse
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-concourse-namespace-role
namespace: concourse
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["namespaces"]
verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-concourse-main-role
namespace: concourse-main
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-concourse-main-role
subjects:
- kind: ServiceAccount
name: tiller-user
namespace: tiller-system
roleRef:
kind: Role
name: tiller-concourse-main-role
apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-concourse-role
subjects:
- kind: ServiceAccount
name: tiller-user
namespace: tiller-system
roleRef:
kind: Role
name: tiller-concourse-role
apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-concourse-namespace-role
subjects:
- kind: ServiceAccount
name: tiller-user
namespace: tiller-system
roleRef:
kind: Role
name: tiller-concourse-namespace-role
apiGroup: rbac.authorization.k8s.io
helm init --upgrade --service-account tiller
@brunoban helm v3 удалит румпель, поэтому,
@innovia О ... Я этого не знал. Тогда попробую набрать скорость. Спасибо!
затем запустите helm init --upgrade, чтобы заменить
@innovia Куда положить конфигурационный файл rbac?
@cjbottaro вы читали сообщение, которое я написал Hwo, чтобы настроить штурвал и румпель для каждого пространства имен ?
Я не понимаю ваш вопрос, не могли бы вы еще раз объяснить?
@innovia Nevermind, я разобрался. Просто пришлось бежать
kubectl create -f tiller.yaml
helm init --upgrade --service-account tiller
это сработало для меня:
kubectl --namespace kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount = kube- system: tiller
helm init --service-account tiller --upgrade
Я следую официальной документации Helm по теме «Развертывание Tiller в пространстве имен, ограниченное развертыванием ресурсов только в этом пространстве имен». Вот мой сценарий на bash:
Namespace="$1"
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 upgrade
дает мне следующую ошибку:
Ошибка: UPGRADE FAILED: configmaps запрещен: пользователь " system: serviceaccount: kube- system: default " не может отображать configmaps в пространстве имен "kube-system"
Есть ли ошибка в официальной документации? Я неправильно прочитал?
Какой была полная команда для helm init
? Не могли бы вы открыть для этого отдельный билет?
@bacongobbler Проблема https://github.com/helm/helm/issues/4933
вышеперечисленное не работает.
namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"
Следуйте нижеприведенной команде: -
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/ tiller: v2.14.0 --stable-repo-url https: //kubernetes.oss-cn-hangzhou.aliyuncs .com / диаграммы
Что вам нужно сделать, так это предоставить tiller (через учетную запись службы по умолчанию) доступ для установки ресурсов в пространстве имен по умолчанию. См. Https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md
Имя файла теперь rbac.md
а ссылка находится по адресу https://github.com/helm/helm/blob/master/docs/rbac.md.
Это потому, что у вас нет разрешения на развертывание tiller, добавьте для него учетную запись:
kubectl --namespace kube-system create serviceaccount tiller kubectl create clusterrolebinding tiller-cluster-rule \ --clusterrole=cluster-admin --serviceaccount=kube-system:tiller kubectl --namespace kube-system patch deploy tiller-deploy \ -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
Вывод в консоль:
serviceaccount "tiller" created clusterrolebinding "tiller-cluster-rule" created deployment "tiller-deploy" patched
Затем запустите команду ниже, чтобы проверить это:
helm list helm repo update helm install --name nginx-ingress stable/nginx-ingress
Было бы здорово, если бы документация по установке румпеля была обновлена этими точными инструкциями.
У меня был следующий ямл
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: ""
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
Если я прав, мне не хватало tiller deployment
в этом yaml?
helm init --upgrade --service-account tiller
Приведенная выше команда устраняет эту проблему, сначала настоятельно рекомендую этот шаг :)
Самый полезный комментарий
Это потому, что у вас нет разрешения на развертывание tiller, добавьте для него учетную запись:
Вывод в консоль:
Затем запустите команду ниже, чтобы проверить это: