답변:
다음 명령이 실행되면 :
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
실행되면 문제가 해결되었습니다.
The accepted answer gives full admin access to Helm which is not the best solution security wise
( stackoverflow.com/a/53277281/2777965 참조 ).
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
얻는다Error from server (NotFound): deployments.extensions "tiller-deploy" not found
허용되는 답변은 최고의 보안 솔루션이 아닌 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 init
Tiller를 설치하기 위해 실행할 수 있습니다 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
--tiller-namespace tiller-world
하거나 설정 TILLER_NAMESPACE=tiller-world
해야합니다.
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
기본 서비스 계정에는 API 권한이 없습니다. Helm에는 서비스 계정이 할당되고 해당 서비스 계정에는 API 권한이 할당되어야합니다. 서비스 계정에 권한을 부여하려면 RBAC 설명서를 참조하십시오. https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions
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
AWS의 EKS 클러스터를 사용 중이고 금지 된 문제에 직면 한 경우 ( 예 : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"
다음은 저에게 효과적이었습니다.
해결책:
--clusterrole=cluster-admin
이것은 확실히 권한 문제를 해결하지만 원하는 수정이 아닐 수있는을 할당합니다 . 필요한 정확한 권한을 사용하여 자체 서비스 계정, (클러스터) 역할 및 (클러스터) 역할 바인딩을 만드는 것이 좋습니다.