지니데비 기록 자세히보기

데브옵스/Orchestration

[Kubernetes] 47. ServiceAccounts

지니데비 2025. 1. 8. 14:19
728x90


쿠버네티스 계정은 사용자 계정과 서비스 계정으로 나뉜다.

UserAccount: 사람이 사용한다.

ServiceAccount: 서비스(응용프로그램)가 사용한다.

 

kubectl create serviceaccount dashboard-sa
kubectl get serviceaccount
kubectl describe serviceaccount ashboard-sa
kubectl describe secret ashboard-sa-token-kbbdm # serviceaccount의 토큰은 secret 객체로 저장된다.

 

ServiceAccount가 생성되면 토큰도 함께 자동으로 생성된다. (Secret 객체로 저장된다.) 응용프로그램이 kube-apiserver에 요청을 보낼 때 이 토큰을 사용하여 인증한다.

 

curl https://192.168.56.70:6443/api -insecure \
     --header "Authorization: Bearer [secret에 base64로 인코딩 된, serviceaccouunt 토큰값]"

 

 

만약 서비스(응용프로그램)가 클러스터에 호스팅된다면? 호스팅 된 secret 볼륨에 자동으로 마운트된다. (수동으로 설정할 필요가 없다.) 각각의 네임스페이스는 고유의 serviceaccount를 가지고, Pod가 생성될 때마다 자동으로 마운트 된다. (/var/run/secrets/kubernetes.io/serviceaccount) 토큰의 유효기간은 없고, serviceaccount가 존재하는 한 유효하다.

 

 

kubectl exec -it my-kubernetes-dashboard -- ls /var/run/secrets/kubernetes.io/serviceaccount

kubectl exec -it my-kubernetes-dashboard cat /var/run/secrets/kubernetes.io/serviceaccount/token
(토큰값 복사)

## 토큰값 디코딩
jq -R 'split(".") | select(length > 0) | .[0],.[1] | @base64d | fromjson' <<< [위에서 읽어온 토큰값 붙여넣기]
==
jwt.io 사이트 들어가서 붙여넣기

 

ServiceAccount는 쿠버네티스 클러스터 내에서 애플리케이션이 API 서버와 안전하게 통신할 수 있도록 권한을 부여하는 역할을 하는 리소스야. 애플리케이션(보통 파드)에서 쿠버네티스 API에 접근하려면 인증 토큰이 필요한데, 이걸 ServiceAccount를 통해 제공하지.

ServiceAccount가 지정되면, 쿠버네티스는 파드 내 특정 경로에 자동으로 인증 정보를 마운트해줘. 기본 경로는 **/var/run/secrets/kubernetes.io/serviceaccount**인데, 여기에는 다음과 같은 파일들이 포함돼 있어:

  • token: API 요청 시 사용되는 JWT 토큰
  • namespace: 파드가 실행 중인 네임스페이스 정보
  • ca.crt: 클러스터의 인증서 파일로, API 서버와 통신할 때 TLS를 통해 안전한 연결을 할 수 있도록 해줘

대부분의 쿠버네티스 클라이언트 라이브러리나 애플리케이션은 기본적으로 이 경로를 참고해서 자동으로 ServiceAccount의 인증 정보를 사용하도록 설정되어 있어. 이 덕분에 파드가 별도의 설정 없이도 안전하게 클러스터 API에 접근할 수 있는 거지.

 

 

 


v1.22 이후 만료기간이 있는 토큰이 생성되는 방법이 추가되었다. ProjectVolume에 마운트하여 serviceaccount를 사용하거나, TokenRequest API를 사용하여 serviceaccount르 사용하는 방법이다.

v1.24 이후 serviceaccount 생성과 동시에 토큰이 자동으로 생성되지 않으며, 수동으로 생성해야 한다.

kubectl create serviceaccount dashboard-sa
kubectl create token dashboard-sa

# secret에 연계
metadata.annotaintions.kubernetes.io/service-account.name: dashboard-sa

 

 

 

KEP 1205

https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/1205-bound-service-account-tokens/README.md

 

enhancements/keps/sig-auth/1205-bound-service-account-tokens/README.md at master · kubernetes/enhancements

Enhancements tracking repo for Kubernetes. Contribute to kubernetes/enhancements development by creating an account on GitHub.

github.com

 

 

 

 

KEP 2799

https://github.com/kubernetes/enhancements/issues/2799

 

Reduction of Secret-based Service Account Tokens · Issue #2799 · kubernetes/enhancements

Enhancement Description One-line enhancement description: reduce secret-based service account tokens Kubernetes Enhancement Proposal: https://github.com/kubernetes/enhancements/tree/master/keps/sig...

github.com

 

728x90
반응형