k8s/concept

certificate signing requests

부엉이사장 2024. 9. 19. 22:32
Introduction
normal user만드는 방법이다.
보통은 k8s에서 외부 유저들과 연결되지만 로컬 클러스터 내에서 직접 user를 만들어서 테스트해볼게 있어서 포스팅한다.
사실 개념도 잘 이해 안되는데, 나중에 더 공부해봐야할듯..
cka준비할때는 유저까지는 안만든다.

 

 

 

Certificates and Certificate Signing Requests

Kubernetes certificate and trust bundle APIs enable automation of X.509 credential provisioning by providing a programmatic interface for clients of the Kubernetes API to request and obtain X.509 certificates from a Certificate Authority (CA). There is als

kubernetes.io

공식 문서 링크이다.

 

 

# 유저확인

kubectl config view

현재 kubernetes-admin유저로 접속되어있다.

걍 관리자 계정임.

 

 

 

 

 

 

 

# 먼저 openssl로 인증키 만들자

난 muzzi라는 유저를 만들 예정이다.

openssl genrsa -out muzzi.key 2048
openssl req -new -key muzzi.key -out muzzi.csr -subj "/CN=muzzi"

이거 치면 현재 디렉토리에 

이렇게 키파일과 키파일을 기반으로 인증서 요청파일 csr파일이 생긴다.

 

 

 

# csr yaml파일 만들기

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: muzzi
spec:
  request: 
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth

이렇게 muzzi csr yaml파일을 만들자.

 

 

 

# request 필드에 넣을 인증키 복붙해서 넣기

cat muzzi.csr | base64 | tr -d "\n"

아까 만들어진 muzzi.csr파일을 base64방식으로 인코딩을 해서 글자로 보여달라는 명령어다.

잘잘 붙는줄바꿈 없어달라는거임.

 

이렇게 나오는데 이걸 복붙해서 아까 저 yaml파일의 request부분에 붙여넣자.

 

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: muzzi
spec:
  request: 머시기 여기에 복붙!
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth

 

 

 

 

# 생성 후 확인

 

kubectl apply -f scr-muzzi.yaml

유저가 잘 만들어졌다.

 

난 계속 인코딩이 잘못됐다고 해서 그냥 gpt한테 cat명령어 출력 넣어서 yaml파일 양식 만들어달라고했음. 

아무래도 복붙할시에 문제가 있었던듯.. 눈으론 못찾음 ㅠ

 

kubectl get csr

으로 확인하면

잘 만들어졌다.

 

 

 

# 유저 승인

저 pending상태를 승인시켜줘야한다.

kubectl certificate approve muzzi

 

 

승인이 잘되고 상태가 approved, issued로 바뀌었다.

 

 

 

# 인증서 저장하기

kubectl get csr muzzi -o jsonpath='{.status.certificate}'| base64 -d > muzzi.crt

crt파일이 잘 만들어졌다.

 

 

# config에 등록하기

kubectl config set-credentials muzzi --client-key=muzzi.key --client-certificate=muzzi.crt --embed-certs=true
kubectl config set-context muzzi --cluster=kubernetes --user=muzzi

 

이제 config에서도 확인 할 수 있다.

 

 

 

# muzzi유저로 접속해보기

kubectl config get-contexts

현재 admin으로 접속되어있는데

kubectl config use-context muzzi

무찌컨텍스트 쓴다고 해주고

pod검색하면 forbidden뜬다.

 

 

 

# role & role binding해주기

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

role yaml파일

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: muzzi
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

rolebinding yaml파일.

저기 subjects부분에 user muzzi에게 저 role을 연결해준다는 거다.

일단 컨텍스트 다시 admin으로 돌아와서 role과 rolebinding을 만들어주고

 

 

muzzi context로 돌아와서 pod를 조회해보면 이제 조회가 된다.

다만 서비스는 조회가안된다.

 

role과 rolebinding은 걍 대충 빨리 적었다.

유저만드는게 목표인 포스팅이라..

 

 

 

 

 

 

 

+ 참고로 sa는 pod가 접근하는 계정이라고 보면된다.

 

 

'k8s > concept' 카테고리의 다른 글

VMware ubuntu 환경에서 k8s환경 구축하기.(2024 11월 기준 가능)  (0) 2024.09.06
configMap  (0) 2023.12.21
deployment strategy - blue&green / rolling / canary  (0) 2023.12.18
nodeLabels & annotation  (0) 2023.12.14
labels  (0) 2023.12.12