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에 접근할 수 있음
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 31. Authorization - RBAC, Role, RoleBinding (0) | 2021.02.24 |
---|---|
[k8s] 30. Authentication - 실습 (0) | 2021.02.24 |
[k8s] 28. Accessing API - Overview (0) | 2021.02.21 |
[k8s] 27. Volume - 실습 (0) | 2021.02.21 |
[k8s] 26. Volume - Dynamic Provisioning, StorageClass, Status, ReclaimPolicy (0) | 2021.02.21 |