-
쿠버네티스는 그냥 REST API이다.
우리는 쿠버네티스를 사용할때 kbuectl 을 사용한다.
그럼 kbuectl은 무엇인가?
바로 "쿠버네티스 API를 호출하는 도구"이다.
여기서 쿠버네티스가 REST API의 모음이라고 해보자.
그럼 이런 생각도 할 수 있다.
"REST API면 kubectl 없이 그냥 호출할 수 있겠네?"
정답을 먼저 말하면 맞다.API를 호출할려면 먼주 주소를 알아야한다.
kubectl cluster-info위 명령어를 입력하면 "Kubernetes control plane is running at https://...." 같은 주소가 반환된다.
이 주소는 쿠버네티스의 여러 컴포넌트(컨트롤 플레인) 중에서도,
실제로 API 요청을 받아 처리하는 kube-apiserver의 주소다.
그리고 이 apiserver가 동작중이라는 의미이다.
쿠버네티스도 바보는 아니기에 인증과 인가를 위한 TOKEN이 필요하다.
모든 네임스페이스에는 default라는 serviceaccount가 기본값으로 존재하니, 이 SA를 통해 토큰을 생성할 것이다.
kubectl create token default -n default #토큰 환경변수 저장 export TOKEN="위의 응답" #윈도우 powershell이면 이렇게. $env:TOKEN = "위의응답"그럼 응답으로 복잡한 값이 쭈욱-나올건데, 이게 토큰 값이다.
그 토큰값을 환경 변수로 지정하면 된다.
그럼 이제 kubectl cluster-info를 통해 알아낸 API서버와 TOKEN으로 직접 API서버의 문을 두들겨보자.
curl -k -H "Authorization: Bearer $TOKEN" https://<1번에서 확인한 API서버>/version #윈도우 powershell이면 아래처럼 curl.exe -k -H "Authorization: Bearer $TOKEN" "https://<1번에서 확인한 API서버>/version그럼 이렇게 응답이 돌아온다!

위 정보는 "kubectl version" 을 통해서도 확인 가능하다.
이것으로 알 수 있는건, kubectl은 단순 쿠버네티스 API를 찔러 결과를 파싱하여 이쁘게(?)보여주는 용도라는 것이다.
물론 API로 pod정보 조회까지 가능하다.
curl -k -H "Authorization: Bearer $TOKEN" https://<1번에서 확인한 API서버>/api/v1/namespaces/default/pods #윈도우 powershell이면 아래처럼 curl.exe -k -H "Authorization: Bearer $TOKEN" "https://<1번에서 확인한 API서버>/api/v1/namespaces/default/pods하지만 위 명령어를 입력시 다음과 같은 응답이 온다.

에러는 403으로, 인증은 되었지만 인가(권한)이 없기 때문에 발생한 것이다.
우리는 TOKEN을 기본 유저인 default로 생성했는데, 이 유저의 경우 pod를 볼 수 있는 권한이 없기 때문이다.
이를 피할려면 ServiceAcoount생성과 Role, RoleBinding같은 RBAC관련 작업이 필요하다.
'클라우드 > Kubernetes' 카테고리의 다른 글
댓글
