helm list :“kube-system”네임 스페이스에있는 configmap을 나열 할 수 없습니다.


108

kubernetes 8 클러스터에 helm 2.6.2를 설치했습니다. helm init잘 작동했습니다. 하지만 실행 helm list하면이 오류가 발생합니다.

 helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"

이 RABC 오류 메시지를 수정하는 방법은 무엇입니까?

답변:


228

다음 명령이 실행되면 :

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'      
helm init --service-account tiller --upgrade

실행되면 문제가 해결되었습니다.


10
--clusterrole=cluster-admin이것은 확실히 권한 문제를 해결하지만 원하는 수정이 아닐 수있는을 할당합니다 . 필요한 정확한 권한을 사용하여 자체 서비스 계정, (클러스터) 역할 및 (클러스터) 역할 바인딩을 만드는 것이 좋습니다.
Curtis Mattoon

2
The accepted answer gives full admin access to Helm which is not the best solution security wise( stackoverflow.com/a/53277281/2777965 참조 ).
030

1
"init"를 실행할 때 "--upgrade"가 있어야하며 다른 질문에는 언급하지 않습니다.
heavenwing 19

내가 달릴 때 나는 kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'얻는다Error from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

보다 안전한 답변

허용되는 답변은 최고의 보안 솔루션이 아닌 Helm에 대한 전체 관리자 액세스 권한을 부여합니다. 조금 더 작업하면 Helm의 액세스를 특정 네임 스페이스로 제한 할 수 있습니다. Helm 문서 에 자세한 내용이 있습니다 .

$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created

Tiller가 다음 tiller-world과 같이 모든 리소스를 관리 할 수 ​​있도록하는 역할을 정의합니다 role-tiller.yaml.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]

그런 다음 다음을 실행하십시오.

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created

에서 rolebinding-tiller.yaml,

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-binding
  namespace: tiller-world
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: tiller-world
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io

그런 다음 다음을 실행하십시오.

$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created

나중에 네임 스페이스에 helm initTiller를 설치하기 위해 실행할 수 있습니다 tiller-world.

$ helm init --service-account tiller --tiller-namespace tiller-world

이제 모든 명령에 환경 변수 를 추가 --tiller-namespace tiller-world하거나 설정 TILLER_NAMESPACE=tiller-world하십시오.

더 많은 미래 증명 답변

Tiller 사용을 중지하십시오. Helm 3는 Tiller의 필요성을 완전히 제거합니다. Helm 2를 사용 helm template하는 경우을 사용 하여 Helm 차트에서 yaml을 생성 한 다음 실행 kubectl apply하여 Kubernetes 클러스터에 객체를 적용 할 수 있습니다.

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml

1
이 작업을 수행 한 후에는 모든 helm 명령에 환경 변수 를 추가 --tiller-namespace tiller-world하거나 설정 TILLER_NAMESPACE=tiller-world해야합니다.
spuder

1
미래 증명 답변에 완전히 동의합니다. 관리자들은 RBAC가 관리하기 너무 복잡하다는 것을 깨닫는 것 같습니다. 알파 버전이지만 살펴볼 가치가 있습니다. Helm 3, alpha 1
Richard

1
동의합니다. RBAC는 처음에는 손에 넣을 수 있습니다. 나는 여전히 어려움을 겪고 있지만 발전하고 있습니다.
coreyperkins 19

Persistent Volumes 생성은 helm의 수락 방식입니까? 이 경우에 다른 클러스터 역할과 바인딩도 만들어야합니까?
Sawyer

20

Helm은 "기본"서비스 계정으로 실행됩니다. 이에 대한 권한을 제공해야합니다.

읽기 전용 권한 :

kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system

관리자 액세스 : 예 : 패키지를 설치합니다.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

실행 한 후 kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default다음 실행 helm list나는 아직도 얻을Error: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
마법 (magick)


0
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f your-config-file-name.yaml

그런 다음 serviceAccount를 사용하도록 helm 설치를 업데이트합니다.

helm init --service-account tiller --upgrade


0

오프라인 모드에서 tiller를 설치하려고 할 때이 오류가 발생했는데 'tiller'서비스 계정에 충분한 권한이 없다고 생각했지만 네트워크 정책이 tiller와 api-server 간의 통신을 차단하는 것으로 나타났습니다.

해결책은 tiller의 모든 송신 통신을 허용하는 tiller에 대한 네트워크 정책을 만드는 것이 었습니다.


0

export TILLER_NAMESPACE=<your-tiller-namespace>그렇지 <your-tiller-namespace>않은 경우 나를 위해 해결했습니다 kube-system. 그러면 Helm 클라이언트가 올바른 Tiller 네임 스페이스를 가리 킵니다.


0

AWS의 EKS 클러스터를 사용 중이고 금지 된 문제에 직면 한 경우 ( : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"다음은 저에게 효과적이었습니다.

해결책:

  1. AWS를 구성했는지 확인
  2. 구성된 사용자에게 클러스터에 대한 액세스 권한이 있는지 확인하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.