조금 평범한 개발 이야기

KUBERNETES DASHBOARD 사용하기 본문

개발/docker & k8s

KUBERNETES DASHBOARD 사용하기

jogeum 2019. 10. 15. 02:40

 

  1. 쿠버네티스
  2. 준비
  3. 대시보드 설치
  4. 계정과 권한
    1. 계정 생성
    2. 계정 토큰 조회
    3. 대시보드 로그인
  5. 대시보드 삭제

 

쿠버네티스 (kubernetes)

쿠버네티스는 컨테이너화 되어 있는 서비스를 배포하고 손쉽게 스케일링 및 관리를 할 수 있는 오케스트레이션 도구 입니다. 쿠버네티스는 모든 명령은 커멘드(kubectl) 기반으로 이루어지지만 쿠버네티스에 구성된 서비스를 한눈에 확인하기 쉽게 하기 위해 gui 도구인 대시보드 (dashboard)를 별도로 설치해야 합니다.


준비

테스트 환경은 mac에서 작업이 진행되기 때문에 먼저 대시보드를 사용하기 전에 docker desktop for mac 이 설치되어 있어야 합니다.

이미 docker desktop for mac 이 설치되어 있다면 preferences > kubernetes 설정에서 "[x] Enable Kubernetes" 항목을 선택해 kubernetes를 사용하겠다고 설정합니다.

환경 구성을 할 때 꼭 docker desktop 이 설치되어 있을 필요는 없지만 docker와 kubernetes는 설치되어 있어야 합니다.


대시보드 설치

대시보드 설치는 미리 원격지에 정의되어 있는 kubernetes-dashboard.yaml 설정 파일을 통해 설치가 진행됩니다. kubernetes-dashboard.yaml 설정 파일의 내부를 자세히 보면 내부적으로 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 이미지를 컨테이너로 올리는 일련의 설정들이 포함되어 있다는 걸 알 수 있지만 내부 환경을 구성하는 방법에 대해서 굳이 알 필요는 없습니다.

아래 명령을 통해 쿠버네티스에 대시보드 설정을 적용합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

설치가 완료되었으면 대시보드 프락시를 띄웁니다.

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

이후 로그인 창을 열어서 창이 제대로 열리는 지를 확인합니다. 아래 url을 브라우저 창에 입력합니다.

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

로그인 창이 뜬다면 제대로 설치가 완료되었다는 것을 의미하지만 아직 계정 설정을 완료하지 않았기 때문에 아직은 로그인을 할 수 없습니다.


계정과 권한

로그인을 하려면 로그인에 필요한 계정을 만들어야 하는데 이보다 먼저 계정과 롤 그리고 자원에 대한 부분을 설명드리겠습니다.

권한을 부여한다는 것을 잘 이해해야 하는데 이것은 단순히 특정 사용자(A)에게 어떤 자원(B)을 할당하는 것이 아니라 계정(A)에 어떤 특정한 권한 롤(C)을 부여하는 형태로 이루어집니다. 그런 다음 이 권한 롤(C)이 접근하려는 자원(B)에 접근이 가능한지 여부를 판단하게 됩니다.

이처럼 권한의 부여는 크게 2 부분으로 나뉠 수 있습니다. 계정(A)에 대한 권한(C), 그리고 자원(B)에 대한 권한(C)입니다. 각각 계정과 자원에 지정되어 있는 권한 롤을 가지고 서로 비교해 계정이 특정 자원을 사용할 수 있는지 여부를 판단하게 되는 것이죠.

예를 들어 A 계정에 C 롤이 할당되어 있고 B 서비스 자원에도 C 롤이 할당 되어 있다면 A 계정은 B 서비스 자원을 사용할 수 있게 되는 것입니다.

이처럼 쿠버네티스의 권한을 설정하는 방법은 계정을 생성하는 부분과 계정에 대한 권한을 부여하는 부분으로 이루어집니다.

계정 생성

계정을 만들기 위해 ServiceAccount를 admin-user라는 이름으로 만듭니다. ServiceAccount는 쿠버네티스에서 관리하는 계정을 의미합니다. 이때 namespace는 kube-system으로 지정되어 있는데 이는 대시보드가 설치되어 있는 kube-system에서 사용할 계정을 만든다는 의미입니다.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

그다음 admin-user에서 사용할 권한 롤을 부여합니다. 권한 롤은 이미 쿠버네티스내에서 정의되어 있는 권한 cluster-admin을 사용하게 되며 이는 모든 클러스터에 대한 접근을 할 수 있는 권한임을 의미합니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin-user
    namespace: kube-system

해당 설정들을 적용하기 위해서 물리 파일 (yaml)로 만들어 kubectl create 명령어를 통해 계정을 생성하고 권한을 부여해 보겠습니다.

$ kubectl create -f service-account.yml
$ kubectl create -f cluster-role-binding.yml

이제 생성한 계정이 잘 만들어졌는지 확인해 봅시다. 아래 명령어 인자 중 sa는 service account를 의미합니다.

$ kubectl get sa -n kube-system
NAME                                 SECRETS   AGE
admin-user                           1         5h59m

계정 토큰 조회

계정이 만들어졌다면 이제 계정에 지정된 토큰을 가지고 와야 합니다. 토큰은 내가 admin-user 계정이며 cluster-admin 권한 롤을 가지고 있다는 것을 의미합니다. 이 토큰 값을 가지고 내가 유효한 자격을 소유하고 있다는 것을 증명할 수 있게 됩니다.

$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-rd6xd
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: c99a28db-e8e1-11e9-944a-025000000001

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      xxxx.xxxx.xxxx

대시보드 로그인

이제 이 토큰을 가지고 로그인 창에서 토큰을 선택하고 로그인을 진행하면 현재 쿠버네티스에 정의되어 있는 모든 자원을 확인할 수 있게 됩니다.


대시보드 삭제

만약 대시보드를 지우고 싶다면 아래 명령어로 생성된 대시보드 자원을 삭제할 수 있습니다.

$ kubectl --namespace kube-system delete deployment,service kubernetes-dashboard
Comments