Kubernetes/Udemy - CKAD with Tests

Service Account

비번변경 2021. 7. 13. 20:17

Service Account는 인증, 권한, 역할 기반 접근 제어 등과 같은 쿠버네티스의 보안 관련 개념과 관련된 개념이다.

 

사용자 계정; User Account

사람이 사용하는 계정이다.

관리 작업을 수행하기 위해 쿠버네티스 클러스터에 접근하는 관리자, 애플리케이션 배포를 위한 클러스터에 접근하는 개발자 등이 사용한다.

 

서비스 계정; Service Account

기계가 사용하는 계정으로 애플리케이션이 쿠버네티스 클러스터와 상호작용하는 데 사용한다.

 

Service Account Token

서비스 계정 생성 시 자동으로 생성되며 외부 애플리케이션이 Kubernetes API에 인증할 때 사용한다.

생성된 토큰은 secret 개체로 저장된다.

서비스 계정 생성 -> 서비스 계정 토큰 생성 -> secret 생성 -> secret에 토큰 저장

 

쿠버네티스 클러스터 외의 애플리케이션을 쿠버네티스에 인증할 때는 토큰 필드에 토큰 값을 붙여 넣어 구성한다. 하지만 애플리케이션이 쿠버네티스 클러스터 내에서 호스팅 되는 경우에는 Pod 내에 서비스 계정 토큰을 마운트 하여 인증을 구성할 수 있다.

 

생성 방법

kubectl create serviceaccount <NAME>

조회 방법

# 서비스 계정 조회
kubectl get serviceaccount

# 서비스 계정 상세조회
kubectl describe serviceaccount <NAME>

# secret(token) 조회
kubectl describe secret <TOKEN>

 

기본 서비스 계정

모든 네임스페이스는 생성 시 default라는 이름으로 기본 서비스 계정을 자동으로 생성한다. 쿠버네티스 API 쿼리 정도만 실행할 수 있는 제한적인 계정이다.

또한, 서비스 계정을 별도로 지정하지 않은 경우 Pod 생성 시 기본 서비스 계정과 토큰이 Volume으로 자동 mount 된다. 마운트 된 토큰은 ls 명령으로 확인 가능하며, 그 내용도 확인할 수 있다. 토큰은 토큰 이름과 같은 이름의 파일로 생성된다.

 

포드에 서비스 계정 지정 방법

yaml 파일에 serviceAccount 옵션을 사용한다.

apiVersion: v1
kind: Pod
metadata:
  name: my-kubernetes-dashboard
spec:
  containers:
  - name: my-kubernetes-dashboard
    image: my-kubernetes-dashboard
  serviceAccount: <NAME>

기존에 생성되어있는 Pod는 서비스 계정 edit 명령을 이용해 편집이 불가능하기 때문에 변경이 필요한 경우, 삭제 후 재생성해야 한다.

Deployment의 경우에는 수정 시 수정 내용을 이용해 자동으로 Pod를 재생성하기 때문에 edit 명령으로 편집할 수 있다.

 

automountServiceAccount

yaml 파일에 서비스 계정을 명시하지 않으면 기본 서비스 계정이 자동으로 마운트되는데, automountServiceAccount 옵션을 사용하면 서비스 계정을 자동으로 마운트 하지 않도록 설정할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: my-kubernetes-dashboard
spec:
  containers:
  - name: my-kubernetes-dashboard
    image: my-kubernetes-dashboard
  automountServiceAccountToken: false