학습일지/kubernetes
Kubernetes Deep Dive - (3). Object Management
inspirit941
2021. 9. 25. 13:35
반응형
k8s Object Management
- kubectl get
- kubectl describe
- kubectl create
- kubectl apply
- kubectl delete
- kubectl exec : docker exec와 비슷하게 쓰인다고 보면 됨.
create와 apply의 차이?
- 이미 존재하는 Object일 경우 create로 명령어를 실행하면 에러 리턴, apply는 해당 object를 수정함.
Rule Based Access Management (RBAC)
- Role: 특정 namespace를 기반으로 Role 설정
- ClusterRole : namespace 관계없이 클러스터 기준으로 Role 설정.
생성한 Role을 사용자 (User)와 Bind하는 객체가 존재한다. Role과 User는 M:N 매핑이 가능하다.
## 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
Service Account : pod의 컨테이너가 k8s API로 통신해야 할 때 사용하는 Account.
- ex) Monitoring tool on Cluster... k8s api가 필요할 때
Rule Based Access Control (RBAC) 기반 Service Account 생성이 가능하다.
클러스터를 생성할 때 자동으로 Default ServiceAccount가 하나 생성된다. kube-system으로 service Account를 확인해보면 여러 개의 계정이 기본으로 있는 걸 확인할 수 있음.
- Default ServiceAccount는 namespace가 만들어질 때마다 기본적으로 생성된다.
클러스터에 my-serviceaccount.yaml 파일과 service-account-binding.yml 파일을 각각 kubectl apply로 등록한다.
반응형