| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- map
- Spin Lock
- Github
- 비트필드를 이용한 dp
- 벨만-포드
- reference counting
- statefulset
- 그래프 탐색
- 강한 연결 요소
- 트라이
- 자바스크립트
- PROJECT
- Overlapped Model
- Delete
- Lock-free Stack
- Strongly Connected Component
- 이분 탐색
- Behavior Design Pattern
- DP
- Binary Lifting
- JavaScript
- Prisma
- 최소 공통 조상
- select 모델
- 2-SAT
- 게임 서버 아키텍처
- ccw 알고리즘
- SCC
- HTTP
- trie
Archives
- Today
- Total
dh_0e
[Cloud] K8s 요청 처리 단계, Service Account 본문
Kubernetes API Server의 요청 처리 3단계

- Authentication(인증 - 사용자 식별): HTTP 요청을 검사하여 메시지를 보낸 주체가 누구인지 식별
- SSO 시스템이나 인증서 등을 통해 확인하며, 미리 구성된 인프라를 활용함 (Authenticator App)
- Authorization(권한 부여 - 권한 확인): 인증된 사용자가 요청한 리소스에 대해 해당 작업(R/W/D 등)을 수행할 권한이 있는지 확인
- Admission Control(승인 제어 - 유효성 검사 및 수락): 리소스 생성/수정/삭제 요청 시, 컨텐츠(Spec)에 잘못된 부분은 없는지 확인하고, 필요시 수정함
- 이러한 플러그인은 여러 개 설치할 수 있으며, 요청은 모든 플러그인을 거쳐야 함
- ex) "Pod 만드는데 CPU 10,000개 할당해 줘" 같은 무리한 요청이 들어오면 거절

Service Account
- Service account: Pod가 API 서버와 통신하기 위해 사용하는 계정으로 요청 처리 과정 전반에 걸쳐 사용됨
- API 서버에 접속하는 클라이언트는 실제 사람(Human)과 내부 Pod로 나뉨

- Pod가 만들어지면 특정 Service Account와 연결되며, Pod는 이 계정의 토큰을 사용해 API 서버와 통신함
- Pod 생성 시 계정을 따로 지정하지 않으면 해당 namespace의 기본 Service Account가 자동으로 부여됨
- 위 사진에 나와있듯이, 다른 namespace의 Service Account에 연결할 수 없음
- 이를 통해 각 Pod가 어떤 리소스에 접근할 수 있는지 제어할 수 있음


Authorization & RBAC (역할 기반 접근 제어)

- K8s는 권한을 관리하기 위해 RBAC 플러그인을 주로 사용하여 Service Account에 권한을 적용함
- RBAC(Role Based Access Control): HTTP 메서드에 따라 동사(get, list, create, update 등) 단위로 권한을 나누어 줌
- Role(역할): 어떤 리소스에 대해 어떤 작업을 할 수 있는지 정의한 권한의 집합
- ex) 특정 리소스 A만 조회 가능
- Role Binding(역할 바인딩): 만들어둔 Role을 외부 사용자(User)나 Pod의 계정(Service Account)에 연결(적용)해주는 객체
- ClusterRoleBinding: 특정 namespace를 넘어, Cluster 전체 범위에 Role을 바인딩하는 것
- Role(역할): 어떤 리소스에 대해 어떤 작업을 할 수 있는지 정의한 권한의 집합

ex) Role YAML file

- 이러한 Role과 Role Binding을 통해, 특정 namespace나 리소스에 대한 접근 권한을 제어하여 결과적으로 사용자의 kubectl 명령어 실행 권한을 부여하거나 해제할 수 있음
- kubectl 명령어도 결국 http 요청이기 때문
- 위와 같이 Role을 만든 뒤, 아래와 같이 'kind: RoleBinding' YAML 파일을 따로 작성해서 service-reader와 연결해줘야 함
# Service Account 생성
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app-sa # 신분증 이름
namespace: foo # 아까 Role이 있던 namespace와 동일하게 맞춤
# RoleBinding 생성
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-services-binding # 이 바인딩 규칙의 이름
namespace: foo
subjects: # 1. 누구에게 권한을 줄 것인가? (대상)
- kind: ServiceAccount # 대상의 종류는 ServiceAccount!
name: my-app-sa # 방금 위에서 만든 그 신분증!
namespace: foo
roleRef: # 2. 어떤 권한을 줄 것인가? (참조할 Role)
kind: Role # 연결할 대상은 Role!
name: service-reader # 아까 사진에서 만든 그 권한(Role) 이름!
apiGroup: rbac.authorization.k8s.io
"Service account(Pod)에 Role(Resources 사용 권한)을 붙여주는 것이 Role binding이다."
'Cloud > Kubernetes' 카테고리의 다른 글
| [Cloud] Service Routing & Pod Networking (CNI Plugin) (0) | 2026.06.07 |
|---|---|
| [Cloud] Pod(Application) Update 종류 및 실습 (0) | 2026.06.03 |
| [Cloud] HPA (Horizontal Pod Autoscaling) (0) | 2026.06.03 |
| [Cloud] StatefulSet (0) | 2026.06.03 |
| [Cloud] Kubernetes Volumes III (Downward API, Job, CronJob, DaemonSet) (0) | 2026.05.08 |