앞에서 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 |