자원을 이용하기 위해

출처 : https://kubernetes.io/ko/docs/concepts/security/controlling-access/


>> 인증(credential(ID(Account) + PW(public key, token)) → 권한허가 → Admission Controll

 

k8s에서는 사용자 별로 특정한 Object 관리 범위를 설정할  있다. 그러므로 사용자를 생성  있어야 하고, Role 만들어 해당 User에게 RoleBinding하고, namespace별로 context 지정하여 해당 사용자는 제한된 업무만 하도록 해야 한다.

1) 인증-User Service Account

User Account

Service Account : 백그라운드에서 실행, 애플리케이션(pod)이 실행 

 

kubernetes-admin : k8s의 root계정

User : cluster외부에서 k8s조작

 

인증서 = 인증 + 데이터 암호화
사용자는 반드시 Kubernetes cluster가 발행한 인증서가 있어야 한다. 그런 후 그 인증서를 Kubernetes API에 제공한다.

 

실습 ) devuser를 새로 추가해 pod만 관리하도록 

 

devuser 계정 생성

-  useradd devuser
-  passwd devuser
-  mkdir -p ~devuser/.kube  
-  cp -i /etc/kubernetes/admin.conf ~devuser/.kube/config
-  chown devuser:root ~devuser/.kube/config

ⓐ Private Key 생성하기

-  openssl genrsa -out devuser.key 2048
-  openssl req -new -key devuser.key -out devuser.csr -subj "/CN=devuser"
-  cat devuser.csr | base64 | tr -d "\n"

 

CertificateSigningRequest 생성하기

-  wget http://down.cloudshell.kr/k8s/lab/csr-devuser.yaml : 인증서 요청 파일
-  vi csr-devuser.yaml : devuser라는 사용자를 등록

(cat devuser.csr | base64 | tr -d "\n" 했던 결과를 복사하여 request 부분에 작성한다)

 

CertificateSigningRequest(CSR) 승인하기

-  k apply -f csr-devuser.yaml

승인

-  kubectl get csr devuser -o yaml  : 사용자 추가 
-  kubectl get csr devuser -o jsonpath='{.status.certificate}' | base64 -d > devuser.crt
-  kubectl get serviceaccounts 
-  kubectl get secrets (sa의 토큰(암호)을 알 수 있음)

 

 

2) 권한 관리 - Role 및 RoleBinding (권한(role)을 만들고 이를 부여(binding)한다)

-  kubectl apply -f csr-devuser.yaml
-  kubectl get csr  : 확인
-  kubectl get csr devuser -o yaml
-  kubectl get serviceaccount

 

Role 생성하기-1: developer_role

-  kubectl create role developer_role --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods

devuser는 pod에 대해서 create, get, list, update 권한을 갖고 있다.

 

Role 생성하기-2: sysadmin_role

-  kubectl create role sysadmin_role --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods --dry-run=client -o yaml > sysadmin.yaml

kubectl apply -f sysadmin.yaml
-  kubectl get role

 

-  kubectl create rolebinding developer-binding-devuser --role=developer_role --user=devuser

devuser는 pod에 대해서 create, get, list, update, delete 하는 권한을 갖게 된다.

 

-  kubectl config view

현재 devuser에 대한 정보가 없다

-  kubectl config set-credentials devuser --client-key=devuser.key --client-certificate=devuser.crt --embed-certs=true

kubeconfig에 devuser가 등록되었다

-  kubectl config set-context devuser --cluster=kubernetes --user=devuser

devuser를 context에 추가한다

-  kubectl config current-context

현재 상태

-  kubectl config use-context devuser
-  kubectl config current-context

현재 context는 devuser로 바뀌었다

• kubectl get pods -o wide (## 성공)
• kubectl get svc (## 실패)
• kubectl get nodes (## 실패)
• kubectl run myweb --image=nginx (## 성공)
• kubectl delete pod --all (## 성공)
권한을 부여한 대로 잘 작동한다.

 


kubectl cluster 구성정보 확인 및 변경방법

• kubectl config 
• kubectl config view
• kubectl config get-contexts
• kubectl config set-context devuser --cluster=kubernetes --user=devuser
• kubectl config use-context devuser  (## 현재context 지정하기)
• kubectl config current-context
• kubectl config use-context kubernetes-admin@kubernetes 
• kubectl config get-contexts (## * 가현재context이다)
• kubectl config current-context

'Study > Cloud' 카테고리의 다른 글

AZ-800 (AD)  (0) 2022.07.26
Kubernetes - Metrics Server  (0) 2022.07.25
Kubernetes - Pod Scheduling  (0) 2022.07.25
Kubernetes - Controller-2  (0) 2022.07.23
Kubernetes - Controller  (0) 2022.07.22

+ Recent posts