공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지/kubernetes

Kubernetes Deep Dive - (3). Object Management

inspirit941 2021. 9. 25. 13:35
반응형

k8s Object Management

스크린샷 2021-08-21 오후 2 52 16

  • kubectl get

스크린샷 2021-08-21 오후 2 54 24

  • kubectl describe

스크린샷 2021-08-21 오후 2 54 44

  • kubectl create

스크린샷 2021-08-21 오후 2 55 05

  • kubectl apply

스크린샷 2021-08-21 오후 2 56 00

  • kubectl delete

스크린샷 2021-08-21 오후 2 56 15

  • kubectl exec : docker exec와 비슷하게 쓰인다고 보면 됨.

스크린샷 2021-08-21 오후 2 57 00

create와 apply의 차이?

  • 이미 존재하는 Object일 경우 create로 명령어를 실행하면 에러 리턴, apply는 해당 object를 수정함.

Rule Based Access Management (RBAC)

스크린샷 2021-08-21 오후 3 09 03스크린샷 2021-08-21 오후 3 08 53

  • Role: 특정 namespace를 기반으로 Role 설정
  • ClusterRole : namespace 관계없이 클러스터 기준으로 Role 설정.

생성한 Role을 사용자 (User)와 Bind하는 객체가 존재한다. Role과 User는 M:N 매핑이 가능하다.

스크린샷 2021-08-21 오후 3 11 01

## Add User in k8s cluster.
## 1. Create Name Space
kubectl create namespace development

## 2. Create private key and a CSR (Certificate Signing Request) for "DevUser"
sudo apt-get install openssl
cd ${HOME}/.kube

sudo openssl genrsa -out DevUser.key 2048 # generate private key
sudo openssl req -new -key DevUser.key -out DevUser.csr -subj "/CN=DevUser/O=development" 

# CN = common name, O = Organization
## The common name (CN) of the subject will be used as username for authentication request. The organization field (O) will be used to indicate group membership of the user.

## 3. Provide CA keys of Kubernetes cluster to generate the certificate
sudo openssl x509 -req -in DevUser.csr -CA ${HOME}/.minikube/ca.crt -CAkey ${HOME}/.minikube/ca.key -CAcreateserial -out DevUser.crt -days 45

## 4. Get Kubernetes Cluster Config
kubectl config view

## 5. Add the user in the Kubeconfig file.
kubectl config set-credentials DevUser --client-certificate ${HOME}/.kube/DevUser.crt --client-key ${HOME}/.kube/DevUser.key

## 6. Get Kubernetes Cluster Config - user가 등록된 걸 확인할 수 있다.
# 단, context가 새로운 user를 위한 환경으로 세팅되지는 않은 상황
kubectl config view

## 7. Add a context in the config file, that will allow this user (DevUser) to access the development namespace in the cluster.
# cluster, namespace, user 필드를 customize해서 수행. -> 아래 예시의 경우, DevUser는 development라는 context에서만 권한을 갖게 된다
kubectl config set-context DevUser-context --cluster=minikube --namespace=development --user=DevUser


###### Create a Role for the DevUser : ######
## 1. Test access by attempting to list pods. -> 접근이 불가능함. User만 만들어뒀고 해당 user에 권한을 할당하지 않았으므로
kubectl get pods --context=DevUser-context 

## 2. Create a role resource using below manifest
# pod-reader-role 파일 생성.
vi pod-reader-role.yml

## 3. Create the role
kubectl apply -f pod-reader-role.yml

## 4. Verify Role
kubectl get role -n development


## Bind the Role to the dev User and Verify Your Setup Works
## 1. Create the RoleBinding spec file
# pod-reader-rolebinding.yml파일 생성
vi pod-reader-rolebinding.yml

2. Create Role Binding
kubectl apply -f pod-reader-rolebinding.yml

## 3. Test access by attempting to list pods.
kubectl get pods --context=DevUser-context

## 4. Create Pod 
kubectl run nginx --image=nginx --context=DevUser-context

# -> DevUser에게 pod create 권한이 없으므로 에러가 뜬다. 대신 root 계정으로 pod 생성하고 DevUser로 조회하기.
kubectl run nginx --image=nginx -n development
kubectl get pods --context=DevUser-context

Service Account in k8s cluster

스크린샷 2021-08-21 오후 10 58 50

Service Account : pod의 컨테이너가 k8s API로 통신해야 할 때 사용하는 Account.

  • ex) Monitoring tool on Cluster... k8s api가 필요할 때

스크린샷 2021-08-22 오후 6 13 06

Rule Based Access Control (RBAC) 기반 Service Account 생성이 가능하다.

스크린샷 2021-08-23 오전 10 45 00

클러스터를 생성할 때 자동으로 Default ServiceAccount가 하나 생성된다. kube-system으로 service Account를 확인해보면 여러 개의 계정이 기본으로 있는 걸 확인할 수 있음.

  • Default ServiceAccount는 namespace가 만들어질 때마다 기본적으로 생성된다.

클러스터에 my-serviceaccount.yaml 파일과 service-account-binding.yml 파일을 각각 kubectl apply로 등록한다.

반응형