- Image_classification
- 오블완
- tensorflow
- Android
- C
- Artificial_Intelligence
- Personal_Study
- cloud_computing
- study
- programmers
- Java
- Kubernetes
- Baekjoon
- app
- kubeflow
- 리눅스마스터2급
- 2023_1st_Semester
- 티스토리챌린지
- Python
- Database_Design
- Univ._Study
- Operating_System
- 자격증
- datastructure
- codingTest
- c++
- SingleProject
- Linux
- Algorithm
- Unix_System
코딩 기록 저장소
[쿠버네티스] 권한이 제한된 사용자 계정 발급 본문
목차
1. context
01. 쿠버네티스 context
- 쿠버네티스 계정을 발급하고 권한을 제한하는 방법이 serviceaccount와 role
- pod 생성 등의 쿠버네티스 요청은 쿠버네티스 API 서버가 처리하고, API 서버는 사용자 요청을 처리하기 전 올바를 사용자가 맞는지 검사하고 사용할 수 있는지 확인함
- API 서버의 인증, 인가를 확인하는 기준이 쿠버네티스 context 정보!
- context 정보에는 쿠버네티스 클러스터 정보와 사용자 정보가 존재함
- 사용자가 요청할 때 별도로 인증, 인가 정보를 명시하지 않으면 context 정보가 자동으로 요청정보와 같이 전송됨
※ context는 사용자 홈 디렉터리 /.kube/config에 위치함
02. context 구조
- 쿠버네티스 클러스터 정보와 사용자 정보로 구성됨
- 클러스터 정보 : API 서버의 인증서와 주소 필요.
- 사용자 정보 : ssh키 쌍, 토큰, 사용자 이름과 비밀번호 등 여러가지 유형으로 유저를 설정함
- 쿠버네티스 설치시 default로 쿠버네티스 admin 유저와 localhost 또는 host ip로 쿠버네티스 클러스터 정보가 설정되어 있음
- 자동 설정된 값이 있었기에 kubectl 명령어를 사용할 수 있었던 것
현재 사용중인 context 확인
- 아래 명령어 사용하면 현재 사용중인 context 정보가 출력됨
kubectl config current-context
- context에 대한 자세한 정보 출력
- context는 cluster와 user(authinfo)로 구성됨
- 현재 사용중인 kubernetes-admin context는 cluster.local클러스터와 kubernetes-admin user를 사용하고 있음
kubectl config get-contexts
2. 쿠버네티스 context에 등록
01. serviceaccount 생성
- 계정 이름과 namespace를 지정해주면 됨
- default namespace에 developer라는 serviceaccount을 생성함
kubectl create sa developer -n test
- serviceaccount가 생성되었는지 확인하는 방법
kubectl get sa -n test
- serviceaccount의 토큰을 발급함
- Kubernetes v1.24 이상부터는 Secret 기반 토큰이 사라지고, TokenRequest API를 통해 토큰을 발급함
kubectl create token developer -n test
02. context 생성
- serviceaccount를 이용해 쿠버네티스 인증을 하려면 context 등록이 필요함
- serviceaccount 토큰을 환경변수로 저장
- context를 생성할 때 serviceaccount 토큰을 이용함
- 토큰 길이가 길어서 환경변수로 저장하여 사용함
export DEV_TOKEN=$(kubectl create token developer -n test)
- 유저 등록
- kubectl config set-credentials 명령어로 context 유저를 쉽게 등록할 수 있음
kubectl config set-credentials dev --token=$DEV_TOKEN
- 클러스터 이름 확인
- context를 생성하기 위해 쿠버네티스 클러스터가 필요함
- 기존에 등록되어 있는 로컬 쿠버네티스 클러스터를 사용함
- 로컬 클러스터란 127.0.0.1 주소로 시작하는 클러스터 주소
- 클러스터가 설치되어 있는 서버에만 접근이 가능함
kubectl config get-clusters
- context 등록
- devloper으로 등록한 유저와 로컬 클러스터를 이용해 context를 등록함
kubectl config set-context dev \ --cluster=kubernetes \ --user=dev \ --namespace=test
- context 확인
- 생성한 context는 다음 명령어로 확인 가능함
- 현재 사용중인 context는 CURRENT필드에 별표로 표시됨
kubectl config get-contexts
3. context 사용 및 권한 제한
01. context 전환
- context 이름은 current-context로 확인해야 함
kubectl config use-context dev
pod 생성 시도
- context를 전환하면 context에 해당하는 계정 권한을 가짐
- developer 계정은 어떠한 권한도 설정하지 않았으므로 모든 요청이 쿠버네티스 API서버에서 거부함
- pod를 test namespace에서 생성을 시도하면 permission denied 오류 메시지가 뜸
02. 권한 설정
- RBAC 방법으로 계정에 권한을 설정하는 방법이 있음
- role이라는 쿠버네티스 리소스로 관리됨
- kubeflow 일부 권한을 developer 계정에 설정함
- apigroup: 쿠버네티스 리소스가 속해 있는 api group이름
- resources: 권한 설정할 쿠버네티스 리소스
- verbs: 권한
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: test
name: pods-role
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["create", "delete"]
- role 설정
03. 권한 부여
- 생성한 role을 serviceaccount에 설정을 수동으로 해줘야 함
- rolebinding을 사용해 권한을 부여함
- kubectl --dry-run을 이용해서 rolebinding yaml파일을 생성한 후, yaml 파일을 쿠버네티스에 적용함
kubectl create rolebinding pod-rolebinding \
--serviceaccount=test:developer \
--role=pods-role \
--namespace=test \
--dry-run=client -o yaml > pod-rolebinding.yaml
kubectl apply -f pod-rolebinding.yaml
- kubectl create 명령어로 방금 생성한 rolebinding을 실행함
kubectl create -f pod-rolebinding.yaml
04. pod 생성 테스트
- 아래 명령어를 이용해 실행이 되는지 확인해봄
kubectl auth can-i create pods --as=system:serviceaccount:test:developer -n test
- serviceaccount에 rolebinding이 적용됨
- 아까 실패했던 pod 생성이 성공하는 모습을 볼 수 있음
https://malwareanalysis.tistory.com/133
쿠버네티스에서 권한이 제한된 개발자 계정 발급 1편
1편: https://malwareanalysis.tistory.com/133 2편: https://malwareanalysis.tistory.com/135 이 챕터는 권한이 제한된 쿠버네티스 계정(serviceaccount)을 생성하는 방법을 다룹니다. https://youtu.be/qt4fMcvG564 1. 1편에서 다루
malwareanalysis.tistory.com
'개인 공부 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ③ (0) | 2025.06.05 |
---|---|
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ② (0) | 2025.05.21 |
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ① (2) | 2025.05.20 |
[쿠버네티스] PART3. 한 걸음 더 나아가기 (0) | 2025.05.07 |
[쿠버네티스] PART2. 쿠버네티스 기본 사용법 배우기 - ② (0) | 2025.04.18 |