DevBoi

[k8s] Secret과 ServiceAccount 본문

Infra/[K8S & Docker]

[k8s] Secret과 ServiceAccount

HiSmith 2023. 1. 12. 21:46
반응형

Secret과 ServiceAccount에 대해서 포스팅하려고한다.

이놈은 느낌만 있고, 어떤거지? 라는 생각을 많이 했다.

 

그래서 공부를 해봤다.

 

Secret 이란?

시크릿은 비밀번호, Oauth토큰, ssh키 같은 민감한 정보들을 저장하는 용도로 사용한다.

이런 정보들은 컨테이너 안에 저장하지 않고, 별도 보관하였다가. 실제 포드가 실행할때 설정을 통해 컨테이너에 제공해준다.

 

시크릿 종류

- 내장시크릿

내장 시크릿은 쿠버네티스 클러스터 내부에서 API에 접근할때 사용한다.

클러스터 내부에서 사용되는 계정인 ServiceAccount를 생성하면, 자동으로 관련 시크릿이 만들어진다.

이렇게 만들어진 시크릿을 이용해서, 해당 ServiceAccount가 권한을 가지고 있는 API에 접근할 수 있다.

사용자 시크릿은 사용자가 만든 시크릿이다. kubectl create secret 으로도 만들 수 있다.

 

시크릿은 포드에 환경변수로 제공하거나 볼륨을 이용해서 파일 형식으로 제공할 수 있다.

추가로, Opaque타입은 base64로 인코딩한 값들을 넣어줘야한다.

 

내장 시크릿은 해당 시크릿을 통해서 포드에 환경변수를 제공할 수 있다.

 

위와 같이 env하위에 이름과, valueFrom, secretKeyRef를 작성하면, 해당 시크릿에서 값들을 가져온다.

위에서는 username과 password의 키를 가지고 값을 가져와서 세팅한다.

하여, 환경에서는 SECRET_USERNAME의 값으로 username을 넣어준다.

 

이와 같이 docker image를 private환경에서 가져올때, TLS 인증서에 대한 설정등에 Secret을 사용할 수 있다.

 

 

 

Service Account는 뭘까 그럼?

ServiceAccount는 우선 namespace에 할당된다.

ServiceAccount는 아래 3가지로 기능이 상호 동작한다.

 

ServiceAccount 어드미션 컨트롤러

토큰 컨트롤러

ServiceAccount 컨트롤러

 

sa admisson controller부터 보자

파드 수정은 어드미션 컨트롤러라는 플러그인을 통해 구현된다.

이것은 API서버의 일부이다. 파드가 생성되거나 수정될 때 파드를 수정하기 위해 동기적으로 동작한다.

이 플러그인이 활성 상태인 경우 파드 생성 또는 수정시 다음 작업을 수행한다.

 

1. 파드에 ServiceAccount가 없다면, ServiceAccount를 default로 설정한다.

2. 파드에 참조되는 ServiceAccount가 있도록 하고 그렇지 않으면 이를 거부한다.

3. 서비스 어카운트 automountServiceAccountTeoken과 파드의 autountServiceAccountToken중 어느것도 false로 설정되어있지 않다면, API접근을 위한 토큰이 포함된 volume을 파드에 추가한다.

즉, 기본값을 세팅해준다.

4. /var/run/secrets/kubernets.io/serviceaccount에 마운트된 파드의 각 컨테이너에 volumeSource를 추가한다.

5. 파드에 imagePullSecrets이 없는 경우, ServiceAccount의 imagePullSecrets이 파드에 추가된다.

 

 

 

Token controller는 

kube-controller-manger의 일부로 실행된다. 비동기적으로 동작하고

-서비스 어카운트 생성을 감시하고 API에 접근할 수 있는 해당 서비스 어카운트 토큰 시크릿을 생성한다.

-서비스 어카운트 삭제를 감시하고 토큰시크릿을 삭제한다.

-서비스어카운트 토큰 시크릿 추가를 감사히고, 투큰을 추가하는등의 작업을 수행한다.

 

 

 

ServiceAccountController

 

단순히  네임스페이스에 있는 서비스어카운트를 관리하고 default라는 이름의 서비스어카운트가 모든 

활성 네임스페이스에 존재하는지 확인한다.

 

반응형

'Infra > [K8S & Docker]' 카테고리의 다른 글

[k8s] 공부 내용 정리  (0) 2023.02.21
[Kubernetes] Api-server RestApi 호출 1부  (0) 2023.01.17
[k8s] 스프링과 k8s 연동  (0) 2023.01.10
[Docker] Nginx 세팅 및 테스트  (0) 2023.01.02
[Docker] Docker Swarm network_개념  (0) 2022.12.15