Service Account(이하 SA)는 Pod에서 실행되는 프로세스를 위한 것으로 Pod가 API 서버와 상호 작용할 수 있도록 권한을 부여하는 데 사용되는 자격증명이다.
특정 Namespace에 속하며 RBAC(Role, Clusterrole 등)을 기반으로 권한을 관리한다.
1.24v 부터는 SA에 대한 토큰이 자동으로 생성되지 않아 생성을 해줘야 한다.
#신규 Secret 생성
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
토큰 생성 YAML
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/run/secrets/tokens
name: vault-token
serviceAccountName: build-robot
volumes:
- name: vault-token
projected:
sources:
- serviceAccountToken:
path: vault-token
expirationSeconds: 7200 #2시간
audience: vault #API 서버와 안전한 인증
SA Token 수동 마운트 전환
# SA에서 자격 증명 자동 마운트 해제
apiVersion: v1
kind: ServiceAccount
metadata:
name: build-robot
automountServiceAccountToken: false
...
# 특정 Pod에서 자격 증명 자동 마운트 해제
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: build-robot
automountServiceAccountToken: false
...
클러스터 내 인증 및 권한 부여 프로세스
ServiceAccount Admission Controller
default SA를 지정하지 않은 Pod에 할당하는 역할
API Server에 포함된다
새로운 Pod가 생성되면 Pod 사양에 SA가 지정되어있는지 확인하고 지정되어있지 않으면 기본 SA를 자동 할당한다
ServiceAccount Token Controller
각 SA에 대한 토큰 생성 및 관리를 담당
controller manager에 포함된다
새로운 SA가 생성되면 JWT 토큰, NS 및 인증서를 포함하는 암호를 자동으로 생성한다
ca.crt 토큰은 SA를 대신하여 API 서버에 대한 요청을 인증하는 데 사용할 수 있다
토큰 회전 및 삭제를 포함하여 토큰의 수명 주기를 관리한다
# SA 토큰이 자동 회전하는지 확인하는 방법
kubectl get serviceaccounts my-service-account -o yaml
#출력에서 secrets 필드가 없으면, 자동 회전 활성화 됨
ServiceAccount Contorller
SA 및 관련 Secret 생성 및 삭제를 관리한다
controller manager에 포함된다
NS가 생성되면 토큰 컨트롤러에서 생성된 해당 암호와 함께 NS에 대한 기본 SA를 자동으로 생성하고 SA가 삭제되면 연결된 암호도 함께 제거한다
'Docker & Kubenetes' 카테고리의 다른 글
가상화와 컨테이너 (0) | 2025.03.10 |
---|---|
kubectl 명령어 정리 (0) | 2025.03.07 |
Kubernetes 버전 업그레이드 (1.30) - 기존 클러스터 환경 삭제 (0) | 2025.03.04 |
Kustomize로 Kubernetes 구성 관리하기 (0) | 2024.07.04 |
Kubernetes Service (0) | 2024.05.14 |