전공영역 공부 기록

쿠버네티스에서 권한이 제한된 개발자 계정 발급 1편

악분 2021. 7. 28. 07:05
반응형

1편: https://malwareanalysis.tistory.com/133

2편: https://malwareanalysis.tistory.com/135

 

이 챕터는 권한이 제한된 쿠버네티스 계정(serviceaccount)을 생성하는 방법을 다룹니다.

https://youtu.be/qt4fMcvG564

 

1. 1편에서 다루는 내용

1편에서는 개발자 계정을 발급하기 전 필요한 사전지식인 쿠버네티스 context에 대해 설명합니다.

 

2. 들어가며

쿠버네티스에 접근할 수 있는 계정을 별도로 만들어야 할 때가 있는데요. 예로 개발팀을 위한 쿠버네티스 계정을 만들어야 할 때가 있습니다. 그리고 권한을 제한해야 하겠죠.

 

쿠버네티스 계정을 발급하고 권한을 제한하는 방법이 serviceaccount와 role입니다. 아래 그림처럼 개발팀에게 발급해준 계정은 test namespace에서만 동작하게 하고 다른 namespace에서는 요청을 거부시킬 수 있습니다.

그림1 쿠버네티스 계정 발급과 권한 제어

 

 

3. context 이해

3.1 context란?

pod 생성 등의 쿠버네티스 요청은 쿠버네티스 API서버가 처리합니다. 그리고 API서버는 사용자 요청을 처리하기 전 올바른 사용자가 맞는지(인증) 검사하고 사용할 수 있는 권한이 있는지(인가) 확인합니다. kubectl명령어를 사용할 때 알게모르게 인증, 인가 과정을 모두 거친거죠.

그림2 쿠버네티스 API가 요청을 처리하기 전

 

 

API서버는 무엇을 기준으로 인증, 인가를 확인할까요? 바로 쿠버네티스 context정보입니다. context정보에는 쿠버네티스 클러스터 정보와 사용자 정보가 존재합니다. 사용자가 요청할 때 별도로 인증, 인가 정보를 명시하지 않으면 context정보가 자동으로 요청정보와 같이 전송됩니다. 예로 kubectl 명령어를 사용하면 context정보가 같이 넘어갑니다.

context는 사용자 홈 디렉터리/.kube/config에 위치합니다.

그림3 kubectl 명령어를 사용할 때 자동으로 전성되는 context

 

3.2 context구조

앞서 말씀드린 것처럼 context는 쿠버네티스 클러스터 정보와 사용자 정보로 구성됩니다. 클러스터 클러스터 정보는 API서버의 인증서와 주소가 필요합니다. 유저 정보는 ssh키 쌍, 토큰, 사용자 이름과 비밀번호 등 여러가지 유형으로 유저를 설정합니다.

 

쿠버네티스를 설치하면 default로 쿠버네티스 admin 유저와 localhost 또는 host ip로 쿠버네티스 클러스터 정보가 설정되어 있습니다. 자동 설정된 값이 있었기 때문에 kubectl 명령어를 사용할 수 있었던 겁니다.

context는 cat $home/.kube/config 명령어로 확인할 수 있습니다.

그림4 context 구성

 

3.3 현재 사용중인 context확인

현재 사용중인 context를 확인해봅시다.

 

 

아래 명령어를 사용하면 현재 사용중인 context정보가 출력됩니다. 아래 예제에서는 kubernetes-admin@cluster.local context를 사용합니다.

kubectl config current-context

그림5 현재 사용중인 context확인

 

context에 대한 자세한 정보는 get-contexts명령어로 확인할 수 있습니다. [그림 4]에서 설명한 것처럼 context는 cluster와 user(authinfo)로 구성됩니다. 현재 사용중인 kubernetes-admin context는 cluster.local클러스터와 kubernetes-admin user를 사용하고 있습니다.

쿠버네티스를 처음 설치하면 로컬에서 쿠버네티스 통신을 위해 localhost주소와 쿠버네티스 관리자 계정으로 구성된 context가 생성됩니다.
kubectl config get-contexts

그림6

 

3. 마치며

개발자 계정을 생성하면 계정을 사용할 수 있도록 context를 생성할 것입니다. 그러므로 이번 글에서 context에 대해 미리 살펴봤습니다. 

 

다음 글에서는 serviceaccount를 사용한 개발자 계정을 생성하는 방법을 다룹니다.

반응형