앞에서 token 을 통해 config 를 설정하는 것을 보았다.

이번에는 x.509 를 기반으로 사용자를 생성하여 config 에 등록해보자.

 

 

사용자용 key 와 csr 생성
openssl genrsa -out dev-user.key 2048
openssl req -new -key dev-user.key -out dev-user.csr -subj "/CN=dev-user/O=dev-team"

 

 

CSR 을 k8s 리소스로 생성
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: dev-user
spec:
  request: $(cat dev-user.csr | base64 | tr -d '\n')
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth
EOF

 

아래와 같이 확인 가능

root@k8s-master:~/csr# k get csr
NAME       AGE   SIGNERNAME                            REQUESTOR          REQUESTEDDURATION   CONDITION
dev-user   4s    kubernetes.io/kube-apiserver-client   kubernetes-admin   <none>              Pending

 

 

CSR 승인 및 확인
kubectl certificate approve dev-user

root@k8s-master:~/csr# k get csr
NAME       AGE     SIGNERNAME                            REQUESTOR          REQUESTEDDURATION   CONDITION
dev-user   2m49s   kubernetes.io/kube-apiserver-client   kubernetes-admin   <none>              Approved,Issued



서명된 인증서 가져오기 
kubectl get csr dev-user -o jsonpath='{.status.certificate}' | base64 -d > dev-user.crt

 

 

config 에 사용자 추가
root@k8s-master:~/csr# k config set-credentials dev-user --client-certificate dev-user.crt --client-key dev-user.key
User "dev-user" set.

 

 

context 추가 및 사용
root@k8s-master:~/csr# k config set-context dev-user@kubernetes --cluster kubernetes --user dev-user
Context "dev-user@kubernetes" created.

root@k8s-master:~/csr# k config use-context dev-user@kubernetes
Switched to context "dev-user@kubernetes".

root@k8s-master:~/csr# k get po
Error from server (Forbidden): pods is forbidden: User "dev-user" cannot list resource "pods" in API group "" in the namespace "default"

 

 

dev-user 에 defulat namespace 에서 pod 에 대한 읽기 권한 추가
root@k8s-master:~/csr# k create role dev --resource pods --verb list,watch,get
role.rbac.authorization.k8s.io/dev created

root@k8s-master:~/csr# k create rolebinding dev-binding --role dev --user dev-user
rolebinding.rbac.authorization.k8s.io/dev-binding created

root@k8s-master:~/csr# k config use-context dev-user@kubernetes
Switched to context "dev-user@kubernetes".

root@k8s-master:~/csr# k get po
NAME                                      READY   STATUS    RESTARTS        AGE
my-app-77cb757cdf-4jh7r                   1/1     Running   5 (3h33m ago)   13d
my-app-77cb757cdf-qzw22                   1/1     Running   6 (29m ago)     13d

'k8s' 카테고리의 다른 글

yq 설치 및 사용  (0) 2025.06.10
context namespace 변경  (0) 2025.06.05
dashboard  (1) 2025.06.04
다른 node 의 pod 간 통신 확인  (1) 2025.05.23
kubeflow trouble shooting  (0) 2025.05.07

+ Recent posts