पतवार सूची: नाम सूची में विन्यास नहीं कर सकता "क्यूब-प्रणाली"


108

मैंने kubernetes 8 क्लस्टर पर हेल्म 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, जो निश्चित रूप से अनुमतियों की समस्याओं को ठीक करेगा, लेकिन हो सकता है कि आप जो फिक्स नहीं चाहते हैं। अपने स्वयं के सेवा खाते, (क्लस्टर) भूमिकाएँ बनाना बेहतर है, और (क्लस्टर) रोलबाइंडिंग जो आपकी आवश्यक अनुमतियों के साथ हैं।
कर्टिस मट्टून

2
The accepted answer gives full admin access to Helm which is not the best solution security wise(देखें stackoverflow.com/a/53277281/2777965 )।
0:30

1
जब "init" चलाया जाता है, तो "--upgrad" होना चाहिए, अन्य प्रश्न इसका उल्लेख नहीं करते हैं।
स्वर्गवासी जूल

जब मैं चलाने 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

अधिक सुरक्षित उत्तर

स्वीकृत उत्तर हेल्म को पूर्ण व्यवस्थापक अभिगम देता है जो सबसे अच्छा समाधान सुरक्षा वार नहीं है। थोड़े और काम के साथ, हम हेल्म की पहुँच को एक विशेष नामस्थान तक सीमित कर सकते हैं। हेल्म प्रलेखन में अधिक जानकारी ।

$ 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करें।

अधिक भविष्य प्रमाण जवाब

टिलर का इस्तेमाल बंद कर दें। हेल्म 3 टिलर की आवश्यकता को पूरी तरह से हटा देता है। यदि आप Helm 2 का उपयोग कर रहे हैं, तो आप helm templateअपने Helm चार्ट से yaml उत्पन्न करने के लिए उपयोग कर सकते हैं और फिर kubectl applyअपने कुबेरनेट क्लस्टर में ऑब्जेक्ट्स को लागू करने के लिए चला सकते हैं।

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

1
ध्यान दें, एक बार जब आप ऐसा करते हैं, तो आपको अपने पर्यावरण चर में सभी हेल्म कमांड के साथ उपसर्ग करना होगा --tiller-namespace tiller-worldया सेट करना होगा TILLER_NAMESPACE=tiller-world
21

1
भविष्य के प्रमाण उत्तर से पूरी तरह सहमत हैं। हेल्म लोगों को यह महसूस होता है कि RBAC सामान ने चीजों को प्रबंधित करने के लिए बहुत जटिल बना दिया है। वे केवल अल्फा में हैं, लेकिन देखने लायक हैं: हेल्म 3, अल्फा 1
रिचर्ड

1
सहमत, आरबीएसी आपके हाथों को पहले से प्राप्त करने के लिए थोड़ा अधिक है। मैं अभी भी इससे जूझ रहा हूं लेकिन प्रगति कर रहा हूं।
कोरइपरकिंस

क्या निरंतर परिमाण में हेल्म द्वारा स्वीकार अभ्यास का निर्माण होता है? क्या हमें इस मामले के लिए एक और क्लस्टर-भूमिका और बाध्यकारी भी बनाना चाहिए?
सॉयर

20

हेल्म "डिफ़ॉल्ट" सेवा खाते के साथ चलता है। आपको इसकी अनुमति प्रदान करनी चाहिए।

केवल पढ़ने के लिए अनुमतियाँ:

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

व्यवस्थापक पहुँच के लिए: Eg: संकुल को स्थापित करने के लिए।

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
मैगिक

4

डिफ़ॉल्ट सेवा सर्वर में API अनुमतियां नहीं हैं। हेलम की संभावना है कि उसे एक सेवा खाता सौंपा जाए, और उस सेवा खाते को एपीआई अनुमति दी जाए। सेवा खातों को अनुमति देने के लिए RBAC दस्तावेज़ देखें: https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions


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

और फिर सेवा का उपयोग करने के लिए पतवार वृत्ति अद्यतन करें।

helm init --service-account tiller --upgrade


0

ऑफ़लाइन मोड में टिलर को स्थापित करने का प्रयास करते समय मुझे यह त्रुटि मिली, मैंने सोचा कि 'टिलर' सेवा खाते में पर्याप्त अधिकार नहीं हैं, लेकिन यह पता चलता है कि नेटवर्क नीति टिलर और एपी-सर्वर के बीच संचार को रोक रही थी।

समाधान यह था कि टिलर के लिए एक नेटवर्क नीति बनाई जाए जिससे टिलर के सभी संचार को अनुमति दी जा सके


0

export TILLER_NAMESPACE=<your-tiller-namespace>यह मेरे लिए हल है, अगर <your-tiller-namespace>नहीं है kube-system। यह हेल्म क्लाइंट को सही टिलर नेमस्पेस की ओर इशारा करता है।


0

यदि आप AWS से EKS क्लस्टर का उपयोग कर रहे हैं और निषिद्ध मुद्दे का सामना कर रहे हैं ( उदाहरण के लिए : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"तो यह मेरे लिए काम कर रहा है:

उपाय:

  1. सुनिश्चित करें कि आपने AWS को कॉन्फ़िगर किया है
  2. सुनिश्चित करें कि कॉन्फ़िगर किए गए उपयोगकर्ता को क्लस्टर तक पहुंचने की अनुमति है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.