[K8s] ServiceAccount
서비스 어카운트 (Service Account)
서비스 어카운트는 쿠버네티스에서 애플리케이션의 인증 및 권한 관리를 담당한다.
쿠버네티스 클러스터 내에서 실행되는 애플리케이션은 기본적으로 API 서버와 상호작용을 해야하는데,
서비스 어카운트를 통해 API에 접근 권한을 부여받을 수 있다.
서비스 어카운트는 파드에서 실행되는 프로세스에 대한 ID를 제공하며,
해당 프로세스 ID는 서비스 어카운트 객체에 매핑된다.
API 서버에 액세스
모든 쿠버네티스의 네임스페이스에는 ServiceAccount가 하나 이상 포함되어 있다.
만약 서비스 어카운트를 따로 지정하지 않고 Pod를 생성하여 API 서버에 연결하면,
Pod는 default 네임스페이스에 명명된 서비스 어카운트를 자동으로 할당한다.
k run pod --image=nginx
k describe pod
서비스 어카운트의 요소
- ServiceAccount controller
: 네임스페이스 내부의 ServiceAccount를 관리하고,
"default"라는 ServiceAccount가 모든 활성 네임스페이스에 존재하는지 확인
- Token controller
: ServiceAccount에 대한 토큰 생성 및 관리를 담당
- ServiceAccount admission controller
: 새로운 Pod가 생성되면 포드 사양에 ServiceAccount가 지정되어있는지 확인하고,
서비스 어카운트가 지정되지 않은 Pod에 "default"를 지정한다.
서비스 어카운트 생성
쿠버네티스 1.24 이전까지는 서비스 어카운트를 생성하면 자동으로 서비스 어카운트 토큰이 생성되었지만,
이후에는 보안 강화로 인해 TokenRequest API를 사용하여, 직접 획득하여 Pod에 마운트해야한다.
또는 API 토큰을 수동으로 생성할 수 있다.
k create serviceaccount build-robot
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: build-robot-secret
annotations:
kubernetes.io/service-account.name: build-robot
type: kubernetes.io/service-account-token
EOF
생성된 service account를 pod에 할당할 수 있다.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod
name: pod
spec:
containers:
- image: nginx
name: pod
resources: {}
serviceAccount: build-robot
serviceAccountName: build-robot
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
서비스 어카운트 생성 후 추가적으로 RBAC 또는 클러스터 롤로 권한을 부여해야 한다.
참고
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
'🐳 Container > K8S' 카테고리의 다른 글
[K8s] Network Policy (0) | 2024.04.11 |
---|---|
[K8s] RBAC(Role-Based Access Control) (0) | 2024.04.09 |
[K8s] Job, CronJob (0) | 2024.01.16 |
[K8s] Probe (Liveness, Readiness, Startup) (0) | 2024.01.15 |
[Minikube] Windows에 Minikube 설치 (0) | 2023.08.24 |