Kubernetes RBAC ve Role, ClusterRole, RoleBinding ve ClusterRoleBinding Nedir?
Kubernetes Role-Based Access Control (RBAC), Kubernetes nesnelerine erişimi kontrol etmek için kullanılan bir izin sistemidir. RBAC, kullanıcılara ve gruplara belirli Kubernetes nesnelerine erişme izni vermek için kullanılır.
RBAC, Kubernetes'te izinleri yönetmenin en güçlü yoludur. RBAC, kullanıcılara ve gruplara Kubernetes nesneleri üzerinde özel izinler vermek için kullanılabilir. RBAC, Kubernetes nesnelerinin yetkisiz kullanıcılar tarafından değiştirilmesini veya silinmesini önlemeye yardımcı olabilir.
RBAC'yi etkinleştirmek için, API Server'ı --authorization-mode
parametresini RBAC
içererek başlatmanız gerekmektedir. Örnek bir API Server pod manifestini aşağıda görebilirsiniz:
RBAC, Role, ClusterRole, RoleBinding ve ClusterRoleBinding olmak üzere dört adet Kubernetes nesnesine sahiptir. Tıpkı diğer Kubernetes nesneleri gibi, kubectl gibi aracını kullanarak RBAC nesnelerini tanımlayabilir veya değiştirebilirsiniz.

1. Role ve ClusterRole Nedir?
Kubernetes Role ve ClusterRole, Kubernetes nesneleri üzerinde izinler vermek için kullanılan Kubernetes izin sistemindeki iki temel bileşendir.
Role, bir namespace için izinler verir. ClusterRole, tüm namespace'ler genelinde geçerli izinler verir.
Bir Role veya ClusterRole tanımlamak için; rolün adı, rolün sahip olduğu izinler ve rolün hangi kullanıcılara veya gruplara atanacağı belirtilir.
Bir Role tanımlamak için aşağıdaki manifest dosyasını örnek alabilirsiniz:
veya imperative yöntem ile şu komut sayesinde oluşturabilirsiniz:
Bir ClusterRole tanımlamak için aşağıdaki manifest dosyasını örnek alabilirsiniz:
veya imperative yöntem ile şu komut sayesinde oluşturabilirsiniz:
ClusterRole kullanarak;
- Node, PersistentVolume gibi cluster-scoped resource'lara
- Pod, Service gibi namespaced resource'lara tüm namespace'ler genelinde (örneğin:
kubectl get pods --all-namespaces
) /healthz
gibi non-resource endpointlere,
izinler tanımlayabilirsiniz.
default
namespace ayarlanır.Role ve ClusterRole Arasındaki Fark
Role ve ClusterRole arasındaki temel fark, etki alanıdır. Role, bir namespace içinde izinler verir, ClusterRole ise tüm namespace'ler üzerinde izinler verir.
Role veya ClusterRole eklerken nesnenin apiGroups değerini nasıl öğrenebilirim?
Role ve ClusterRole eklerken apiGroups parametresinin alacağı değeri kubectl api-resources -o wide
komutundaki APIVERSION sütununda yer alan değerlerden öğrenebilirsiniz. Bu sütundaki değerler apigroup/version formatına sahiptir.
Örneğin pods için apiGroups ""
kullanılırken, deployments için "apps"
kullanmalısınız.
Role veya ClusterRole eklerken nesnenin verbs değerini nasıl öğrenebilirim?
Role ve ClusterRole eklerken verbs parametresinin alacabileceği değerleri kubectl api-resources -o wide
komutundaki VERBS sütununda yer alan değerlerden öğrenebilirsiniz.
2. RoleBinding ve ClusterRoleBinding Nedir?
Kubernetes RoleBinding ve ClusterRoleBinding, Role ve ClusterRole nesnelerini kullanıcılara ve gruplara atamak için kullanılan iki kavramdır.
RoleBinding, bir Role'u veya ClusterRole'u (evet, ClusterRole'u namespaced bir halde kullanmış olursunuz) bir kullanıcıya, gruba veya service account'a bağlar. Rolebinding nesnesinde, role'un adı, bağlanacağı kullanıcı veya grup veya service account ve role'un hangi namespace'de kullanılacağı belirtilir.

ClusterRoleBinding, bir ClusterRole'u bir kullanıcıya, gruba veya service account'a bağlar. ClusterRoleBinding nesnesinde, ClusterRole'ın adı, rolün bağlanacağı kullanıcı veya grup veya service account ve rolün tüm namespace'ler üzerinde kullanılacağı belirtilir.
RoleBinding ve ClusterRoleBinding arasındaki temel fark, etki alanıdır. RoleBinding, bir namespace içinde izinler verir, ClusterRoleBinding ise tüm namespace'ler üzerinde izinler verir.
Bir RoleBinding tanımlamak için aşağıdaki manifest dosyasını örnek alabilirsiniz:
Bir ClusterRoleBinding tanımlamak için aşağıdaki manifest dosyasını örnek alabilirsiniz:
3. RBAC Default ClusterRole ve ClusterRoleBinding'ler
Kubernetes, cluster'ı kurduğunuzda default olarak bazı Role, ClusterRole, RoleBinding ve ClusterRoleBinding nesnelerini otomatik olarak oluşturur. Örneğin bazılarını görelim:
Tüm bu default eklenen nesneleri inceleyebilirsiniz fakat özet geçmek gerekirsek:
- Hem
cluster-admin
hem deadmin
, tüm kaynaklara okuma-yazma erişimi verir. Genel olarak, birini superuser veya cluster root yapmak istiyorsanız, Cluster Role olancluster-admin
rolünü kullanın. Tabi bunu yaparken iyi düşünmelisiniz. cluster-admin
tüm apiGroup, resource ve verblere wildcard (*) ile sahipken,admin
ClusterRole'ün de tüm bunlar tek tek eklidir. Yani yeni bir resource veya custom resource geldiğinde admin rolü yeni resource'a yetkiye sahip değilken (manual eklenmeli) cluster-admin sahiptir. İncelemek içinkubectl get clusterrole cluster-admin -o yaml
vekubectl get clusterrole admin -o yaml
komutlarını kullanabilirsiniz.edit
rolü, deployments, services veya configmaps gibi normal core kaynakların birçoğunun oluşturulmasına, güncellenmesine ve silinmesine izin verir, ancak RBAC izinlerinin değiştirilmesine izin verilmez.view
rolü, çoğu kaynakta (secretlar dahil olmak üzere) salt okunur erişim içindir.
Ayrıca cluster-admin
ClusterRoleBinding nesnesini incelerseniz, system:masters
isimli bir gruba atandığını görürsünüz. Bu nedenle cluster'da kullanıcılar oluştururken eğer cluster genelinde admin yetkisi vermek istemiyorsanız, grubunun system:masters
ayarlanmadığından emin olmalısınız.
Sıradaki yazı ile eğitim serisine devam edebilirsiniz.