자원을 이용하기 위해
>> 인증(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
- kubectl config set-context devuser --cluster=kubernetes --user=devuser
devuser를 context에 추가한다
- kubectl config current-context
- kubectl config use-context devuser
- kubectl config current-context
• 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 |