Kubernetes: لا تعمل وحدات التخزين الثابتة RBAC مع مساحات الأسماء

تم إنشاؤها على ١٩ ديسمبر ٢٠١٦  ·  3تعليقات  ·  مصدر: kubernetes/kubernetes

تقرير الشوائب

إصدار Kubernetes (استخدم kubectl version ): إصدار العميل: version.Info {Major: "1"، Minor: "5"، GitVersion: "v1.5.1"، GitCommit: "82450d03cb057bab0950214ef122b67c83fb11df"، GitTreeState: "clean" ، تاريخ الإصدار: "2016-12-14T00: 57: 05Z"، GoVersion: "go1.7.4"، المترجم: "gc"، النظام الأساسي: "darwin / amd64"}
إصدار الخادم: version.Info {Major: "1"، Minor: "5+"، GitVersion: "v1.5.1-3 + 10e41f22e4421c"، GitCommit: "10e41f22e4421c9a14e9e6782c6375c199a07a86"، GitTreeState: "clean "-12D -15T10: 06: 44Z "، إصدار GoVersion:" go1.7.4 "، المترجم:" gc "، النظام الأساسي:" linux / amd64 "}

البيئة :

  • مزود السحابة أو تكوين الأجهزة : openstack
  • نظام التشغيل (على سبيل المثال من / etc / os-release): centos7
  • Kernel (على سبيل المثال uname -a ): 3.10.0-327.36.3.el7.x86_64

ما حدث : لقد قمنا بتمكين مصادقة RBAC. لدينا نوعان مختلفان من الربطات الدورانية:

apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-custom
subjects:
- kind: ServiceAccount
  name: default
  namespace: kube-system
- kind: User
  name: kubelet
  namespace: kube-system
- kind: User
  name: clusteradmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

و

apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: RoleBinding
metadata:
  name: default-admin
  namespace: default
subjects:
- kind: ServiceAccount
  name: default
- kind: User
  name: defaultadmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

لذلك لدينا مستخدمان مختلفان: الكتلة ، التي لها حق الوصول إلى كل شيء في مجموعة kube و defaultadmin ، والتي يجب أن يكون لها حق الوصول إلى جميع الموارد في مساحة الاسم الافتراضية. يعمل تنفيذ أوامر PV مع Clusteradmin بشكل جيد ، عند استخدام defaultadmin في مساحة الاسم الافتراضية ، فإنه يعطي خطأ:

kubectl الحصول على الكهروضوئية
خطأ من الخادم (محظور): الخادم لا يسمح بالوصول إلى المورد المطلوب (الحصول على مجلدات ثابتة)

خطأ من الخادم (محظور): خطأ عند إنشاء "db-pv.yaml": لا يسمح الخادم بالوصول إلى المورد المطلوب (نشر مجلدات مستمرة)

ما كنت تتوقع حدوثه : يجب أن يكون لدى defaultadmin حق الوصول إلى موارد PV في مساحة اسم محددة (في حالتي الافتراضية) ، لأن مجموعة مسؤول الكتلة تنص على ما يلي:

- apiGroups:
  - '*'
  attributeRestrictions: null
  resources:
  - '*'
  verbs:
  - '*'
- attributeRestrictions: null
  nonResourceURLs:
  - '*'
  verbs:
  - '*'

الشيء المهم هنا هو الموارد * ، لكن يبدو أن PV ليست جزءًا من حرف البدل.

كيفية إعادة إنتاجه (بأدنى حد ممكن وبدقة قدر الإمكان):

  • تمكين RBAC
  • إنشاء مستخدمين ، كلاسترادمين و الافتراضي
  • إضافة الربط العنقودي والتجليد الذي تم ذكره سابقًا في بطاقة الخطأ هذه
  • تنفيذ أوامر PV في مساحة الاسم الافتراضية مع كلا المستخدمين

التعليق الأكثر فائدة

PVs هي كائنات ذات نطاق الكتلة. لا توجد في مساحة الاسم. للحصول على إذن لاستخدام PV API مع RBAC ، تحتاج إلى ClusterRole منضم في نطاق الكتلة باستخدام ClusterRoleBinding .

ال 3 كومينتر

أواجه مشكلة مماثلة ، حيث لدي بعض مساحات الأسماء بما في ذلك dev و default . بصفتي "مستخدم مطور" ، يمكنني إنشاء مجموعة من الموارد في مساحة الاسم dev ، بما في ذلك PVC ، ولكن إنشاء PV باعتباره "مستخدم dev" في مساحة الاسم dev ينتج عنه نفس الشيء خطأ على النحو الوارد أعلاه:

Error from server (Forbidden): error when creating "db-pv.yaml": the server does not allow access to the requested resource (post persistentvolumes)

يمكنني إنشاء PV كمستخدم مسؤول في مساحة الاسم default ، وبعد ذلك كل شيء على ما يرام.

PV's غير متصلة بمساحة اسم

PVs هي كائنات ذات نطاق الكتلة. لا توجد في مساحة الاسم. للحصول على إذن لاستخدام PV API مع RBAC ، تحتاج إلى ClusterRole منضم في نطاق الكتلة باستخدام ClusterRoleBinding .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات