K8s를 사용하면서 사용자별로 Role을 정해줄 수 있다.
ServiceAccount 생성
Role 생성
RoleBinding 생성
ServiceAccount의 token을 얻어서 kubectl에 사용해보자.
ServiceAccount, Role, RoleBinding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
apiVersion : v1
kind : ServiceAccount
metadata :
namespace : test
name : jaejin
---
apiVersion : rbac.authorization.k8s.io/v1
kind : Role
metadata :
namespace : test
name : pod-reader
rules :
- apiGroups : [ "" ]
resources : [ "pods" ]
verbs : [ "get" , "watch" , "list" ]
---
apiVersion : rbac.authorization.k8s.io/v1
kind : RoleBinding
metadata :
name : read-pods
namespace : test
subjects :
- kind : ServiceAccount
name : jaejin
namespace : test
roleRef :
kind : Role
name : pod-reader
apiGroup : rbac.authorization.k8s.io
위의 코드를 보고 설명하면,
먼저 계정? 으로 쓰일 ServiceAccount를 생성한다.
test namespace에 jaejin이란 이름으로 생성된다.
Role은 pods의 정보를 가져온다는 것을 의미한다.
RoleBinding은 ServiceAccount와 Role을 연결한다.
Note
물론 test란 namespace는 미리 생성했다.
1
2
3
4
5
$ kubectl get sa -n test
NAME SECRETS AGE
default 1 16s
jaejin 1 13s
jaejin 이란 ServiceAccount가 생성되었다. Role과 RoleBinding도 확인하자.
1
2
3
4
$ kubectl get role -n test
NAME AGE
pod-reader 51s
1
2
3
4
$ kubectl get rolebinding -n test
NAME AGE
read-pods 77s
이제 이것들을 가지고 token을 뽑아 내자.
1
2
3
4
5
6
7
$ export serviceaccount = jaejin
$ export namespace = test
$ export server = $( kubectl config view | grep server | cut -f 2- -d ":" | tr -d " " )
$ export name = $( kubectl get secret -n $namespace | grep $serviceaccount -token | cut -f -1 -d " " )
$ export ca = $( kubectl get secret/$name -n $namespace -o jsonpath = '{.data.ca\.crt}' )
$ export token = $( kubectl get secret/$name -n $namespace -o jsonpath = '{.data.token}' | base64 -D)
위의 명령을 실행하면 token, ca 등의 정보를 가져올 수 있다.
kubectl의 config 파일을 만들어보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
echo "
apiVersion: v1
kind: Config
clusters:
- name: default-cluster
cluster:
certificate-authority-data: ${ ca }
server: ${ server }
contexts:
- name: default-context
context:
cluster: default-cluster
namespace: ${ namespace }
user: default-user
current-context: default-context
users:
- name: default-user
user:
token: ${ token }
" > config
config 파일이 만들어지고 이를 ~/.kube/config
의 경로로 저장한다.
이제 kubectl
명령을 날려보자. test namespace의 pods의 정보만 가져 올 수 있을 것이다.
serviceaccount
Role을 이용해 사용자별로 권한을 다르게 줄 수 있다 !!