إصدار 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 "}
البيئة :
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 ليست جزءًا من حرف البدل.
كيفية إعادة إنتاجه (بأدنى حد ممكن وبدقة قدر الإمكان):
أواجه مشكلة مماثلة ، حيث لدي بعض مساحات الأسماء بما في ذلك 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 .
التعليق الأكثر فائدة
PVs هي كائنات ذات نطاق الكتلة. لا توجد في مساحة الاسم. للحصول على إذن لاستخدام PV API مع RBAC ، تحتاج إلى ClusterRole منضم في نطاق الكتلة باستخدام ClusterRoleBinding .