이 챕터는 권한이 제한된 쿠버네티스 계정(serviceaccount)을 생성하는 방법을 다룹니다.
이전 챕터
1편: https://malwareanalysis.tistory.com/133
2편: https://malwareanalysis.tistory.com/135
3편: https://malwareanalysis.tistory.com/136
3편에서 다루는 내용
2편에서 만든 context를 사용하는 방법과 serviceaccount에 권한을 제한하는 방법을 설명합니다.
context 전환
context전환은 kubectl config use context로 쉽게 할 수 있습니다. context이름만 설정하면 되는데요!. context이름은 current-context로 확인해야 합니다.
kubectl config get-contexts
kubectl config use-context dev
pod생성 시도
context를 전환하면 context에 해당하는 계정 권한을 갖습니다. 2편에서 생성한 developer 계정은 현재 어떠한 권한도 설정하지 않았습니다. 그러므로 모든 요청이 쿠버네티스 API서버에서 거부합니다.
예를 들어 pod를 test namespace에서 생성을 시도하면 permission denied 오류 메세지를 볼 수 있습니다. developer계정에 권한 설정이 안되어 있기 때문입니다.
권한 설정
쿠버네티스에서는 RBAC방법으로 계정에 권한을 설정하는 방법이 있습니다. 권한은 role이라는 쿠버네티스 리소스로 관리됩니다.
이번 예제에서는 pod생성, 삭제 권한만 developer계정에 설정하겠습니다.
role설정 하는 방법은 쿠버네티스 공식문서에 자세히 설명되어 있습니다.
쿠버네티스 role설정 공식문서: https://kubernetes.io/docs/reference/access-authn-authz/rbac/
- apigroup: 쿠버네티스 리소스가 속해 있는 api group이름
- resources: 권한 설정할 쿠버네티스 리소스
- verbs: 권한
아래 예제는 test namespace에 role을 생성하는 예입니다. pod생성과 삭제 권한을 설정했습니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["create", "delete"]
api group은 resources가 속한 그룹 이름입니다. 아래 명령어로 확인할 수 있습니다.
kubectl api-resources
api-group은 리소스마다 다릅니다. 예를 들어서 deployment는 apps그룹에 속합니다. 하지만 pod는 그룹이름이 없습니다.
권한 부여
생성한 role을 serviceaccount에 설정을 수동으로 해줘야 합니다. rolebinding을 사용해서 권한을 부여하겠습니다.
kubectl --dry-run을 이용해서 rolebinding yaml파일을 생성한 후, yaml파일을 쿠버네티스에 적용하겠습니다. 아래 명령어는 test namespace에 있는 developer serviceaccount에 dev라는 role을 설정하는 예입니다.
kubectl create rolebinding --serviceaccount=test:developer --role=dev --dry-run=client -o yaml > rolebinding.yaml
리다이렉트를 빼면 명령어가 생성한 yaml파일을 볼 수 있습니다.
kubectl create명령어로 방금 생성한 rolebinding을 실행합니다.
kubectl create -f rolebinding.yaml
pod 생성 테스트
이제 serviecaccount에 rolebinding이 적용되었습니다. 그러므로 [그림 3]에서 실패했던 pod생성이 이제 성공합니다.
kubectl config use-context dev
kubectl run --image=nginx nginx-test
pod삭제 권한도 있으므로 삭제도 잘 됩니다.
kubectl delete po nginx-test
'전공영역 공부 기록' 카테고리의 다른 글
FastAPI를 이용한 docker-compose API 개발 2편 (0) | 2021.08.09 |
---|---|
FastAPI를 이용한 docker-compose API 개발 1편 (0) | 2021.08.09 |
쿠버네티스에서 권한이 제한된 개발자 계정 발급 2편 (0) | 2021.08.03 |
윈도우에서 도커 설치 (0) | 2021.08.01 |
쿠버네티스에서 권한이 제한된 개발자 계정 발급 1편 (0) | 2021.07.28 |