danh sách helm: không thể liệt kê các sơ đồ cấu hình trong không gian tên “kube-system”


108

Tôi đã cài đặt helm 2.6.2 trên cụm kubernetes 8. helm inithoạt động tốt. nhưng khi tôi chạy helm listnó cho lỗi này.

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

Làm cách nào để khắc phục thông báo lỗi RABC này?

Câu trả lời:


228

Khi các lệnh này:

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

đã được chạy, sự cố đã được giải quyết.


10
Lưu ý rằng chỉ định này --clusterrole=cluster-admin, chắc chắn sẽ khắc phục sự cố về quyền, nhưng có thể không phải là cách bạn muốn. Tốt hơn hết là bạn nên tạo tài khoản dịch vụ, vai trò (cụm) và liên kết vai trò (cụm) với các quyền chính xác mà bạn cần.
Curtis Mattoon

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

1
khi chạy "init", phải có "--upgrade", các câu hỏi khác không đề cập đến.
Heavenwing

Khi tôi chạy, kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'tôi nhận đượcError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Câu trả lời an toàn hơn

Câu trả lời được chấp nhận cấp cho quản trị viên quyền truy cập đầy đủ vào Helm, đây không phải là giải pháp tốt nhất về bảo mật. Với một chút công việc nữa, chúng ta có thể hạn chế quyền truy cập của Helm vào một không gian tên cụ thể. Thêm chi tiết trong tài liệu Helm .

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

Xác định một Vai trò cho phép Tiller quản lý tất cả các tài nguyên tiller-worldnhư trong 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: ["*"]

Sau đó chạy:

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

Trong 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

Sau đó chạy:

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

Sau đó, bạn có thể chạy helm initđể cài đặt Tiller trong tiller-worldkhông gian tên.

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

Bây giờ tiền tố tất cả các lệnh bằng --tiller-namespace tiller-worldhoặc đặt TILLER_NAMESPACE=tiller-worldtrong các biến môi trường của bạn.

Thêm câu trả lời bằng chứng trong tương lai

Ngừng sử dụng Tiller. Helm 3 loại bỏ hoàn toàn nhu cầu về Tiller. Nếu bạn đang sử dụng Helm 2, bạn có thể sử dụng helm templateđể tạo yaml từ biểu đồ Helm và sau đó chạy kubectl applyđể áp dụng các đối tượng vào cụm Kubernetes của bạn.

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

1
Lưu ý, khi bạn làm điều này, bạn sẽ cần phải đặt tiền tố cho tất cả các lệnh điều khiển bằng --tiller-namespace tiller-worldhoặc đặt TILLER_NAMESPACE=tiller-worldtrong các biến môi trường của bạn.
spuder

1
Hoàn toàn đồng ý với câu trả lời bằng chứng trong tương lai. Những người lãnh đạo dường như nhận ra rằng công cụ RBAC khiến mọi thứ trở nên quá phức tạp để quản lý. Chúng chỉ ở mức alpha, nhưng đáng xem: Helm 3, alpha 1
Richard

1
Đồng ý, RBAC hơi nhiều thứ để bạn bắt tay vào thực hiện lúc đầu. Tôi vẫn đang đấu tranh với nó nhưng đang tiến bộ.
coreyperkins

Việc tạo ra các Tập liên tục có phải là thực hành chấp nhận bởi người lãnh đạo không? Chúng ta có nên tạo thêm một vai trò và ràng buộc cụm khác cho trường hợp này không?
Sawyer

20

Helm chạy với tài khoản dịch vụ "mặc định". Bạn nên cung cấp quyền cho nó.

Đối với quyền chỉ đọc:

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

Đối với quyền truy cập quản trị: Ví dụ: để cài đặt các gói.

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

Sau khi chạy kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, và sau đó chạy, helm listtôi vẫn nhận đượcError: 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

và sau đó cập nhật cài đặt quản lý để sử dụng serviceAccount:

helm init --service-account tiller --upgrade


0

Tôi gặp lỗi này khi cố gắng cài đặt máy xới đất ở chế độ ngoại tuyến, tôi nghĩ tài khoản dịch vụ 'máy xới đất' không có đủ quyền nhưng hóa ra chính sách mạng đang chặn giao tiếp giữa máy xới đất và máy chủ api.

Giải pháp là tạo chính sách mạng cho máy xới cho phép tất cả các giao tiếp đầu ra của máy xới


0

export TILLER_NAMESPACE=<your-tiller-namespace>đã giải quyết nó cho tôi, nếu <your-tiller-namespace>không kube-system. Điều này trỏ máy khách Helm đến không gian tên Tiller bên phải.


0

Nếu bạn đang sử dụng một cụm EKS từ AWS và đang gặp phải vấn đề bị cấm ( ví dụ : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"thì điều này phù hợp với tôi:

Giải pháp:

  1. Đảm bảo bạn đã định cấu hình AWS
  2. Đảm bảo rằng người dùng được định cấu hình có quyền truy cập vào cụm.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.