유저가 사용하는 것이 아니라, 서비스 or 머신이 사용하는 계정(프로메테우스, 대시보드 같은 외부 서비스 포함)
CKA 시험 범위에는 벗어나지만 알아두면 좋다고 함
sa 생성 후 토큰 생성하고, 토큰으로 인증
# serviceaccount 생성
kubectl create sa {sa이름}
# 토큰 생성
kubectl create token {토큰이름}
controlplane ~ ➜ k create sa dashboard-sa
serviceaccount/dashboard-sa created
controlplane ~ ➜ kubectl create token dashboard-sa
eyJhbGciOiJSUzI1NiIsImt...
생성한 토큰을 복붙해서 사용하면 대시보드 로그인 성공
그러나 이렇게 매번 로그인 할 때마다 토큰을 복붙하여 사용할 필요가 없음
파드 manifest yaml에서 spec.serviceAccountName 항목에 원하는 sa 이름을 넣고 배포하면 됨
spec:
containers:
- env:
- name: PYTHONUNBUFFERED
value: "1"
image: gcr.io/kodekloud/customimage/my-kubernetes-dashboard
...
serviceAccountName: dashboard-sa # 예시
이렇게 설정하면 파드 내에 마운트된 경로로 토큰이 공유되어, 사용자가 토큰 사용하지 않고 애플리케이션이 토큰을 가져와서 사용함
파드 내에서 sa 를 읽어오는 경로 - mounts 항목을 봐야함
# 일반적으로 /var/run/secrets 하위에 위치
controlplane ~ ➜ k describe pod web-dashboard-598c6cb6d-r7jff
Name: web-dashboard-598c6cb6d-r7jff
Namespace: default
...
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sf9f8 (ro)