ServiceAccount

ServiceAccount는 Pod가 쿠버네티스 API와 상호작용할 때 사용하는 ID입니다.

특징

클라우드 네트워크 개념과 비교

실습 예시

ServiceAccount 생성

apiVersion: v1
kind: ServiceAccount
metadata:
  name: monitoring-app
  namespace: monitoring

Pod에 ServiceAccount 할당

apiVersion: v1
kind: Pod
metadata:
  name: metrics-collector
  namespace: monitoring
spec:
  serviceAccountName: monitoring-app
  containers:
  - name: collector
    image: metrics-collector:v1.2

RBAC와 함께 사용 (RoleBinding)

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metrics-viewer
  namespace: default
subjects:
- kind: ServiceAccount
  name: monitoring-app
  namespace: monitoring
roleRef:
  kind: Role
  name: pod-metrics-reader
  apiGroup: rbac.authorization.k8s.io

토큰 자동 마운트 비활성화

apiVersion: v1
kind: ServiceAccount
metadata:
  name: restricted-app
automountServiceAccountToken: false

ServiceAccount 관리

계정 확인

kubectl get serviceaccounts
kubectl describe serviceaccount monitoring-app

토큰 확인

kubectl describe secret $(kubectl get secrets | grep monitoring-app | awk '{print $1}')

Pod 내에서 ServiceAccount 토큰 사용

# Pod 내부에서 실행
curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
  https://kubernetes.default.svc/api/v1/namespaces/default/pods

보안 고려사항

일반적인 사용 패턴