이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 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
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
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
2) Role 과 User 를 binding
$ kubectl create rolebinding pod-rolebinding --role=pod-role --user=ckauser
3) Context 생성
$ kubectl config set-credentials ckauser --client-key=/data/cka/ckauser.key --client-certificate=/data/cka/ckauser.csr --embed-certs=true
$ kubectl config set-context ckauser --cluster=kubernetes --user=ckauser
'k8s' 카테고리의 다른 글
CKA 준비 (27) ServiceAccount Role binding (0) | 2022.08.17 |
---|---|
CKA 준비 (26) User Cluster Role Binding (0) | 2022.08.01 |
CKA 준비 (24) Kubernetes troubleshooting (2) (0) | 2022.07.26 |
CKA 준비 (23) Kubernetes troubleshooting (1) (0) | 2022.06.24 |
CKA 준비 (22) Kubernetes Upgrade (0) | 2022.06.24 |