Kubernetes - rola do listowania namespaces

Pisane i publikowane na szybko. Za gramatykę i język nie odpowiadam, do czasu korekty ;-)

Czasem zdarza się, ze trzeba dać komuś (najczęściej deweloperowi) uprawnienia, żeby mógł listować namespaces na klastrze Kubernetes bez patrzenia w ich zawartość.

Zwykle przy popularnym przypisaniu roli do konkretnych namespaces listowanie ich kończy się uroczą informacją … namespaces is forbidden: User…

Brak uprawnień do namespaces

Rozwiązanie tej potrzeby jest proste – rola do namespaces na poziomie całego klastra z uprawnieniami get, list i watch.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: read-namespaces
rules:
  - apiGroups: ["*"]
    resources: ["namespaces", "namespaces/status"]
    verbs: ["watch", "get", "list"]

Potem tylko przypisanie do użytkownika lub grupy…

Co do samego zarządzania użytkownikami w Kubernetes warto skorzystać z integracji z jakimś katalogiem. Np. w Azure Kubernetes Service jest to integracja z Azure AD.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-namespaces-binding
subjects:
  - kind: User
    name: lukasz@blablabla.cos
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: read-namespaces
  apiGroup: rbac.authorization.k8s.io

… i można się cieszyć szczęśliwym użytkownikiem (lub zawiedzionym, jak próbował przeciągać korporacyjnie czas na braku uprawnień) z działającym kubectl get ns.

Uprawnień do namespaces działają

Cały YAML z rolą znajduje sie w repo.