รายการหางเสือ: ไม่สามารถแสดงรายการ configmaps ในเนมสเปซ“ kube-system”


108

ฉันได้ติดตั้ง helm 2.6.2 บนคลัสเตอร์ kubernetes 8 แล้ว 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

เมื่อฉันวิ่ง 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 ไปยังเนมสเปซเฉพาะได้ รายละเอียดเพิ่มเติมในเอกสารพวงมาลัย

$ 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 ขจัดความจำเป็นในการไถพรวนอย่างสมบูรณ์ หากคุณใช้ Helm 2 คุณสามารถใช้helm templateเพื่อสร้าง yaml จากแผนภูมิ Helm ของคุณจากนั้นเรียกใช้kubectl applyเพื่อใช้วัตถุกับคลัสเตอร์ Kubernetes ของคุณ

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ในตัวแปรสภาพแวดล้อมของคุณ
spuder

1
เห็นด้วยกับคำตอบในอนาคต ดูเหมือนว่าคนถือหางเสือเรือจะตระหนักดีว่าสิ่งที่ RBAC ทำให้สิ่งต่างๆซับซ้อนเกินกว่าจะจัดการได้ พวกเขาเป็นเพียงอัลฟ่าเท่านั้น แต่ควรค่าแก่การดู: Helm 3, alpha 1
Richard

1
เห็นด้วย RBAC เป็นสิ่งที่ต้องทำในตอนแรก ฉันยังคงดิ้นรนกับมัน แต่กำลังก้าวหน้า
coreyperkins

การสร้าง Persistent Volume เป็นการยอมรับโดยหางเสือหรือไม่? เราควรสร้างคลัสเตอร์ - บทบาทและการผูกอื่นสำหรับกรณีนี้หรือไม่
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

4

บัญชีบริการเริ่มต้นไม่มีสิทธิ์ API Helm น่าจะต้องได้รับการกำหนดบัญชีบริการและบัญชีบริการนั้นได้รับสิทธิ์ 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 เพื่อใช้ serviceAccount:

helm init --service-account tiller --upgrade


0

ฉันได้รับข้อผิดพลาดนี้ขณะพยายามติดตั้ง tiller ในโหมดออฟไลน์ฉันคิดว่าบัญชีบริการ 'tiller' ไม่มีสิทธิ์เพียงพอ แต่ปรากฎว่านโยบายเครือข่ายปิดกั้นการสื่อสารระหว่าง tiller และ api-server

วิธีแก้ปัญหาคือสร้างนโยบายเครือข่ายสำหรับรถไถนาที่อนุญาตให้มีการสื่อสารขาออกทั้งหมดของรถไถนา


0

export TILLER_NAMESPACE=<your-tiller-namespace>แก้ไขได้สำหรับผมถ้าไม่ได้เป็น<your-tiller-namespace> kube-systemสิ่งนี้จะชี้ไคลเอ็นต์ Helm ไปยังเนมสเปซ Tiller ที่ถูกต้อง


0

หากคุณกำลังใช้คลัสเตอร์ EKS จาก AWS และกำลังเผชิญปัญหาที่ต้องห้าม ( เช่น : 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.