kubernetes의 인증 과정을 이해하기 위해서는 Role, RoleBinding이 무엇인지 알아야 한다.
어떤 이름의 역할에 어떤 권한을 부여할 것인지를 정의한 게 Role이고, 그 역할을 어떤 사용자(그룹) 또는 Service Account에 할당할 것인지 명시해 놓은 게 RoleBinding이다.
Role이란 개념은 단어의 의미 그대로 역할이란 개념으로 받아들이면 이해가 편하다.
어떤 역할을 개념적으로 구현해놓고, 그 역할에는 어떤 권한을 줄 것인지를 정의해놓은 게 Role이다.
사용자 A와 B가 있을 때, 이 둘은 같은 업무를 담당하고 있다 가정하자.
이 둘에게는 Pod 또는 Deployment를 생성(create)할 권한은 없지만, 조회(get)할 수 있는 권한을 주려고 한다.
이럴 때, 이 A와 B에게 적용할 Role을 생성하고, 이 둘에게 적용될 Role에는 Pod, Deployment를 조회할 수 있는 권한만 부여하도록 정의할 수 있다.
Role은 지정된 namespace에 대해서만 유효하다.
위 예시 이미지를 통해 ingress-nginx라는 role에 주어진 권한을 확인할 수 있다.
namespace에 대해서는 조회(get)만을 수행할 수 있지만, configmap, pod, secret, endpoint에 대해서는 get, list, watch 등 더 다양한 조회를 수행할 수 있다.
RoleBinding은 위에서 정의한 Role을 어떤 사용자(그룹) 또는 ServiceAccount에 매칭시킬 것인지를 정의할 때 사용한다.
예를 들어서 reader라는 role이 존재한다고 가정하고, 이 role을 사용자 A와 B에게 적용시키기 위해서는 RoleBinding을 통해 A와 B가 reader라는 role에 속해있다는 것을 정의해주어야 한다.
또는 A와 B가 공통된 사용자 그룹 G에 속해있다면, reader라는 role과 그룹 G를 매칭해주는 형태로도 정의할 수 있다.
위 이미지는 ingress-nginx라는 이름의 rolebinding이 어떻게 구성되어 있는지를 보여주고 있다.
ingress-nginx라는 role과, ingress-nginx라는 이름의 ServiceAccount를 연결시켜 주고 있음을 확인할 수 있다.
앞서 알아본 Role, RoleBinding은 생성 시 지정한 Namespace에 한정되어 동작한다.
반면, ClusterRole과 ClusterRoleBinding은 Cluster 전역적으로 적용된다.