certificate signing requests
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가 접근하는 계정이라고 보면된다.