k8s

CKA 준비 (25) User Role Binding

Joon0464 2022. 7. 26. 08:35

이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 https://www.youtube.com/watch?v=KdATmTulf7s&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=1 

 

 

 

 

이론)

- 쿠버네티스에서 모든 리소스의 접근은 API를 통해서 진행된다.

- 허가받은 유저의 요청에 대해서만 실행을 해주게 된다. -> 인증이 필요함 -> 쿠버네티스 계정이 따로 존재

- 인증서를 가지고 쿠버네티스 명령어를 요청하게 된다.

- 유저마다 할당된 권한이 존재한다.

- Service Account 는 특정 파드가 쿠버네티스 클러스터나 파드의 정보를 요청할 때, 즉 파드가 kubectl 명령어를 실행할 때 사용하게 된다.

- Role base 의 RBAC을 사용한다.

사전 준비)

1. key file 생성 및 csr 파일 생성

$ sudo mkdir -p /data/cka/
$ sudo openssl genrsa -out /data/cka/ckauser.key 2048
$ sudo openssl req -new -key /data/cka/ckauser.key -out /data/cka/ckauser.csr

csr 파일 생성 시 개인정보는 입력할 필요 없이 엔터로 넘어간다.

2. kubernetes 클러스터에 CertificateSigningRequest 요청

2.1 request 에는 base64 로 인코딩된 csr 파일 내용이 입력되어야 하므로 다음 명령어로 출력한다.

$ cat /data/cka/ckauser.csr | base64 | tr -d "\n"

해당 내용을 복사한다.

2.2 CertificateSigningRequest 요청을 위에서 확인한 request 항목으로 교체하여 다음과 같이 진행한다.

$ sudo cat <<EOF | sudo kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: ckauser
spec:
  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2lqQ0NBWElDQVFBd1JURUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdNQ2xOdmJXVXRVM1JoZEdVeApJVEFmQmdOVkJBb01HRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MFpEQ0NBU0l3RFFZSktvWklodmNOCkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNTjVFWXpBeGZZY3JOMGlQT0dzajZPaGVBOVc1WkVvR1ZnZENnTnEKUXNDdXJNdEZWbmsyM1dOT2hzTXIvN2hWRU1IdFFNVkhrWmFaZ0JiK2R0K0wxSFpNOWkweHhIdExmRzlQK3hSdApVV2tOamh6VkZqenowZnVQZ2RlVW5CSmlpRWJQREl5LzhOaGlPbDVGa2lMejFCTHhMSVQxZWpLODJpaUZNa3RPClU2ZGFlczI1MEpZMFcyM0pkeWl6d1I3bGtKc0pMVlZNSEt0ZzBkM3Y0c2taQlp2MDAyckxrV3FJRFJBWU5WRm8KUDRZeEZEMHlxL0tRLzhncHB6ZTNkUXZWS0FYT1p4VVppM0tEZDhGMnk5RzA0MmE4R25mRHQyZmQwbnpSU2owegpQU2lMc2pQTXBXamUvMnhFbGlOY0tQbVNVNGNZbi95a3dDbzY0NnhoODhENG1tY0NBd0VBQWFBQU1BMEdDU3FHClNJYjNEUUVCQ3dVQUE0SUJBUUJ0a3VNU2NYd3E4clRuNlQzeUFLcWxLdEE3c3RoWTZOSXgxNVBMbTJoWmJPdHoKMis4UzFyTDlVUUJJcUJRMlFWdVJNa2U2ZnFjOTRpNFU2dFI2SnpnK1QrMXJoSTJhSS96anBkL2Q3dEoxa01FUgpmZzBwUHd6Q2lZb056M0F6YytyWEh3bklIRmhoN0wwK0l1Ym9tdTBvcURiMzVnR0RNdHNHMnVEV2x0eEZwdGtECklaWXREVHJJT3ZqYVVRd2VGVkhpdGw5SkJGVEF0dnVIZVBCNUZtQlF3dU56VEo0VmkvRmN0dm9hRzVEUlVsRnUKK0pvNWlxSTNBYzAzNjJBT3hTeXV0L3FLdzNDTE8wZHlGbElNMzM2NEJTQnNPQTJVbkswSHhXQjZZSWRXdHhFZwpZUEdvSElxUGFDV25obzJ0ZTAxZ3c5U2ZCRkgwNFhMME80Tm00cHFFCi0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth
EOF

3. CertificateSigningRequest(CSR) 승인

3.1 다음 명령어로 CertificateSigningRequest 상태를 확인한다.

$ kubectl get csr

아직 pending 상태임을 볼 수 있다.

3.2 CertificateSigningRequest 를 승인

$ sudo kubectl certificate approve ckauser

정상적으로 승인되었다.

문제)

Cluster : kubectl config use-context k8s

 

TASK:

Create the kubeconfig named ckauser.

- username : ckauser

- certificate location : /data/cka/ckauser.csr, /data/cka/ckauser.key

- context-name : ckauser

- kubernetes cluster must be operated with the privileges of the ckauser account.

 

Create a role named pod-role that can create, delete, watch, list, get pods.

Create the following rolebinding.

- name : pod-rolebinding

- role : pod-role

- user: ckauser

 

풀이)

검색 키워드 : CSR

 

1) Role 생성

$ kubectl create role pod-role --verb=create,delete,watch,list,get --resource=pods

Role이 정상적으로 생성된 것 확인

2) Role 과 User 를 binding

$ kubectl create rolebinding pod-rolebinding --role=pod-role --user=ckauser

Rolebinding 이 정상적으로 생성되었는지 확인

3) Context 생성

 

$ kubectl config set-credentials ckauser --client-key=/data/cka/ckauser.key --client-certificate=/data/cka/ckauser.csr --embed-certs=true

ckauser 라는 이름의 context 가 생성되었다

$ kubectl config set-context ckauser --cluster=kubernetes --user=ckauser

ckauser context로 스위칭이 가능해진다.