Master Node에는 Kubernats API Server가 존재한다. 이 API 서버를 통해서만 쿠버네티스의 자원을 만들거나 조회할 수 있다. (Worker Node에는 Kubernats API Server 존재 X)
kubectl을 통해 CLI로 자원을 조회하거나 만드는 것도 모두 API 서버에 접근하는 것이다.
kubectl을사용하면내부적으로는쿠버네티스 API 서버와 REST 프로토콜로통신한다.
내부(master node 자체)에서 접근할 때 사용하는 방법이다.
외부에서 API 서버에 접근하는 방법은 아래와 같다. - 유저 입장에서 API 서버에 접근하는 방법으로, User Account라고 한다.
외부에서 API 서버로 접근하려면 인증서를 가지고 있는 사람만 HTTPS로 보안 접근을 할 수 있다.
만약 kubectl 명령으로 kubectl에 대해 프록시를 열어줬다면 인증서 없이 HTTP로 API 서버로 접근할 수 있다.
kubectl은 외부 PC에서도 설치할 수 있는데, config 기능을 활용하면 만약 쿠버네티스 클러스터가 여러 대가 있을 때 간편한 명령을 통해서 내가 접근할 수 있는 클러스터의 연결 상태를 유지할 수 있고, 이 연결이 된 상태에서는 kubectl get 명령으로 클러스터 내부에 있는 파드 정보를 가져올 수 있다.
파드들이 API 서버에 접근하기 위한 Service Account가 있는데, Service Account도 사용 방법을 알면 외부에서 접근하는 방법으로 사용할 수 있다. (밑에 내용 참고)
Pod가 API 서버에 마음껏 접근하게 한다면 Pod를 만들기만 하면 누구나 이 Pod를 통해서 API 서버에 접근이 가능하기 때문이다.
이를 해결하기 위해 쿠버네티스에서는 Service Account라고 해서 파드가 API 서버로 접근하는 방법이 있다.
위의 내용들은 모두 쿠버네티스 API 서버에 접근하는 Authentication에 대한 내용이다.
이후 쿠버네티스 API 서버에 접근해도 특정 네임스페이스 안에 파드에 접근할 수 있는지에 대한 여부를 결정하는 권한을 다루는 Authroziation이 있다.
마지막으로 현재는 프록시를 통해 API 서버에 접근하여 Dashboard에 접근하며 로그인도 스킵하고 있는데, 이는 보안적으로 좋지 않은 방법으로 인증서를 가지고 직접 API 서버를 통해 Dashboard에 접근하고 로그인하는 방법에 대해 설명하겠다.