Kubernetes - Authentication - X509, kubectl, ServiceAccount

현시기얌·2022년 1월 17일
0

Kubernetes

목록 보기
17/23

X509 Client Certs

Cluster에 6443 Port로 API 서버가 열려있고 사용자가 이 API 서버로 https 접근을 하려면 쿠버네티스 설치 시 kubeconfig 라고해서 이 Cluster에 접근할 수 있는 정보들이 들어있는 파일이 있는데 이 파일안에 인증서 내용(CA crt, Client crt, Client key ..)이 있다.

그래서 Client key와 인증서를 복사해서 가지고 오면 된다.

최초에 발급기관 개인키와 Client 개인키를 만들고 개인키를 가지고 인증서를 만들기 위한 각각의 인증요청서(csr) 파일을 만든다.

CA의 경우 csr을 보고 바로 인증서를 만드는데 kubeconfig에 있는 CA crt가 바로 이 인증서다.

Client의 인증서는 발급 기관의 개인키와 인증서 그리고 Client의 csr을 가지고 Client 인증서를 만든다.
이렇게 만들어진 Client 인증서(crt)가 kubeconfig에 있는 Client crt 파일이다.

쿠버네티스를 설치할 때 kubectl도 설치를 하고 설정내용중에 이 kubeconfig 파일을 kubectl에서 사용가능하도록 복사하는 과정이 있는데 이렇기 때문에 우리는 kubectl로 쿠버네티스의 API에 인증이 되서 자원들을 조회할 수 있다.

또한 kubectl accept-hosts 옵션을 통해 8001번 Port로 Proxy를 열어두면 외부에서도 http로 접근을 할 수 있다.
그렇게 되면 kubectl이 인증서를 가지고 있기 때문에 사용자는 아무런 인증서 없이 접근할 수 있게 된다.

kubectl

외부서버에 kubectl을 설치해서 Multi Cluster에 접근할려면 사전에 각 Cluster에 있는 kubeconfig 파일이 외부 kubectl에도 있어야 한다.

이렇게 설정을 한다면 사용자는 원하는 Cluster에 접근을 해서 자원을 조회하고 만들 수 있다.

kubeconfig 안에는 clusters라는 항목으로 Cluster를 등록할 수 있는데 내용으로는 이름과 연결정보 그리고 CA 인증서가 있다.
그리고 users라는 항목으로 사용자를 등록할 수 있는데 내용으로는 유저 이름, 유저 개인키와 인증서가 있다.

그렇게 되면 contexts라는 항목을 통해 clusters와 users를 연결할 수 있다.

이렇게 Multi Cluster가 구축이 되면 사용자는

kubectl config user-context 클러스터이름 

명령어를 통해 사용하고 싶은 Cluster와 연결할 수 있다.

Service Account

쿠버네티스 Cluster안에 API 서버가 있고 Namespace를 만들게 되면 기본적으로 default라는 이름의 Service Account가 자동으로 생성된다.

그리고 Service Account에는 Secret이 달려있는데 Secret안에는 CA crt 정보와 Token값이 들어있다.
그리고 Pod를 만들면 Service Account와 연결이 되고 Pod는 이 Token값을 통해서 API 서버와 연결할 수 있다.

결국 Token 값만 알면 사용자도 이 값을 가지고 API 서버에 접근할 수 있다.

profile
현시깁니다

0개의 댓글