본문 바로가기
네트워크/k8s

[k8s] 29. Authentication - X509 Certs, kubectl, ServiceAccount

by Lauren X Ming 2021. 2. 21.

Authentication - X509 Certs, kubectl, ServiceAccount

  • Kubernetes API Server에 접근하는 세 가지 방법에 대해 알아보자 --> Authentication

1. X509 Client Certs

  • Kubernetes API Server에 6443 포트로 연결되어 있음
  • 사용자가 https 접근을 하려면 쿠버네티스 클러스터에 kubeconfig가 있어야 함
  • kubeconfig에는 인증서 내용이 있음
    • CA crt, 발급기관 인증서
    • Client crt, 클라이언트 인증서
    • Client key, 클라이언트 개인키
  • 클라이언트가 kubeconfig의 인증서를 복사해서 가져오면 됨
  • 최초에 발급기관, 클라이언트에 대한 개인키를 만듦 --> CA key, Client key
  • 각각 개인키를 가지고 인증서를 만들기 위한 인증요청서인 CA csr, Client csr을 만듦
  • CA의 경우 인증요청서 CA csr를 가지고 인증서 CA crt를 만듦
  • 클라이언트 인증서 Client crt는 발급기관 개인키 + 인증서 + 클라이언트 요청서를 합쳐서 만들어 짐
    • Client crt = CA key + CA crt + Client csr
  • 이렇게 만들어진 Client key와 Client crt가 Kubeconfig에 있는 것
  • kubectl 설정 내용에서 kubeconfig를 kubectl에 통째로 복사해오는 과정도 있음
  • kubectl의 kubeconfig덕에 Kubernetes API Server에 인증이 되어 자원 조회 가능
  • accept-host 옵션으로 8001번 포트로 프록시를 열어서 외부에서도 http로 접근할 수 있음
  • 사용자는 8001번 포트를 통해 http로 kubectl에 접근하는데 kubectl이 kubeconfig를 가지고 있으니 Kubernetes API Server 자원 조회 가능

2. kubectl

  • 외부서버에 kubectl을 설치해서 멀티 클러스터에 접근
  • 사전에 각 클러스터에 있는 kubeconfig 파일이 사용자의 kubectl에도 있어야 함
  • 각 클러스터의 kubeconfig가 사용자의 kubectl에 있다면 사용자는 각 클러스터의 자원에 접근 가능

kubeconfig

  • clusters: 클러스터를 등록할 수 있음
    • 클러스터 이름, 연결정보, CA 인증서
  • users: 사용자를 등록할 수 있음
    • 사용자 이름, 사용자 인증서, 사용자 개인키
  • contexts: clusters와 users를 연결
    • context 이름, 클러스터 이름, 사용자 이름

사용자 - 클러스터 연결 명령어

kubectl config user-context context-A

3. Service Account

  • 쿠버네티스 클러스터와 Kubernetes API Server가 있음
  • 네임스페이스를 만들면 기본적으로 default라는 Service Account가 만들어짐
  • 이 Service Account에는 Secret이 있음
  • Secret 내용
    • CA crt
    • Token
  • 파드를 만들면 Service Account와 연결되고 파드는 token 값을 통해서 Kubernetes API Server와 연결 가능
  • 결국 사용자는 token 값만 알면 Kubernetes API Server에 접근할 수 있음

출처

인프런 - 대세는 쿠버네티스